diff --git a/README.md b/README.md index 13a43eaa8..3d661a13c 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,29 @@ -| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/README.md) | - -SimpleX logo - -# 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) | + +SimpleX logo + +# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design! + +[](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)     [](https://www.privacyguides.org/en/real-time-communication/#simplex-chat)     [](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 + [iOS app](https://apps.apple.com/us/app/simplex-chat/id1605771084)   [![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) @@ -26,7 +40,85 @@ - 🚀 [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](#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. + +Make a private connection Conversation Video call + +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/)
[![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/)
[![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/)
[![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/)
[![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/)
[![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/)
[![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/)
[![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/)
[![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 @@ -38,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 @@ -100,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. - -Make a private connection Conversation Video call - ## :zap: Quick installation of a terminal app ```sh @@ -225,70 +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 an English-speaking group if you want to ask any questions: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D) - -There are also several groups in languages other than English, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users. We do not always answer questions there, so please ask them in one of the English-speaking groups. - -- [\#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: [@ishi_sama](https://github.com/ishi-sama) -- Italian: [@unbranched](https://github.com/unbranched) -- Russian: project team - -Languages in progress: Chinese, Hindi, Czech, Japanese, Dutch and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed – please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us! - -## Contribute - -We would love to have you join the development! You can contribute to SimpleX Chat with: - -- translate 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. diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index b5cdd23ea..1b81bf7d5 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -5,14 +5,14 @@ plugins { } android { - compileSdk 32 + compileSdk 33 defaultConfig { applicationId "chat.simplex.app" minSdk 29 - targetSdk 32 - versionCode 103 - versionName "4.5.4" + targetSdk 33 + versionCode 104 + versionName "4.6-beta.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { @@ -77,10 +77,10 @@ android { jniLibs.useLegacyPackaging = compression_level != "0" } def isRelease = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("release") }) != null - if (isRelease) { +// if (isRelease) { // Comma separated list of languages that will be included in the apk - android.defaultConfig.resConfigs("en", "ru", "de", "fr", "it", "nl", "cs") - } + android.defaultConfig.resConfigs("en", "cs", "de", "es", "fr", "it", "nl", "ru", "zh-rCN") +// } } dependencies { diff --git a/apps/android/app/src/main/AndroidManifest.xml b/apps/android/app/src/main/AndroidManifest.xml index eb5f13055..3476fe605 100644 --- a/apps/android/app/src/main/AndroidManifest.xml +++ b/apps/android/app/src/main/AndroidManifest.xml @@ -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"> diff --git a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt index e26fa02eb..c868a9731 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt @@ -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) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt index 0af27cc12..923f71b97 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt @@ -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) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt index e3d10e1ad..b573a1375 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -950,7 +950,7 @@ data class GroupMember ( fun canChangeRoleTo(groupInfo: GroupInfo): List? = if (!canBeRemoved(groupInfo)) null else groupInfo.membership.memberRole.let { userRole -> - GroupMemberRole.values().filter { it <= userRole && it != GroupMemberRole.Observer } + GroupMemberRole.values().filter { it <= userRole } } val memberIncognito = memberProfile.profileId != memberContactProfileId diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index 5b2872724..35b918776 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -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" diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt index 1952cd80c..26a3c23c6 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt @@ -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,8 +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.DEFAULT_BOTTOM_PADDING -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 @@ -54,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. @@ -61,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) { + 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) { + 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 -> @@ -101,6 +134,7 @@ fun ActiveCallView(chatModel: ChatModel) { val callStatus = json.decodeFromString("\"${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) { @@ -109,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 -> { @@ -144,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 } @@ -160,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) { 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) }, @@ -172,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) { + 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, @@ -252,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) } } } @@ -262,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)) @@ -282,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) } } @@ -486,6 +539,7 @@ fun PreviewActiveCallOverlayVideo() { RTCIceCandidate(RTCIceCandidateType.Host, "tcp", null) ) ), + speakerCanBeEnabled = true, dismiss = {}, toggleAudio = {}, toggleVideo = {}, @@ -510,6 +564,7 @@ fun PreviewActiveCallOverlayAudio() { RTCIceCandidate(RTCIceCandidateType.Host, "udp", null) ) ), + speakerCanBeEnabled = true, dismiss = {}, toggleAudio = {}, toggleVideo = {}, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt index 753b2746b..1ff21e665 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt @@ -166,7 +166,7 @@ private fun RoleSelectionRow(groupInfo: GroupInfo, selectedRole: MutableState GroupProfileView(groupInfo, chatModel, close) } }, + addOrEditWelcomeMessage = { + ModalManager.shared.showCustomModal { close -> GroupWelcomeView(chatModel, groupInfo, close) } + }, openPreferences = { ModalManager.shared.showCustomModal { close -> GroupPreferencesView( @@ -147,6 +150,7 @@ fun GroupChatInfoLayout( addMembers: () -> Unit, showMemberInfo: (GroupMember) -> Unit, editGroupProfile: () -> Unit, + addOrEditWelcomeMessage: () -> Unit, openPreferences: () -> Unit, deleteGroup: () -> Unit, clearChat: () -> Unit, @@ -171,6 +175,8 @@ fun GroupChatInfoLayout( if (groupInfo.canEdit) { SectionItemView(editGroupProfile) { EditGroupProfileButton() } SectionDivider() + SectionItemView(addOrEditWelcomeMessage) { AddOrEditWelcomeMessage(groupInfo.groupProfile.description) } + SectionDivider() } GroupPreferencesButton(openPreferences) } @@ -387,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( @@ -432,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 = {}, ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt index 1b20eb7a8..ab8e35a9c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt @@ -120,9 +120,9 @@ fun GroupLinkLayout( if (groupLink == null) { SimpleButton(stringResource(R.string.button_create_group_link), icon = Icons.Outlined.AddLink, disabled = creatingLink, click = createLink) } else { -// SectionItemView(padding = PaddingValues(bottom = DEFAULT_PADDING)) { -// RoleSelectionRow(groupInfo, groupLinkMemberRole) -// } + SectionItemView(padding = PaddingValues(bottom = DEFAULT_PADDING)) { + RoleSelectionRow(groupInfo, groupLinkMemberRole) + } var initialLaunch by remember { mutableStateOf(true) } LaunchedEffect(groupLinkMemberRole.value) { if (!initialLaunch) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt new file mode 100644 index 000000000..f20630b94 --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt @@ -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, + 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, + ) +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt index 7d36074a3..4807241cd 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt @@ -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 ) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt index 3e6ec6ae8..8f3d7e685 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt @@ -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) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt index 777f7d110..74eae06e0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt @@ -1,12 +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 @@ -29,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 @@ -501,3 +504,42 @@ inline fun serializableSaver(): Saver = Saver( save = { json.encodeToString(it) }, restore = { json.decodeFromString(it) } ) + +fun saveAppLocale(pref: SharedPreference, 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) { + 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()) + } +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt index a00a7ae65..3e13b7cf5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt @@ -36,7 +36,7 @@ fun HowItWorks(user: User?, onboardingStage: MutableState? = 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 { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt index b6c218eff..c112f8ff2 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt @@ -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 = 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) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt index d63989438..2ff6c498b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt @@ -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, + languagePref: SharedPreference, 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, 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, onSelected: (DefaultTheme) -> Unit) { val darkTheme = isSystemInDarkTheme() @@ -193,6 +264,9 @@ private fun ThemeSelector(state: State, 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 = {}, ) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt index d5873f35b..c1fa4a04b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt @@ -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) + } + ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt index 7ab7a9419..36cffb693 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt @@ -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, 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) }, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt index fbcd5008e..31a3dd58e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt @@ -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( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt index d8df8db83..8286121c3 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt @@ -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, m: ChatModel, onUpd return fs } -private fun saveSMPServers(servers: List, m: ChatModel) { +private fun saveSMPServers(servers: List, 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, + ) +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index f6d4e6fc9..c586aaf36 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -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", diff --git a/apps/android/app/src/main/res/values-ar/strings.xml b/apps/android/app/src/main/res/values-ar/strings.xml index a6b3daec9..c3c9af8f8 100644 --- a/apps/android/app/src/main/res/values-ar/strings.xml +++ b/apps/android/app/src/main/res/values-ar/strings.xml @@ -1,2 +1,29 @@ - \ No newline at end of file + + اقبل + عن ٍSimpleX + a + b + اقبل + اسبوع 1 + شهر 1 + لون تمييزي + يوم 1 + اقبل + عن SimpleX + أعلاه ، ثم: + اقبل + لا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف التعريف وجهات الاتصال والرسائل والملفات الخاصة بك بشكل نهائي. + هذه المجموعة لم تعد موجودة. + رمز QR هذا ليس رابطًا! + الجيل القادم من الرسائل الخاصة + لا يمكن التراجع عن هذا الإجراء - سيتم حذف جميع الملفات والوسائط المستلمة والمرسلة. ستبقى الصور منخفضة الدقة. + لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المرسلة والمستلمة قبل التحديد. قد تأخذ عدة دقائق. + ينطبق هذا الإعداد على الرسائل الموجودة في ملف تعريف الدردشة الحالي الخاص بك + منصة الرسائل والتطبيقات تحمي خصوصيتك وأمنك. + يتم مشاركة ملف التعريف مع جهات الاتصال الخاصة بك فقط. + سيتم تغيير الدور إلى \"%s\". سيتم إبلاغ كل فرد في المجموعة. + سيتم تغيير الدور إلى \"%s\". سيتلقى العضو دعوة جديدة. + خوادم الاتصالات الجديدة لملف تعريف الدردشة الحالي الخاص بك + هذه الميزة تجريبية! ستعمل فقط إذا كان لدى العميل الآخر الإصدار 4.2 مثبتًا. يجب أن ترى الرسالة في المحادثة بمجرد اكتمال تغيير العنوان - يرجى التحقق من أنه لا يزال بإمكانك تلقي الرسائل من جهة الاتصال هذه (أو عضو المجموعة). + هذا الارتباط ليس ارتباط اتصال صالح! + \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-cs/strings.xml b/apps/android/app/src/main/res/values-cs/strings.xml index a4fd0b06f..d72c313d8 100644 --- a/apps/android/app/src/main/res/values-cs/strings.xml +++ b/apps/android/app/src/main/res/values-cs/strings.xml @@ -1,8 +1,8 @@ Povolte hlasové zprávy, pouze pokud je váš kontakt povolí. - Povolit odesílání mizejících zpráv. - Povolit odesílání hlasových zpráv. + Mizící zprávy povoleny. + Hlasové zprávy povoleny. Správci mohou vytvářet odkazy pro připojení ke skupinám. Přijmout Přidejte přednastavené servery @@ -11,7 +11,7 @@ Přidat server… Přistupovat k serverům přes SOCKS proxy na portu 9050\? Před povolením této možnosti musí být spuštěna proxy. Přijmout - Umožněte svým kontaktům odesílat mizející zprávy. + Umožněte svým kontaktům odesílat mizící zprávy. O SimpleX Chat Přidat do jiného zařízení Přijímat žádosti @@ -24,7 +24,7 @@ správce Přidat profil Všechny chaty a zprávy budou smazány – tuto akci nelze vrátit zpět! - Povolte mizející zprávy, pouze pokud to váš kontakt povolí. + Povolte mizící zprávy, pouze pokud to váš kontakt povolí. Přidejte servery skenováním QR kódů. 1 měsíci 1 týdnu @@ -33,8 +33,8 @@ Přijmout žádost o připojení\? Všichni členové skupiny zůstanou připojeni. Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí. - Povolit odesílání přímých zpráv členům. - Povolit nevratné smazání odeslaných zpráv. + Přímé zprávy členům povoleny. + Nevratné mazání odeslaných zpráv povoleno. Všechny zprávy budou smazány – tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás. Umožněte svým kontaktům nevratně odstranit odeslané zprávy. Povolte svým kontaktům odesílání hlasových zpráv. @@ -43,14 +43,14 @@ Odeslat přímou zprávu ČLEN Změnit roli ve skupině\? - Připojení + Připoj nepřímé (%1$s) SERVERY Příjímáno přez Vytvoření tajné skupiny Zobrazení názvu skupiny: Úplný název skupiny: - Váš profil v chatu bude zaslán členům skupiny + Váš chat profil bude zaslán členům skupiny Profil skupiny je uložen v zařízeních členů, nikoli na serverech. Uložit Aktualizovat nastavení sítě\? @@ -58,8 +58,8 @@ Váš náhodný profil Vašemu kontaktu bude zaslán náhodný profil Uložit barvu - Obnovení barev - Přízvuk + Obnovit barvu + Zbarvení Povolujete výchozí (%s) ano @@ -67,29 +67,29 @@ vždy Nastavení skupinových předvoleb Vaše preference - Mizející zprávy + Mizící zprávy povoleno pro kontakt přijaté, zakázané - Vy i váš kontakt můžete posílat mizející zprávy. + Vy i váš kontakt můžete posílat mizící zprávy. Zmizelé zprávy může odesílat pouze váš kontakt. Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání). Nevratné mazání zpráv je v tomto chatu zakázáno. - Zakázat odesílání přímých zpráv členům. + Přímé zprávy členům zakázány. %d sec %ds %d min - %d hodina + %d hodinu offered %s: %2s Odkazy na skupiny Hlasové zprávy - Vaše kontakty mohou povolit úplné vymazání zpráv. - Zmizení zpráv + Vaše kontakty mohou povolit úplné mazání zpráv. + Mizící zprávy Porovnejte bezpečnostní kódy se svými kontakty. SimpleX k - Připojit se přes kontaktní odkaz\? - Připojit se přes odkaz na pozvánku\? - Připojit se přes odkaz skupiny\? + Připojit se odkazem\? + Připojit se pozvánkou\? + Připojit se odkazem skupiny\? Váš profil bude odeslán kontaktu, od kterého jste obdrželi tento odkaz. připojeno chyba @@ -97,19 +97,19 @@ Pokus o připojení k serveru používanému pro příjem zpráv od tohoto kontaktu. smazáno neplatný chat - neplatné údaje + neplatná data spojení %1$d spojení navázáno pozvánka k připojení připojení… - jste sdíleli jednorázové spojení + sdíleli jste jednorázový odkaz sdíleli jste jednorázový odkaz inkognito prostřednictvím skupinového odkazu - prostřednictvím odkazu na kontaktní adresu - inkognito přes odkaz na kontaktní adresu - prostřednictvím jednorázového odkazu - inkognito přes jednorázový odkaz - SimpleX kontaktní adresa + prostřednictvím odkazu + inkognito přes odkaz + jednorázovým odkazem + inkognito jednorázovým odkazem + SimpleX adresa Jednorázová pozvánka SimpleX Skupinový odkaz SimpleX prostřednictvím %1$s @@ -118,31 +118,31 @@ Úplný odkaz Prostřednictvím prohlížeče Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené. - Chyba při ukládání serverů SMP - Chyba při aktualizaci konfigurace sítě + Chyba ukládání serverů SMP + Chyba změny konfigurace sítě Nepodařilo se načíst chat Nepodařilo se načíst chaty Aktualizujte aplikaci a kontaktujte vývojáře. Časový limit připojení Chyba připojení Zkontrolujte prosím své síťové připojení pomocí %1$s a zkuste to znovu. - Chyba při odesílání zprávy - Chyba při přidávání členů + Chyba odesílání zprávy + Chyba přidávání členů Kontakt již existuje Jste již připojeni k %1$s!. Neplatný odkaz na spojení Chyba příjmu požadavku od kontaktu Chyba změny adresy - Služba oznamování + Oznamovací služba Služba na pozadí je spuštěna vždy - oznámení se zobrazí, jakmile jsou zprávy k dispozici. Text zprávy Jméno kontaktu Skryté - Zobrazit kontakt a zprávu - Připojeno + Zobrazí kontakt a zprávu + Připojen SimpleX Zámek - Přihlaste se pomocí svého pověření - Zapnutí zámku SimpleX + Přihlásit pomocí ověření + Zapnout zámek SimpleX Odpověď Sdílet Kopírovat @@ -159,11 +159,11 @@ Čekání na obrázek Požádáno o přijetí obrázku Obrázek odeslán - Čekáme na obrázek + Čekám na obrázek Obrázek bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později! Váš kontakt odeslal soubor, který je větší než aktuálně podporovaná maximální velikost (%1$s). V současné době je maximální podporovaná velikost souboru %1$s. - Chyba při ukládání souboru + Chyba ukládání souboru Hlasová zpráva Hlasová zpráva… Připojeno @@ -179,9 +179,9 @@ Obnovit OK bez podrobností - Jednorázový zvací odkaz - Zkopírováno do schránky - Začít novou konverzaci + Jednorázová pozvánka + Zkopírováno + Nová konverzace Vytvořit tajnou skupinu (sdílet s kontaktem) (uloženo pouze členy skupiny) @@ -191,17 +191,17 @@ Vybrat soubor Pro zahájení nové konverzace Klepněte na tlačítko - nad, potom: - Přidat nový kontakt: pro vytvoření jednorázového QR kódu pro váš kontakt. - Skenovat QR kód: připojení ke kontaktu, který vám ukáže QR kód. - 💻 desktop: scan displayed QR code from the app, via Scan QR code. + potom: + Přidejte nový kontakt: vytvořte jednorázý QR kód pro váš kontakt. + Naskenujte QR kód: připojíte se ke kontaktu, který vám QR kód ukázal. + 💻 počítač: naskenujte QR kód z aplikace přez Skenovat QR kód. Vyčistit chat\? Vyčistit Označit jako přečteno Označit jako nepřečteno Ztlumit Zrušit ztlumení - Pozvali jste svůj kontakt + Pozvali jste kontakt Kontakt, se kterým jste tento odkaz sdíleli, se NEBUDE moci připojit! Připojení, které jste přijali, bude zrušeno! help @@ -210,9 +210,9 @@ Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později! Budete připojeni, jakmile bude vaše žádost o připojení přijata, vyčkejte prosím nebo se podívejte později! Požadavek na připojení byl odeslán! - Váš profil v chatu bude odeslán vašemu kontaktu - Vytvořte jednorázový odkaz na pozvánku - Vytvořit jednorázový zvací odkaz + Váš chat profil bude odeslán vašemu kontaktu + Vytvořit jednorázovou pozvánku + Jednorázová pozvánka Bezpečnostní kód %s je ověřeno Chat konzole @@ -225,7 +225,7 @@ Neplatná adresa serveru! Zkontrolujte adresu serveru a zkuste to znovu. Smazat server - Přispějte + Přispět Jak Jak používat servery Vaše servery ICE @@ -246,18 +246,18 @@ Platforma pro zasílání zpráv a aplikace chránící vaše soukromí a bezpečnost. Vytvořit profil Profil je sdílen pouze s vašimi kontakty. - Zobrazované jméno nesmí obsahovat prázdné znaky. + Zobrazované jméno nesmí obsahovat mezery. tučně probíhající hovor Decentralizovaná Jak to funguje Jak funguje SimpleX - Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odesílané pomocí 2 vrstvého end-to-end šifrování. - Soukromá oznámení + Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odesílané pomocí 2 vrstvého koncového šifrování. + Oznámení Pravidelné Ignorovat Hovor již skončil! - videohovor + video hovor audio hovor Audio a video hovory Hovory na uzamčené obrazovce: @@ -272,7 +272,7 @@ NASTAVENÍ NÁPOVĚDA ZAŘÍZENÍ - CHATS + CHATY Experimentální funkce SOCKS PROXY IKONA APLIKACE @@ -281,11 +281,11 @@ VOLÁNÍ Export databáze Import databáze - Smazání databáze - Chyba při exportu chat databáze + Smazat databázi + Chyba exportu chat databáze Import Restartujte aplikaci, abyste mohli používat importovanou chat databázi. - Smazat profil chatu\? + Smazat chat profil\? Tuto akci nelze vzít zpět! Váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny. Restartujte aplikaci a vytvořte nový chat profil. Nejnovější verzi chat databáze musíte používat POUZE v jednom zařízení, jinak se může stát, že přestanete přijímat zprávy od některých kontaktů. @@ -293,24 +293,24 @@ Soubory a média Smazat soubory a média\? Odstranit zprávy - Odstranit přístupovou frázi z úložiště klíčů\? + Odstranit frázi z úložiště klíčů\? Oznámení budou doručována pouze do doby, než se aplikace zastaví! Odstranit Aktualizovat - Aktuální přístupová fráze… - Aktualizovat přístupovou frázi databáze + Aktuální fráze… + Aktualizovat přístupovou frázi Zadejte prosím správnou aktuální přístupovou frázi. - Váš chat databáze není šifrována - nastavte přístupovou frázi pro její ochranu. - K bezpečnému uložení heslové fráze slouží úložiště klíčů Android - umožňuje fungování služby oznámení. + Chat databáze není šifrována - nastavte přístupovou frázi pro její ochranu. + K bezpečnému uložení přístupové fráze slouží úložiště klíčů Android - umožňuje fungování služby oznámení. Upozornění: pokud přístupovou frázi ztratíte, NEBUDE možné ji obnovit ani změnit. Databáze bude šifrována a přístupová fráze bude uložena v úložišti klíčů. Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit. Soubor: %s - Pro otevření chatu je vyžadována přístupová fráze databáze. + Pro otevření chatu je vyžadována přístupová fráze. Neznámá chyba Otevřete chat Obnovte zálohu databáze - Po obnovení zálohy databáze zadejte předchozí heslo. Tuto akci nelze vrátit zpět. + Po obnovení zálohy databáze zadejte předchozí frázi. Tuto akci nelze vrátit zpět. Chat je zastaven Chat se archivuje Smazat chat archiv\? @@ -327,7 +327,7 @@ změnila se vaše adresa Rozšířit výběr rolí Nelze pozvat kontakt! - Již máte profil chatu se stejným názvem. Zvolte prosím jiné jméno. + Již máte chat profil se stejným názvem. Zvolte prosím jiné jméno. Vytvořit frontu Zabezpečit frontu Okamžitá oznámení! @@ -360,7 +360,7 @@ špatný kontrolní součet zprávy Chat databáze importována Nová přístupová fráze… - Uložte heslo a otevřete chat + Uložte frázi a otevřete chat CHAT ARCHIV Nebyl vybrán žádný kontakt Snažíte se pozvat kontakt se kterým jste sdíleli inkognito profil, do skupiny ve které používáte svůj hlavní profil @@ -385,9 +385,9 @@ Jasné ověření Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních. Vaše nastavení - Vaše kontaktní adresa SimpleX + Vaše adresa SimpleX Heslo databáze a export - Vaše chat profily + Chat profily Zaslat otázky a nápady Test serveru Servery ICE (jeden na řádek) @@ -406,14 +406,14 @@ Zprávy SimpleX Chat Zobrazení náhledu Náhled oznámení - Spustí se při otevření aplikace + Spuštěna při otevřené aplikaci Spouští se pravidelně - Vždy zapnuto + Vždy zapnuta Každých 10 minut kontroluje nové zprávy, po dobu až 1 minuty - Zobrazit pouze kontakt + Zobrazí pouze kontakt Skrytý kontakt: Zapněte funkci - Zapnutý zámek SimpleX Lock + Zámek SimpleX zapnut Odemknout Ověřování zařízení není povoleno. Jakmile povolíte ověřování zařízení, můžete zámek SimpleX Lock zapnout prostřednictvím Nastavení. Ověřování zařízení je zakázáno. Zámek SimpleX je vypnut. @@ -439,7 +439,7 @@ Hlasové zprávy jsou zakázány! Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv. Poslat živou zprávu - zpráva se bude aktualizovat pro příjemce během psaní. - Vytvořte jednorázový odkaz na pozvánku + Vytvořit jednorázovou pozvánku Skenovat QR kód ( skenovat nebo vložit ze schránky) Upravit obrázek @@ -453,7 +453,7 @@ kontakt má šifrování e2e kontakt nemá šifrování e2e peer-to-peer - přes relay + přes relé Zavěsit Video vypnuto Video zapnuto @@ -463,14 +463,14 @@ Přeskočené zprávy Ochrana osobních údajů a zabezpečení Vaše soukromí - Ochrana obrazovky aplikace - Odesílání náhledů odkazů - Zálohování dat aplikace - Potvrdit novou heslovou frázi… + Skrývat aplikaci + Odesílat náhledy odkazů + Zálohovat data aplikace + Potvrdit frázi… Chyba: %s Opustit skupinu\? Skupina je neaktivní - vlevo + odešel Vyčistit Přepnout Role bude změněna na \"%s\". Všichni ve skupině budou informováni. @@ -479,7 +479,7 @@ vteřin Umožňuje mít v jednom chat profilu mnoho anonymních spojení bez sdílení údajů mezi nimi. Pokud s někým sdílíte inkognito profil, bude použit pro skupiny, do kterých vás pozve. - Systém + Systémové Hlasové zprávy Vy i váš kontakt můžete nevratně mazat odeslané zprávy. %dm @@ -518,10 +518,10 @@ ŽIVĚ inkognito přes skupinový odkaz Ujistěte se, že adresy serverů SMP jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní. - Chyba při vytváření profilu! + Chyba vytváření profilu! Duplicitní zobrazované jméno! - Chyba při přepínání profilu! - Chyba při připojování ke skupině + Chyba přepínání profilu! + Chyba připojování ke skupině Nelze přijmout soubor Odesílatel zrušil přenos souboru. Chyba příjmu souboru @@ -544,12 +544,12 @@ Pravidelná oznámení jsou vypnuta! Databáze nefunguje správně. Klepnutím se dozvíte více Aplikace může přijímat oznámení pouze při svém běhu, žádná služba na pozadí nebude spuštěna - Skrýt kontakt a zprávu + Skryje kontakt i zprávu Chcete-li chránit své informace, zapněte zámek SimpleX Lock. \nPřed zapnutím této funkce budete vyzváni k dokončení ověření. - Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete vyzváni k ověření. + Při spuštění, nebo obnovení aplikace po 30 sekundách, budete vyzváni k odemčení. Vypnout zámek SimpleX - Potvrďte své pověření + Potvrďte vzor Ověřování není k dispozici Zastavit chat Otevřete chat konzoli @@ -565,7 +565,7 @@ neautorizované odeslání jste pozváni do skupiny připojit jako %s - připojuje se… + připojuji… Začněte nový chat Chat s vývojáři Nemáte žádné konverzace @@ -585,25 +585,25 @@ Živá zpráva! Připojit se prostřednictvím odkazu / QR kódu Děkujeme za instalaci SimpleX Chat! - Můžete se připojit k SimpleX Chat vývojářům a položit jim případné dotazy a získat aktualizace. + Můžete se připojit k SimpleX Chat vývojářům, položit jim případné dotazy a získat aktualizace. Připojení prostřednictvím odkazu - Pokud jste dostali SimpleX Chat zvací odkaz, Můžete ho otevřít v prohlížeči: + Pokud jste dostali SimpleX Chat pozvánku, můžete ji otevřít v prohlížeči: Pokud zvolíte odmítnutí, odesílatel NEBUDE upozorněn. - 📱 mobilní telefon: tap Otevřete v mobilní aplikaci, potom klikněte Připojit. + 📱 telefon: Otevřete v mobilní aplikaci, potom klikněte na Připojit. Odmítnout Smazat chat Vyčistit Smazat Nastavit jméno kontaktu Přijali jste spojení - Aby se připojení dokončilo, musí být váš kontakt online. + K dokončení připojení, musí být váš kontakt online. \nToto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem). Chce se s vámi spojit! Zástupný symbol profilového obrázku profilový obrázek Tlačítko Zavřít Kontakt ještě není připojen! - náhledový obrázek odkazu + náhled odkazu Zrušit náhled odkazu SimpleX Logo E-mail @@ -634,7 +634,7 @@ Použít SimpleX Chat servery\? Použití SimpleX Chat serverů. Uložené servery WebRTC ICE budou odstraněny. - Chyba při ukládání serverů ICE + Chyba ukládání serverů ICE Ujistěte se, že adresy serverů WebRTC ICE jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní. Uložit Síť a servery @@ -655,7 +655,7 @@ Verze aplikace Verze aplikace: v%s Verze jádra: v%s - Jádro sestaveno na: %s + Jádro sestaveno: %s Smazat adresu\? Všechny vaše kontakty zůstanou připojeny. Žádosti o kontakt @@ -709,18 +709,20 @@ zvukový hovor (nešifrováno e2e) Odmítnout Vaše hovory - Spojení přes relay + Spojení přes relé Zobrazit Zakázat Vaše servery ICE WebRTC servery ICE + Přenosový server chrání vaši IP adresu, ale může sledovat dobu trvání hovoru. + Přenosový server se používá pouze v případě potřeby. Jiná strana může sledovat vaši IP adresu. bez šifrování e2e - Otočit foťák + Druhý foťák Čekající hovor Zmeškaný hovor Odmítnutý hovor Spojování hovoru - Ukončený hovor + Skončený hovor Přijmout hovor %1$d přeskočená zpráva (zprávy) Může se to stát, když: @@ -731,31 +733,31 @@ \nBudeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. VY PODPOŘIT SIMPLEX CHAT - ROZVÍJET + VÝVOJ Nástroje pro vývojáře - Inkognito mód - Vaše chat databáze + inkognito mód + Chat databáze SPUSTIT CHAT Chat je spuštěn Chat je zastaven CHAT DATABÁZE - Heslo databáze + přístupová fráze databáze Archiv nové databáze Archiv staré databáze - Chyba při spuštění chatu + Chyba spouštění chatu Zastavit chat\? Zastavte chat pro export, import nebo smazání chat databáze. Během zastavení, nebudete moci přijímat ani odesílat zprávy. Zastavit - Nastavení přístupové fráze pro export + Nastavte přístupovou frázi pro export Databáze je šifrována pomocí náhodné přístupové fráze. Před exportem ji změňte. - Chyba při zastavení chatu + Chyba zastavování chatu Importovat chat databázi\? Vaše aktuální chat databáze bude SMAZÁNA a NAHRAZENA importovanou databází. -\nTuto akci nelze vzít zpět - váš profily, kontakty, zprávy a soubory budou nenávratně ztraceny. +\nTuto akci nelze vzít zpět - vaše profily, kontakty, zprávy a soubory budou nenávratně ztraceny. Chyba mazání chat databáze Chyba importu chat databáze Chat databáze odstraněna - Odstranění souborů pro všechny chat profily + Odstranit soubory všech chat profilů Odstranit všechny soubory Tuto akci nelze vrátit zpět - všechny přijaté a odeslané soubory a média budou smazány. Obrázky s nízkým rozlišením zůstanou zachovány. Žádné přijaté ani odeslané soubory @@ -768,11 +770,11 @@ Povolit automatické mazání zpráv\? Tuto akci nelze vzít zpět - zprávy odeslané a přijaté dříve, než bylo zvoleno, budou smazány. Může to trvat několik minut. Chyba změny nastavení - Uložit přístupovou frázi do úložiště klíčů + Uložit frázi do úložiště klíčů Databáze šifrována! Chyba šifrování databáze Šifrovat - Databáze je šifrována pomocí náhodné přístupové fráze, můžete ji změnit. + Databáze je šifrována pomocí náhodné přístupové fráze, musíte ji změnit. K bezpečnému uložení přístupové fráze se použije úložiště klíčů Android, po restartování aplikace nebo změně přístupové fráze - umožní přijímání oznámení. Musíte zadat přístupovou frázi při každém spuštění aplikace - není uložena v zařízení. Šifrovat databázi\? @@ -786,7 +788,7 @@ Chyba databáze Chyba klíčenky Přístupová fráze databáze se liší od té uložené v klíčence. - Nelze získat přístup k úložišti klíčů pro uložení přístupová fráze k databázi. + Nelze získat přístup ke klíčence pro uložení přístupová fráze k databázi. Neznámá chyba databáze: %s Špatná přístupová fráze! Zadejte správnou přístupovou frázi. @@ -795,13 +797,13 @@ Obnovit zálohu databáze\? Obnovit Chyba obnovení databáze - Heslo nebylo nalezeno v úložišti klíčů, zadejte jej prosím ručně. K této situaci mohlo dojít, pokud jste obnovili data aplikace pomocí zálohovacího nástroje. Pokud tomu tak není, obraťte se na vývojáře. - Chat můžete spustit přes Nastavení aplikace / Databáze nebo restartováním aplikace. + Heslo nebylo v klíčence nalezeno, zadejte jej prosím ručně. K této situaci mohlo dojít, pokud jste obnovili data aplikace pomocí zálohovacího nástroje. Pokud tomu tak není, obraťte se na vývojáře. + Chat můžete spustit v Nastavení / Databáze nebo restartováním aplikace. Uložit archiv Smazat archiv pozvánka do skupiny %1$s Vytvořeno dne %1$s - Jste zváni do skupiny. Připojte se a spojte se s členy skupiny. + Jste zváni do skupiny. Připojte se k členům skupiny. Připojit se inkognito Připojit ke skupině Připojili jste se k této skupině. Připojení k pozvání člena skupiny. @@ -835,15 +837,15 @@ člen vlastník odstraněn - vlevo + odešel skupina smazána - pozvánka - připojující (zavedený) + pozván + představen (zaveden) připojení (pozvánka na představení) - připojení (přijato) - připojení (oznámeno) + připojen (přijat) + připojen (oznámen) připojen - kompletní + komplet tvůrce připojování Žádné kontakty k přidání @@ -859,11 +861,11 @@ Smazat skupinu Smazat skupinu\? Skupina bude smazána pro všechny členy - nelze to vzít zpět! - Skupina bude smazána pro vás - toto nelze vzít zpět! + Skupina bude smazána pouze pro vás - toto nelze vzít zpět! Opustit skupinu Upravit profil skupiny - Odkaz na skupinu - Vytvořit odkaz na skupinu + Odkaz skupiny + Vytvořit odkaz skupiny Smazat odkaz Můžete sdílet odkaz nebo QR kód - ke skupině se bude moci připojit kdokoli. O členy skupiny nepřijdete, pokud ji později odstraníte. Chyba vytváření odkazu skupiny @@ -899,44 +901,44 @@ Profil a připojení k serveru Pouze místní data profilu Náhodný profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz. - Režim inkognito chrání soukromí vašeho hlavního profilového jména a obrázku - pro každý nový kontakt je vytvořen nový náhodný profil. - Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části chatu. - Světlý - Tmavý + Režim inkognito chrání soukromí vašeho hlavního profilu, jména a obrázku - pro každý nový kontakt je vytvořen nový náhodný profil. + Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části. + Světlé + Tmavé Téma - Kontakt povolil + Kontakt povolen zapnuto vypnuto Chat předvolby Předvolby kontaktu Předvolby skupiny Přímé zprávy - Smazat pro všechny - povoleno - povoleno pro vás - vypnuto - Zakázat zasílání mizejících zpráv. + Mazání všem + zapnuty + povoleno vám + vypnuty + Mizící zprávy zakázány. Kontakty mohou označit zprávy ke smazání; vy je budete moci zobrazit. - Zakázat odesílání hlasových zpráv. - Mizející zprávy můžete odesílat pouze vy. - Mizející zprávy jsou v tomto chatu zakázány. + Hlasové zprávy zakázány. + Pouze vy můžete odesílat mizící zprávy. + Mizící zprávy jsou v tomto chatu zakázány. Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání). Hlasové zprávy můžete posílat vy i váš kontakt. Hlasové zprávy můžete posílat pouze vy. Hlasové zprávy může odesílat pouze váš kontakt. Hlasové zprávy jsou v tomto chatu zakázány. - Zakázat posílání mizejících zpráv. - Zakázat nevratné mazání zpráv. - Zakázat odesílání hlasových zpráv. - Členové skupiny mohou posílat mizející zprávy. - Mizející zprávy jsou v této skupině zakázány. + Posílání mizících zpráv zakázáno. + Nevratné mazání odeslaných zpráv zakázáno. + Hlasové zprávy zakázány. + Členové skupiny mohou posílat mizící zprávy. + Mizící zprávy jsou v této skupině zakázány. Členové skupiny mohou posílat přímé zprávy. Přímé zprávy mezi členy jsou v této skupině zakázány. Členové skupiny mohou nevratně mazat odeslané zprávy. Nevratné mazání zpráv je v této skupině zakázáno. Členové skupiny mohou posílat hlasové zprávy. Hlasové zprávy jsou v této skupině zakázány. - Smazat po + Smazat za %d měsíc %d měsíců %d den @@ -947,9 +949,9 @@ nabízeno %s zrušeno %s Co je nového - Novinky v %s + Novinky %s Automatické přijímání žádostí o kontakt - S volitelnou uvítací zprávou. + Volitelná uvítací zpráva. Max. 40 sekund, přijímá se okamžitě. Soukromé názvy souborů Pro ochranu časového pásma, obrazové/hlasové soubory používají UTC. @@ -957,14 +959,26 @@ Další vylepšení se chystají již brzy! Italské rozhraní Díky uživatelům - překládejte prostřednictvím Weblate! - Budete připojeni, až bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později! - Vaše kontaktní adresa + Budete připojeni, jakmile bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později! + Vaše adresa Váš chat profil bude odeslán \nvašemu kontaktu Vaše chat profily jsou uloženy lokálně, pouze ve vašem zařízení. Vaše konverzace Do níže uvedeného pole vložte odkaz, který jste obdrželi pro spojení s kontaktem. - Sdílet zvací odkaz - end-to-end šifrované + Sdílet pozvánku + koncově šifrované moderované + moderovaný %s + Smazat zprávu člena\? + moderovaný + Kontaktujte prosím správce skupiny. + jste pozorovatel + pozorovatel + Zpráva bude smazána pro všechny členy. + Zpráva bude pro všechny členy označena jako moderovaná. + Nemůžete posílat zprávy! + Chyba aktualizace odkazu skupiny + Počáteční role + Systém \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml index 803fd5377..960c3b2ea 100644 --- a/apps/android/app/src/main/res/values-de/strings.xml +++ b/apps/android/app/src/main/res/values-de/strings.xml @@ -513,13 +513,15 @@ Audio- & Videoanrufe Ihre Anrufe - Über ein Relais verbinden + Über ein Relais verbinden Anrufe auf Sperrbildschirm: Akzeptieren Anzeigen Deaktivieren Ihre ICE-Server WebRTC ICE-Server + Relais-Server schützen Ihre IP-Adresse, aber sie können die Anrufdauer erfassen. + Relais-Server werden nur genutzt, wenn sie benötigt werden. Ihre IP-Adresse kann von Anderen erfasst werden. Öffnen Sie SimpleX Chat, um den Anruf anzunehmen. Aktivieren Sie Anrufe vom Sperrbildschirm über die Einstellungen. @@ -1041,4 +1043,16 @@ Dank der Nutzer - Tragen Sie per Weblate bei! Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen. Moderiert + Von %s moderiert + Moderieren + Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet. + Sie sind Beobachter + Sie können keine Nachrichten versenden! + Beobachter + Anfängliche Rolle + Nachricht des Mitglieds löschen\? + Fehler beim Aktualisieren des Gruppen-Links + Bitte kontaktieren Sie den Gruppen-Administrator. + Diese Nachricht wird für alle Gruppenmitglieder gelöscht. + System \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index 328e46183..6eda6906e 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -3,7 +3,7 @@ Autenticación no disponible Aceptar Configuración de red avanzada - Mejor para la batería. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, NO se utilizará el servicio en segundo plano. + Mejor para la batería. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, el servicio NO se usará en segundo plano. Bueno para la batería. El servicio en segundo plano comprueba si hay mensajes nuevos cada 10 minutos. Puedes perderte llamadas y mensajes urgentes. Aceptar Copia de seguridad de los datos de la aplicación @@ -14,34 +14,34 @@ Añadir servidores escaneando códigos QR. Añadir servidores predefinidos Todos los miembros del grupo permanecerán conectados. - Permitir el borrado irreversible de mensajes sólo si su contacto se lo permite. - Android Keystore se utilizará 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. + Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí. + 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. Permitir a tus contactos enviar mensajes que desaparecen. Permitir a tus contactos enviar mensajes de voz. siempre La aplicación sólo puede recibir notificaciones cuando se está ejecutando, no se iniciará ningún servicio en segundo plano. ICONO DE LA APLICACIÓN Se enviará un perfil aleatorio al contacto del que recibió este enlace - 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 a través de los ajustes. + 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. El servicio en segundo plano está siempre en funcionamiento – las notificaciones se mostrarán en cuanto los mensajes estén disponibles. - Se puede desactivar a través de los ajustes – las notificaciones se seguirán mostrando mientras la app esté en funcionamiento. + Se puede desactivar en Configuración – las notificaciones se seguirán mostrando mientras la app esté en funcionamiento. Siempre activo Permitir arriba, entonces: Añadir nuevo contacto: para crear tu código QR de un solo uso para tu contacto. - ¿Conectar mediante enlace de contacto\? + ¿Aceptar solicitud de conexión\? Aceptar incógnito - Se borrarán todos los mensajes - ¡esto no se puede deshacer! Los mensajes se borrarán SOLO para ti. + Se eliminarán todos los mensajes SOLO para tí. ¡No puede deshacerse! Añadir servidor… ¿Acceder a los servidores a través del proxy SOCKS en el puerto 9050\? El proxy debe iniciarse antes de activar esta opción. Todos tus contactos permanecerán conectados. Apariencia - Versión de la aplicación - Se utilizará una conexión TCP independiente (y una credencial SOCKS) para cada perfil de chat que tengas en la aplicación. - Se utilizará una conexión TCP independiente (y una credencial SOCKS) para cada contacto y miembro del grupo. + Versión + Se usará una conexión TCP independiente (y una credencial SOCKS) para cada perfil de chat que tengas en la aplicación. + Se usará una conexión TCP independiente (y una credencial SOCKS) para cada contacto y miembro del grupo. \nTen en cuenta: si tienes muchas conexiones, tu consumo de batería y tráfico puede ser sustancialmente mayor y algunas conexiones pueden fallar. a + b - Sobre SimpleX + Acerca de SimpleX negrita llamada aceptada Aceptar @@ -52,26 +52,26 @@ Audio activado ID de mensaje erróneo Aceptar automáticamente imágenes - Se borrarán todos los chats y mensajes - ¡esto no se puede deshacer! + Se eliminarán todos los chats y mensajes. ¡No puede deshacerse! Aceptar - Permitir enviar mensajes que desaparecen. + Permitir enviar mensajes temporales. Android Keystore se utiliza para almacenar de forma segura la frase de contraseña - permite que el servicio de notificación funcione. Añadir perfil Se enviará un perfil aleatorio a tu contacto Acento - Permitir a tus contactos borrar irreversiblemente los mensajes enviados. - Permitir mensajes de voz sólo si tu contacto lo permite. + Permitir a tus contactos eliminar irreversiblemente los mensajes enviados. + Permitir mensajes de voz sólo si tu contacto los permite. Permitir el envío de mensajes directos a los miembros. - Permitir borrar irreversiblemente los mensajes enviados. + Permitir la eliminación irreversible de los mensajes enviados. Permitir enviar mensajes de voz. Los administradores pueden crear los enlaces para unirse a los grupos. - Aceptar automáticamente solicitudes de contacto + Aceptar automáticamente solicitudes del contacto Adjuntar hash de mensaje erróneo Responder llamada - admin + administrador ¿Permitir mensajes de voz\? - Atrás + Volver Sobre SimpleX Chat Añadir a otro dispositivo Versión de la aplicación: v%s @@ -81,7 +81,902 @@ Ten en cuenta: NO podrás recuperar o cambiar la contraseña si la pierdes. Tanto tú como tu contacto podéis enviar mensajes de voz. ¡Usa más batería! El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles. - Tanto tú como tu contacto podéis borrar de forma irreversible los mensajes enviados. - Tanto tú como tu contacto podéis enviar mensajes de desaparición. + Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados. + Tanto tú como tu contacto podéis enviar mensajes temporales. Escanear código QR: para conectar con tu contacto que te muestre código QR. + Crear + Crear enlace único de invitación + Crear grupo secreto + La contraseña de cifrado de la base de datos será actualizada. + ID de la base de datos + Los mensajes directos entre miembros del grupo están prohibidos. + La contraseña es distinta a la almacenada en Keystore + La base de datos será cifrada y la contraseña se guardará en Keystore. + ¿Eliminar contacto\? + Eliminar mensaje\? + ¿Eliminar el perfil de chat\? + grupo eliminado + ¿Eliminar grupo\? + Eliminar mensaje después + Autenticación de dispositivo desactivada. Puedes habilitar SimpleX Lock en Configuración, después de activar la autenticación de dispositivo. + Desactivar + Los mensajes temporales están prohibidos en este chat. + Los mensajes temporales están prohibidos en este grupo. + El nombre mostrado no puede contener espacios en blanco. + Videollamada con cifrado e2e + conexión establecida + Descripción + Conectar + Conectado + Desactivar SimpleX Lock + Autenticación de dispositivo desactivada. SimpleX Lock deshabilitado. + El tamaño máximo de archivo admitido es %1$s + Eliminar verificación + Crear perfil + llamada con cifrado e2e + Cifrado e2e + mensaje duplicado + DESARROLLO + Herramientas desarrollo + Eliminar archivos para todos los perfiles de chat + Eliminar mensaje + ¡Base de datos cifrada! + La base de datos está cifrada con una contraseña aleatoria, puedes cambiarla. + Error en base de datos + Para abrir la aplicación se requiere la contraseña de la base de datos + conectado + Crear enlace + ¿Eliminar enlace\? + Mensajes temporales + Mensajes directos + %dm + %d mes + %d meses + %dmes + %dh + %d horas + %d semana + %d semanas + Mensajes temporales + Canfirma tus credenciales + conectando (presentado) + conectando (invitación de presentación ) + conectando (aceptado) + conectando (anunciado) + conexión<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"connection ID\" example=\"1\"> + Conectar mediante enlace / Código QR + El contacto y todos los mensajes serán eliminados. ¡No puede deshacerse! + Contacto verificado + El contacto dispone de cifrado e2e + Desconectar + Nombre del contacto + Copiar + Crear tu perfil + Conectar mediante relay + La base de datos está cifrada con una contraseña aleatoria. Cámbiala antes de exportar. + %d archivo(s) con tamaño total de %s + ¿Activar eliminación automática de mensajes\? + Preferencias de contacto + %ds + Eliminar después + %d seg + El contácto ya existe + Error de conexión (Autenticación) + Eliminar para mí + Desconectado + Conectado + Copiado en portapapeles + Crear enlace único de invitación + 💻 PC: escanéa el código QR desde la app mediante Escanéo de código QR + Eliminar + Eliminar + ¡El contacto aun no se ha conectado! + ¿Eliminar conexion pendiente\? + Botón cerrar + ¡Solicitud de conexión enviada! + Conexión + conectando llamada… + Activar llamadas desde la pantalla de bloqueo en Configuración + La contraseña de cifrado de la base de datos será actualizada y almacenada en Keystore. + conectando + creador + %d min + Tiempo de conexión expirado + ¡Nombre mostrado duplicado! + Error de conexión + Crear cola + Eliminar cola + Contacto oculto: + Eliminar + Editar + ¿Eliminar el mensaje de miembro\? + editado + Error de decodificación + Crear dirección + Eliminar dirección + ¿Eliminar la dirección\? + Nombre mostrado: + conectando… + Descentralizado + La base de datos será cifrada. + ¿Eliminar archivo del chat\? + Crear enlace de grupo + Eliminar enlace + ¿Eliminar el perfil de chat\? + %d hora + %d día + Nombre y avatar diferentes, aislamiento de transporte. + Eliminar contacto + Eliminar servidor + Nombre Mostrado + conectado + DISPOSITIVO + Contraseña base de datos + Eliminar base de datos + Eliminar todos los archivos + Contraseña actual… + Eliminar grupo + Editar perfil de grupo + Conexión + Eliminar el perfil de chat para + Oscuro + %dd + %d días + ¿Eliminar archivos y multimedia\? + Creado: %1$s + Eliminar archivo + conectado + directo + El contacto permite + predefinido (%s) + Eliminar para todos + activado + El contacto puede marcar los mensajes para eliminar; tu podrás verlos. + %ds + eliminado + ¿Conectar mediante enlace de contacto\? + ¿Conectar mediante enlace de grupo\? + ¿Conectar mediante enlace de invitación\? + Conectar + conectado + conectando + conectando… + conectando… + conectando… + Icono contextual + El contacto no dispone de cifrado e2e + Conectando llamada + Crear grupo secreto + Email + Conectar + Conectar mediante enlace + Contraseña y exportar la base de datos + Contribuye + Core compilado: %s + Core versión: v%s + Solicitud del contacto + Eliminar imagen + Editar imagen + CHATS + Cambiar + Comprueba mensajes nuevos de hasta un minuto cada 10 minutos + Limpiar + ¿Cambiar rol de grupo\? + Compara los códigos de seguridad con tus contactos + Elije archivo + Limpiar + Limpiar chat + Configurar servidores ICE + Llamada terminada %1$s + error en la llamada + llamando + llamada en curso + coloreado + su rol a cambiado a %s + cambiando dirección por %s + completado + ¡No se puede invitar el contacto! + No se puede recibir el archivo + No se puede iniciar la base de datos + Limpiar chat\? + Perfil de Chat + El chat está detenido + rol de %s cambiado a %s + Cambiar rol + A través del perfil de chat (por defecto) or a través de conexión (BETA) + cambiando dirección… + Preferencias de chat + cancelado %s + El chat está detenido + LLAMADAS + El chat está en ejecución + cambiando dirección… + habla con los desarrolladores + Cancelar vista previa del archivo + Cancelar vista previa de la imagen + Llamada terminada + Llamada en curso + ¿Cambiar contraseña de la base de datos\? + No se puede acceder a Keystore para guardar la base de datos de contraseñas + Archivo del chat + ARCHIVOS DE CHAT + Cancelar + Cancelar mensaje en directo + Confirmar + Limpiar + Build de la aplicación + ¡La llamada ha terminado! + su dirección ha cambiado para tí + cancelar vista previa del enlace + Llamadas en la ventana de bloqueo + ¡No se puede invitar a los contactos! + Consola del chat + BASE DE DATOS DE CHAT + Base de datos eliminada + Base de datos importada + Comprueba la dirección del servidor e inténtalo de nuevo. + Confirma la contraseña nueva… + 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. + Imagen guardada en la Galería + El archivo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde. + Enlace único de invitación + Pegar enlace recibido + Error guardando perfil de grupo + Salir sin guardar + Archivo guardado + Voltear la cámara + Invitación de grupo caducada + La invitación al grupo ya no es válida, ha sido eliminada por el remitente. + El grupo se eliminará para tí. ¡No puede deshacerse! + Cómo usar el marcador + Incógnito mediante enlace único + Dirección de contacto SimpleX + Error guardando servidores SMP + 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. + Error al actualizar la configuración de red + Error creando dirección + Error eliminando perfil de usuario + Activar SimpleX Lock + Enlace único de invitación + Servidores SMP + Características experimentales + Error importando la base de datos + Error cambiando configuración + Archivo: %s + ¡Error cambiando perfil! + Introduce el servidor manualmente + Cómo usar tus servidores + Error deteniendo el chat + Introduce la contraseña correcta. + Introduce la contraseña… + Grupo inactivo + grupo eliminado + Los miembros del grupo pueden enviar mensajes temporales. + Enlaces de grupo + Enlace de conexión no válido + Error aceptando la solicitud del contacto + Error cambiando la dirección + Error al guardar archivo + Error + De la Galería + Si has recibido el enlace de invitación a SimpleX Chat, puedes abrirlo en tu navegador: + Si eliges rechazar, el remitente NO será notificado. + ¡Enlace no válido! + Si no puedes reunirte en persona, puedes escanear el código QR en la videollamada, o tu contacto puede compartir un enlace de invitación. + Si no puedes reunirte en persona, muestra el código QR en la videollamada, o comparte el enlace. + Cómo + Ignorar + Error eliminando la base de datos + Base de datos cifrada + Error eliminando miembro + Los miembros del grupo pueden mandar mensajes de voz. + Incógnito mediante enlace de dirección del contacto + Error creando perfil! + No se pudo cargar el chat + No se pudieron cargar los chats + Enlace completo + Error eliminando contacto + Error uniéndose al grupo + Error recibiendo archivo + Comprueba que has usado el enlace correcto o pide a tu contacto que te envíe otro. + Error eliminando la solicitud de contacto + Error al eliminar grupo + Error al eliminar conexión de contacto pendiente + Ocultar + Oculto + Ocultar contacto y mensaje + Ocultar + Para todos + Archivo + Imagen enviada + La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde. + vista previa del enlace + Error guardando servidores ICE + Servidores ICE (uno por línea) + Nombre completo: + Las personas pueden conectarse contigo solo mediante los enlaces que compartes. + Cómo funciona SimpleX + Colgar + Archivo y multimedia + ¡Grupo no encontrado! + perfil de grupo actualizado + Error al crear enlace de grupo + Error al eliminar enlace de grupo + activado para el contacto + Interfaz en francés + Imagen + Archivo no encontrado + Cómo usar + Nombre completo (opcional) + finalizado + AYUDA + Exportar base de datos + Error exportando la base de datos + Error iniciando chat + Invitado mediante tu enlace de grupo + Error actualizando el enlace de grupo + PARA CONSOLA + Error cambiando rol + SERVIDORES + Nombre mostrado del grupo: + Preferencias del grupo + Los miembros del grupo pueden enviar mensajes directos. + Los miembros del grupo pueden eliminar mensajes de forma irreversible. + Ocultar pantalla de aplicaciones en aplicaciones recientes. + Cifrar + Ampliar la selección de roles + El grupo se eliminará para todos los miembros. ¡No puede deshacerse! + Activar TCP keep-alive + activado para tí + error + Incógnito mediante enlace de grupo + Error al añadir miembro(s) + Error enviando mensaje + Error cifrando la base de datos + ¿Cifrar base de datos\? + Error: %s + Enlace de grupo + Grupo + Nombre completo del grupo: + El perfil de grupo se almacena en los dispositivos, no en los servidores. + ayuda + Pega el enlace que has recibido en el recuadro para conectar con tu contacto. + Compartir enlace + Cómo funciona + El mensaje se eliminará. ¡No puede deshacerse! + El modo incógnito protege la identidad del perfil principal, por cada contacto nuevo se genera un perfil nuevo aleatorio. + Para poder usarse deshabilita la optimización de batería para SimpleX en el siguiente cuadro de diálogo. De lo contrario las notificaciones estarán desactivadas. + Instalar SimpleX Chat para terminal + invitación al grupo %1$s + invitado %1$s + Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat. + Invitar al grupo + Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos. + La base de datos no está cifrada. Establece una contraseña para protegerla. + Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas. + Notificación instantánea + Configuración de red + No se usarán hosts .onion + Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con cifrado de extremo a extremo de 2 capas . + Puede cambiarse más tarde en Configuración. + Instantánea + Únete + Únete en modo incógnito + indirecto (%1$s) + Claro + Activado + La eliminación irreversible de mensajes está prohibida en este chat. + La eliminación irreversible de mensajes está prohibida en este grupo. + Configuración del servidor mejorada + 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. + Texto del mensaje + MIEMBRO + nunca + Se requieren hosts .onion para la conexión + No se usarán hosts .onion + Vista previa de notificación + ¡Invitación caducada! + ha salido + Mensajes en vivo + Notificación instantánea + Servicio de notificaciones + El mensaje se marcará para eliminar. El destinatario o destinatarios podrán revelar este mensaje. + ¡Mensaje en vivo! + 📱 móvil: pulse Abrir en aplicación móvil, después pulse Conectar en la aplicación. + Marcar como leído + Marcar como no leído + Código QR inválido + ¡Código de seguridad incorrecto! + Marcadores en mensajes + No + llamada perdida + Importar + has cambiado tu rol a %s + Invitar miembros + Ningún contacto seleccionado + ofrecido %s + ofrecido %s: %2s + moderado por %s + chat no válido + datos no válidos + formato de mensaje no válido + EN VIVO + moderado + invitado a conectarse + ¡Las notificaciones instantáneas están desactivadas! + mensaje nuevo + Nueva solicitud de contacto + Inicie sesión con sus credenciales + Error en la entrega del mensaje + Lo más probable es que este contacto haya eliminado la conexión contigo. + Moderar + unirse como %s + Sólo se pueden enviar 10 imágenes al mismo tiempo + ¡Archivo grande! + Silenciar + Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas. + Se requieren hosts .onion para la conexión + Se usarán hosts .onion cuando estén disponibles. + Inmune a spam y abuso + Muchos se preguntarán: si SimpleX no tiene identificadores de usuario, ¿cómo puede entregar los mensajes\? + Videollamada entrante + has salido + has cambiado la dirección + apagado + Eliminación del mensaje irreversible + Máximo 40 segundos, recibido al instante. + Interfaz en italiano + Borrador de mensaje + ¡Pronto habrá más mejoras! + Múltiples perfiles de chat + Notificaciones + sin detalles + OK + (sólo almacenado por miembros del grupo) + Ayuda marcadores + Redes y servidores + Se usarán hosts .onion cuando estén disponibles. + cursiva + Llamada entrante + videollamada (sin cifrado e2e) + sin cifrado e2e + Importar base de datos + MENSAJES + ¿Importar base de datos\? + Sin archivos recibidos o enviados + Mensajes + Contraseña nueva… + ¿Unirse al grupo\? + Únete al grupo + Error en Keystore + Invitar miembros + observador + miembro + eliminado + invitado + Sin contactos que añadir + Nuevo rol de miembro + Rol inicial + Nombre local + Estado de la red + Incógnito + apagado + Nuevo en %s + Seguridad y privacidad mejoradas + Modo incógnito + Nuevo archivo de base de datos + Archivo de base de datos antiguo + has cambiado la dirección por %s + ha salido + Salir del grupo + Sólo los propietarios del grupo pueden cambiar las preferencias de grupo. + Sólo datos del perfil local + no + k + marcado eliminado + Llamada perdida + ¡Las notificaciones seguirán enviándose hasta que la aplicación se detenga! + Salir + ¿Salir del grupo\? + propietario + El miembro será eliminado del grupo. ¡No puede deshacerse! + Sólo los propietarios del grupo pueden activar los mensajes de voz. + El modo incógnito no se admite aquí, tu perfil principal aparecerá en miembros del grupo + Más + Marcar como verificado + ¡Dirección de servidor no válida! + Establecer una conexión privada + Comprueba su conexión de red con %1$s e inténtelo de nuevo. + El remitente puede haber eliminado la solicitud de conexión. + Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta + Responder + Guardar contraseña en Keystore + Error al restaurar la base de datos + Seleccionar contactos + Guardar perfil de grupo + Restablecer colores + Sólo tú puedes enviar mensajes temporales + Sólo tu contacto puede enviar mensajes temporales. + Prohibir el envío de mensajes de voz. + Se ejecuta cuando la aplicación está abierta + Abrir la consola de chat + Guardar + Restaurar + Guardar + Prohibir la eliminación irreversible de mensajes. + Los destinatarios ven la actualizacion mientras escribes. + Enviar Mensaje + ¡Permiso denegado! + Escanear código + Se eliminarán los servidores WebRTC ICE guardados. + llamada rechazada + secreto + Abrir SimpleX Chat para aceptar llamada + Restablecer valores por defecto + Guardar color + Pendiente + Notificaciones periódicas + Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes. + Reinicia la aplicación para crear un nuevo perfil de chat. + ¿Restaurar copia de seguridad de la base de datos\? + Notificaciones privadas + imagen del perfil + Prohibir el envío de mensajes de voz. + Proteger la pantalla de la aplicación + Más información en nuestro repositorio GitHub . + Grabar mensaje de voz + eliminado %1$s + Enviar previsualizaciones de enlaces + Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe + error de envío + Enviando mediante + Actualiza la aplicación y ponte en contacto con los desarrolladores. + El remitente ha cancelado la transferencia de archivos. + Cola segura + Se necesita contraseña + Notificaciones periódicas desactivadas + Recibiendo mensajes… + Revelar + enviado + Rechazar + Obligatorio + Guardar y notificar contactos + Protocolo y código abiertos: cualquiera puede usar los servidores. + Rol + Revertir + Intervalo PING + Contador PING + Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcar para eliminar). + Conserva el último borrador del mensaje con los datos adjuntos. + Nombres de archivos privados + Reducción del uso de la batería + Póngase en contacto con el administrador del grupo. + Solicita que tu contacto habilite el envío de mensajes de voz. + Enviar mensaje en vivo + Escanear código QR + Enviar + (escanear o pegar desde el portapapeles) + Espacio reservado para la imagen del perfil + Código QR + Envía consultas e ideas + Dirección del servidor predefinida + Contacta por email + Valora la aplicación + Guardar + respuesta recibida… + confirmación recibida… + Periódico + Privacidad redefinida + Más información en nuestro repositorio GitHub. + Rechazar + Abrir + Llamada pendiente + Privacidad y seguridad + Guarda la contraseña de forma segura, NO podrás acceder al chat si la pierdes. + Guardar archivo + 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. + te ha eliminado + Recibiendo mediante + Tiempo de espera del protocolo + seg + Perfil y conexiones de servidor + Prohibir el envío de mensajes temporales + Sólo tú puedes enviar mensajes de voz. + Sólo tu contacto puede enviar mensajes de voz. + EJECUTAR CHAT + Reinicia la aplicación para poder usar la base de datos importada. + Introduce la contraseña actual correcta. + recepción prohibida + Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcar para eliminar). + Prohibir el envío de mensajes directos a los miembros. + Prohibir el envío de mensajes temporales + Evaluación de la seguridad + la recepción de archivos aún no está disponible + el envío de archivos aún no está disponible + entre particulares + Llamada rechazada + Eliminar + ¿Eliminar contraseña de Keystore\? + Abrir chat + Restaurar copia de seguridad de la base de datos + Guardar contraseña y abrir el chat + 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. + Eliminar + Eliminar miembro + Enviar mensaje directo + Restablecer + Pegar + Código de seguridad + Escanea el código de seguridad desde la aplicación de tu contacto. + Guardar servidores + Escanear código QR del servidor + Servidor predefinido + Guardar y notificar contacto + ¿Guardar preferencias\? + Guardar y notificar a los miembros del grupo + 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. + 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. + Bloqueo SimpleX + Desbloquear + Este texto está disponible en Configuración + ¡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). + Bloqueo SimpleX + Usando servidores SimpleX Chat. + Aislamiento de transporte + tachado + Usar Chat + PROXY SOCKS + TEMAS + Detener + Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente. + Omitir invitación a miembros + Mostrar vista previa + Activar + Compartir + envío no autorizado + Introduce el nombre del contacto + Usar proxy SOCKS (puerto 9050) + Error desconocido + El rol cambiará a \"%s\". Se notificará a todos los miembros del grupo. + La seguridad de SimpleX Chat fue auditada por Trail of Bits. + Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido. + Mensajes de chat SimpleX + no leído + Introduce el nombre del contacto… + ¿Cambiar dirección de recepción\? + Usar cámara + ¡El contacto con el que has compartido este enlace NO podrá conectarse! + Mostrar código QR + ¡El enlace no es un enlace de conexión válido! + ¡El código QR no es un enlace! + Compartir enlace de invitación + ¿Actualizar el modo de aislamiento de transporte\? + Altavoz activado + Detener Chat para habilitar acciones sobre la base de datos. + ¡La conexión que has aceptado se cancelará! + La base de datos no funciona correctamente. Pulsa para obtener más información + El mensaje será marcado como moderado para todos los miembros. + La próxima generación de mensajería privada + 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. + Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos. + Esta configuración se aplica a los mensajes en su perfil actual de Chat + ¡Esta cadena no es un enlace de conexión! + Para preservar tu privacidad, en lugar de notificaciones automáticas la aplicación cuenta con un servicio en segundo planoSimpleX, utiliza un pequeño porcentaje de la batería al día. + Configuración + Altavoz apagado + Inciar chat nuevo + Detener Chat para exportar, importar o eliminar la base de datos del chat. No podrá recibir ni enviar mensajes mientras el chat esté detenido. + Gracias por instalar SimpleX Chat! + Para proteger la privacidad, en lugar de los identificadores de usuario que utilizan el resto de plataformas, SimpleX dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos. + Para proteger tu información, activa SimpleX Lock. +\nSe te pedirá que completes la autenticación antes de activar esta función. + Al actualizar la configuración, el cliente se reconectará a todos los servidores. + ¿Usar servidores SimpleX Chat\? + Enlace de grupo SimpleX + Invitación única SimpleX + Enlaces SimpleX + El servidor requiere autorización para crear colas, comprueba la contraseña + Para recibir notificaciones, introduce la contraseña de la base de datos + Llamadas de chat SimpleX + Se inicia periódicamente + Mostrar contacto y mensaje + Mostrar sólo contacto + Bloqueo SimpleX activado + Detener chat + El mensaje se eliminará para todos los miembros. + Compartir archivo… + ¡Demasiadas imágenes! + La imagen no se puede decodificar. Pruebe otra imagen o pónte en contacto con los desarrolladores. + ¿Usa proxy SOCKS\? + Usar hosts .onion + simplexmq: v%s (%2s) + La plataforma de mensajería y aplicaciones que protege tu privacidad y seguridad. + La primera plataforma sin identificadores de usuario: diseñada para la privacidad. + Este grupo ya no existe. + 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. + Establecer 1 día + Gracias a los usuarios: ¡contribuye a través de Weblate! + Gracias a los usuarios: ¡contribuye a través de Weblate! + Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC. + Aislamiento de transporte + (para compartir con tu contacto) + Activar audio + %s está verificado + %s no está verificado + Probar servidor + Probar servidores + Comienza en GitHub + Los servidores para nuevas conexiones de tu perfil de Chat actual + ¿Usar conexión directa a Internet\? + ¿Actualizar la configuración de los hosts .onion\? + El perfil sólo se comparte con tus contactos. + inicializando… + Mensajes omitidos + CONFIGURACIÓN + ¿Detener Chat\? + %s segundo(s) + Pulsa para unirse + perfil de grupo actualizado + Tiempo de espera de la conexión TCP agotado + Tema + Establecer preferencias de grupo + SOPORTE SIMPLEX CHAT + Seleccióna contraseña para exportar + Actualizar + Actualizar contraseña base de datos + Pulsa para unirte en modo incógnito + Cambiar + El rol cambiará a \"%s\". El miembro recibirá una nueva invitación. + Actualizar + ¿Actualizar la configuración de red\? + Intentando conectar con el servidor utilizado para recibir mensajes de este contacto. + formato de mensaje desconocido + Intentando conectar con el servidor utilizado para recibir mensajes de este contacto (error: %1$s ). + Prueba fallida en el paso %s. + Pulsa para iniciar chat nuevo + Compartir mensaje… + Compartir imagen… + Mostrar + Error desconocido en la base de datos: %s + El intento de cambiar la contraseña de la base de datos no se ha completado. + Pulsa el botón + Para iniciar un chat nuevo + Cambiar dirección de recepción + El grupo está totalmente descentralizado: sólo es visible para los miembros. + Para conectarse mediante enlace + ¡Error en prueba del servidor! + Algunos servidores no superaron la prueba: + Usar servidor + Usar para conexiones nuevas + Sistema + mediante enlace único + Tus chats + Mensaje de voz… + Tu dirección de contacto + Desactivar vídeo + Activar vídeo + Contraseña de base de datos incorrecta + ¡Contraseña incorrecta! + Te has unido a este grupo. Conectando con miembro del grupo invitado. + Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido + Has sido invitado al grupo + Mensajes de voz + Tus contactos pueden permitir la eliminación completa de mensajes. + Tú controlas a través de qué servidor(es) recibes los mensajes. Tus contactos controlan a través de qué servidor(es) envías tus mensajes. + Mensajes de voz + Los mensajes de voz están prohibidos en este grupo. + Comprobar la seguridad de la conexión + ¡Ya estás conectado a %1$s! . + ¡Bienvenido! + Tu perfil de chat será enviado +\na tu contacto + Tus servidores ICE + Has rechazado la invitación del grupo. + has cambiado el rol de %s a %s + mediante servidor de retransmisión + ¡quiere contactar contigo! + Mensaje de voz + Esperando imagen + Servidores WebRTC ICE + %1$s quiere conectarse contigo mediante + Tienes un perfil de chat con el mismo nombre mostrado. Debes elegir otro nombre. + También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en Abrir en aplicación móvil. + Puedes conectar con los desarrolladores de SimpleX Chat para hacer cualquier pregunta y recibir actualizaciones. + 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. + ¡No puedes enviar mensajes! + Puedes usar marcadores para dar formato a los mensajes: + 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. + 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). + 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. + Tu perfil aleatorio + Te conectarás cuando se acepte tu solicitud de conexión, por favor espere o compruébalo más tarde. + Te conectarás cuando el dispositivo de tu contacto esté en línea, por favor espera o compruébalo más tarde. + Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano. + 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 + mediante navegador + mediante %1$s + Servicio SimpleX Chat + ¡Bienvenido %1$s ! + has sido invitado al grupo + Esperando archivo + Esperando imagen + Mensaje de voz (%1$s ) + Cuando esté disponible + No almacenamos ninguno de tus contactos o mensajes (una vez entregados) en los servidores. + Has sido invitado al grupo. Únete para conectarte con los miembros del grupo. + has eliminado %1$s + Tú: %1$s + 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. + Cuando compartes un perfil incógnito con alguien, este perfil se usará para los grupos a los que te inviten. + Tus preferencias + Con mensaje de bienvenida opcional. + Tu rol es observador + Comprobar código de seguridad + Has aceptado la conexión + Has invitado a tu contacto + Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde. + Tu contacto puede escanear el código QR desde la aplicación. + Tu configuración + Tus servidores SMP + ¡Tú controlas tu chat! + Tu perfil, contactos y mensajes entregados se almacenan en tu dispositivo. + esperando respuesta… + esperando confirmación… + Cuando la aplicación se está ejecutando + Videollamada + Tus llamadas + Tus servidores ICE + Tu privacidad + TU + Base de datos de Chat + Puedes iniciar el chat en Configuración / Base de datos o reiniciando la aplicación. + Has enviado una invitación de grupo + %1$s contacto(s) seleccionado(s) + %1$s MIEMBROS + Tus perfiles de chat se almacenan localmente, sólo en tu dispositivo + Los mensajes de voz están prohibidos en este chat. + Novedades + La contraseña no se almacena en el dispositivo, tienes que introducirla cada vez que inicies la aplicación. + Te has unido a este grupo + + Permites + SimpleX + Tu perfil se enviará al contacto del que has recibido este enlace. + Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros. + + Estás conectado al servidor utilizado para recibir mensajes de este contacto. + mediante enlace de dirección de contacto + mediante enlace de grupo + has compartido un enlace único + has compartido un enlace único en módo incógnito + No tienes chats + El contacto ha enviado un archivo mayor al máximo admitido (%1$s ). + %1$d mensaje(s) omitido(s) + Dejarás de recibir mensajes de este grupo. El historial del chat se conservará. + Ver código de seguridad + Para poder enviar mensajes de voz debes permitir que tu contacto pueda enviarlos. + ¡Mensajes de voz prohibidos! + Tu perfil de chat se enviará a los miembros del grupo + Dirección SimpleX + Logo SimpleX + Equipo SimpleX + Tu perfil de chat se enviará a tu contacto + Tus perfiles de chat + Tu dirección de contacto SimpleX + Tu servidor + Dirección de tu servidor + MENSAJE DE BIENVENIDA + Tu perfil actual + Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos. +\n +\nLos servidores SimpleX no pueden ver tu perfil. + Sistema \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml index fb3c2471a..b0efa0df9 100644 --- a/apps/android/app/src/main/res/values-fr/strings.xml +++ b/apps/android/app/src/main/res/values-fr/strings.xml @@ -598,12 +598,14 @@ Appel audio entrant %1$s veut se connecter à vous via Vos appels - Se connecter via relais + Se connecter via relais Appels en écran verrouillé : Montrer Désactiver Vos serveurs ICE Serveurs WebRTC ICE + Le serveur relais protège votre adresse IP, mais il peut observer la durée de l\'appel. + Le serveur relais n\'est utilisé que si nécessaire. Un tiers peut observer votre adresse IP. Ouvrez SimpleX Chat pour décrocher sans chiffrement de bout en bout Ce contact a le chiffrement de bout en bout @@ -967,4 +969,16 @@ Isolation du transport Différents noms, avatars et mode d\'isolation de transport. modéré + modéré par %s + Supprimer le message de ce membre \? + Modéré + Le message sera supprimé pour tous les membres. + Le message sera marqué comme modéré pour tous les membres. + vous êtes observateur + Erreur lors de la mise à jour du lien de groupe + Rôle initial + Veuillez contacter l\'administrateur du groupe. + Vous ne pouvez pas envoyer de messages ! + observateur + Système \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index e9ff25511..0d980a3c2 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -378,7 +378,7 @@ Chiamata in corso Chiamate sulla schermata di blocco: Connessione chiamata - Connetti via relay + Connetti via relay il contatto ha la crittografia e2e il contatto non ha la crittografia e2e Disattiva @@ -718,6 +718,8 @@ Video off Video on Server WebRTC ICE + Il server relay protegge il tuo indirizzo IP, ma può osservare la durata della chiamata. + Il server relay viene usato solo se necessario. Un altro utente può osservare il tuo indirizzo IP. %1$d messaggio/i saltato/i Le tue chiamate I tuoi server ICE @@ -967,4 +969,16 @@ Per proteggere il fuso orario, i file immagine/vocali usano UTC. Nomi e avatar diversi, isolamento del trasporto. moderato + moderato da %s + Eliminare il messaggio del membro\? + Modera + Il messaggio verrà eliminato per tutti i membri. + Il messaggio sarà segnato come moderato per tutti i membri. + sei un osservatore + Ruolo iniziale + Errore nell\'aggiornamento del link del gruppo + osservatore + Contatta l\'amministratore del gruppo. + Non puoi inviare messaggi! + Sistema \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-ja/strings.xml b/apps/android/app/src/main/res/values-ja/strings.xml index 62b89baa5..0530ae4ec 100644 --- a/apps/android/app/src/main/res/values-ja/strings.xml +++ b/apps/android/app/src/main/res/values-ja/strings.xml @@ -459,7 +459,7 @@ コアのバージョン: v%s 画像を編集 不在着信 - リレー経由で繋がる。 + リレー経由で繋がる。 エンドツーエンド暗号化済み チャットのデータベースが削除されました。 次の期間が経ったら、メッセージを削除: diff --git a/apps/android/app/src/main/res/values-lt/strings.xml b/apps/android/app/src/main/res/values-lt/strings.xml new file mode 100644 index 000000000..40df1e30c --- /dev/null +++ b/apps/android/app/src/main/res/values-lt/strings.xml @@ -0,0 +1,11 @@ + + + 1 mėnuo + 1 savaitė + Apie SimpleX Chat + 1 diena + a + b + Apie SimpleX + Pridėti serverį… + Pridėti serverius skenuojant QR kodus. + \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-nb-rNO/strings.xml b/apps/android/app/src/main/res/values-nb-rNO/strings.xml deleted file mode 100644 index a6b3daec9..000000000 --- a/apps/android/app/src/main/res/values-nb-rNO/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-night/themes.xml b/apps/android/app/src/main/res/values-night/themes.xml new file mode 100644 index 000000000..788ccfee7 --- /dev/null +++ b/apps/android/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index a647fc5ef..455f75671 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -11,7 +11,7 @@ Annuleer afbeeldingsvoorbeeld geannuleerd %s Live bericht annuleren - veranderend adres… + adres wijzigen… Altijd aan Gevraagd om de afbeelding te ontvangen Wijziging @@ -21,7 +21,7 @@ Sta het verzenden van directe berichten naar leden toe. Sta toe om verzonden berichten onomkeerbaar te verwijderen. Sta toe om spraak berichten te verzenden. - Chat is aktief + Chat is actief Wissen CHAT DATABASE CHAT ARCHIEF @@ -57,7 +57,7 @@ Afbeeldingen automatisch accepteren Verificatie niet beschikbaar Terug - Contactverzoeken automatisch accepteren + Contact verzoeken automatisch accepteren vetgedrukt Er wordt een willekeurig profiel naar uw contactpersoon verzonden Bijvoegen @@ -67,17 +67,17 @@ Al uw contacten blijven verbonden. Spraak berichten toestaan\? Goed voor batterij. Achtergrondservice controleert elke 10 minuten op nieuwe berichten. U kunt oproepen en dringende berichten missen. - Onjuiste bericht-hash + Onjuiste bericht hash Scan QR-code: om verbinding te maken met uw contactpersoon die u de QR-code laat zien. - Onjuiste bericht-ID + Onjuiste bericht ID Oproep al beëindigd! 1 maand Over SimpleX Over SimpleX Chat hierboven, dan: Verzoeken accepteren - Alle gesprekken en berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! - Alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd. + Alle gesprekken en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! + Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd. Sta verdwijnende berichten alleen toe als uw contactpersoon dit toestaat. Sta spraak berichten alleen toe als uw contactpersoon ze toestaat. Laat uw contacten verzonden berichten onomkeerbaar verwijderen. @@ -86,28 +86,28 @@ Geluid uit Back-up van app gegevens Beantwoord oproep - Android Keychain wordt gebruikt om het wachtwoord veilig op te slaan - hierdoor kan de meldings service werken. - Android Keychain wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord heeft gewijzigd - hiermee kunt u meldingen ontvangen. + Android Keychain wordt gebruikt om het wachtwoord veilig op te slaan, hierdoor kan de meldings service werken. + Android Keychain wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord heeft gewijzigd, hiermee kunt u meldingen ontvangen. App build: %s App kan alleen meldingen ontvangen wanneer deze actief is, er wordt geen achtergrondservice gestart Uiterlijk APP ICON App versie - App-versie: v%s + App versie: v%s Er wordt een aparte TCP-verbinding (en SOCKS-referentie) gebruikt voor elk chat profiel dat je in de app hebt . audio oproep (niet e2e versleuteld) Automatisch - Achtergrondservice is altijd actief - meldingen worden weergegeven zodra de berichten beschikbaar zijn. + Achtergrondservice is altijd actief, meldingen worden weergegeven zodra de berichten beschikbaar zijn. Nieuw contact toevoegen: om uw eenmalige QR-code voor uw contact te maken. Oproep beëindigd Batterijoptimalisatie is actief, waardoor achtergrondservice en periodieke verzoeken om nieuwe berichten worden uitgeschakeld. Je kunt ze weer inschakelen via instellingen. Beste voor de batterij. U ontvangt alleen meldingen als de app draait, de achtergronddienst wordt NIET gebruikt. - Het kan worden uitgeschakeld via instellingen - meldingen worden nog steeds weergegeven terwijl de app actief is. + Het kan worden uitgeschakeld via instellingen, meldingen worden nog steeds weergegeven terwijl de app actief is. Zowel jij als je contactpersoon kunnen verzonden berichten onherroepelijk verwijderen. Zowel jij als je contactpersoon kunnen verdwijnende berichten sturen. Zowel jij als je contactpersoon kunnen spraak berichten verzenden. Let op: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijt raakt. - Gebruikt meer batterij! Achtergrondservice is altijd actief - meldingen worden weergegeven zodra de berichten beschikbaar zijn. + Gebruikt meer batterij! Achtergrondservice is altijd actief, meldingen worden weergegeven zodra de berichten beschikbaar zijn. link voorbeeld annuleren oproep beëindigd %1$s Kan de database niet initialiseren @@ -116,7 +116,7 @@ Geen toegang tot Keystore om database wachtwoord op te slaan Kan bestand niet ontvangen Rol wijzigen - veranderend adres… + adres wijzigen… adres voor u gewijzigd veranderde rol van %s naar %s Groep rol wijzigen\? @@ -130,8 +130,8 @@ Chat profiel GESPREKKEN Praat met de ontwikkelaars - Controleer het serveradres en probeer het opnieuw. - Kies bestand + Controleer het server adres en probeer het opnieuw. + Bestand Wissen Vergelijk beveiligingscodes met je contacten. Contact gecontroleerd @@ -143,7 +143,7 @@ verbinden (introductie uitnodiging) verbinding gemaakt Verbindingsverzoek verzonden! - Time-out verbinding + Timeout verbinding Maak een eenmalige uitnodiging link Adres aanmaken Groep link maken @@ -166,13 +166,13 @@ Contact verborgen: Decodeerfout De momenteel maximaal ondersteunde bestandsgrootte is %1$s. - Contact en alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! + Contact en alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! Verbonden Bevestigen Maak verbinding via link / QR-code Gekopieerd naar het klembord Bijdragen - ICE-servers configureren + ICE servers configureren Verbinding Core gebouwd op: %s Core versie: v%s @@ -215,9 +215,9 @@ Maak Maak een profiel aan Adres verwijderen - Verbinden via relais + Verbinden via relais contact heeft e2e-codering - contact heeft geen e2e-encryptie + contact heeft geen e2e versleuteling De database is versleuteld met een willekeurige wachtwoord. Wijzig dit voordat u exporteert. Database wachtwoord Bevestig nieuw wachtwoord… @@ -267,16 +267,16 @@ Wachtende verbinding verwijderen\? 💻 desktop: scan weergegeven QR-code vanuit de app, via Scan QR-code. Ontwikkel gereedschap - Apparaatverificatie is uitgeschakeld. SimpleX Lock uitschakelen. + Apparaatverificatie is uitgeschakeld. SimpleX Vergrendelen uitschakelen. Weergavenaam - Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Lock inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld. + Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld. Directe berichten tussen leden zijn verboden in deze groep. %d bestand(en) met een totale grootte van %s %d uur Uitzetten Verdwijnende berichten Verdwijnende berichten zijn verboden in dit gesprek. - SimpleX Lock uitschakelen + SimpleX Vergrendelen uitschakelen Verdwijnende berichten Verbinding verbreken Verbinding verbroken @@ -314,14 +314,14 @@ Fout bij wijzigen van adres Fout bij het verwijderen van in behandeling zijnde contact verbinding Fout bij het verwijderen van gebruikers profiel - SimpleX Lock inschakelen + SimpleX Vergrendelen inschakelen Verbergen bewerkt Voor iedereen Fout Email Bewerk afbeelding - Afsluiten zonder op te slaan + Afsluiten zonder opslaan Volledige naam (optioneel) e2e versleuteld video gesprek Schakel oproepen vanaf het vergrendelscherm in via Instellingen. @@ -343,7 +343,7 @@ groep profiel bijgewerkt groep verwijderd Vouw de rolselectie uit - Groep wordt verwijderd voor alle leden - dit kan niet ongedaan worden gemaakt! + Groep wordt verwijderd voor alle leden, dit kan niet ongedaan worden gemaakt! Fout bij maken van groep link Fout bij verwijderen groep link Groep link @@ -356,7 +356,7 @@ ingeschakeld voor contact voor u ingeschakeld Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. - Groepsleden kunnen directe berichten sturen. + Groepsleden kunnen directe berichten sturen Groepsleden kunnen spraak berichten verzenden. Per chat profiel (standaard) of per verbinding (BETA). Verschillende namen, avatars en transportisolatie. @@ -368,7 +368,7 @@ Automatisch verwijderen van berichten aanzetten\? Voer het juiste wachtwoord in. Groep profiel bewerken - Schakel TCP-keep-alive in + Schakel TCP keep-alive in Versleutelen Fout bij het toevoegen van gebruiker(s) Voer de server handmatig in @@ -378,15 +378,15 @@ VOOR CONSOLE Groep profiel wordt opgeslagen op de apparaten van de leden, niet op de servers. Verborgen - De groep wordt voor u verwijderd - dit kan niet ongedaan worden gemaakt! + De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt! Verbergen fout Het bestand wordt ontvangen wanneer uw contact persoon online is, even geduld a.u.b. of controleer later! Fout bij opslaan van bestand Bestand niet gevonden Bestand opgeslagen - Uit galerij - Fout bij opslaan van ICE-servers + Galerij + Fout bij opslaan van ICE servers geëindigd Groepsleden kunnen verdwijnende berichten sturen. %d week @@ -397,8 +397,8 @@ Fout: %s Fout bij aanmaken van adres help - Flip-camera - Fout bij opslaan van SMP-servers + Draai camera + Fout bij opslaan van SMP servers Fout bij updaten van netwerk configuratie Kan het gesprek niet laden Kan de gesprekken niet laden @@ -420,7 +420,7 @@ Nieuw contactverzoek Log in met uw inloggegevens Hoogstwaarschijnlijk heeft dit contact de verbinding met jou verwijderd. - Bericht wordt verwijderd - dit kan niet ongedaan worden gemaakt! + Bericht wordt verwijderd, dit kan niet ongedaan worden gemaakt! Groot bestand! Markeer gelezen Markeer als ongelezen @@ -440,11 +440,11 @@ Hoe het werkt gemiste oproep Hoe SimpleX werkt - Veel mensen vroegen: als SimpleX geen gebruikers-ID\'s heeft, hoe kan het dan berichten bezorgen\? + Veel mensen vroegen: als SimpleX geen gebruikers ID\'s heeft, hoe kan het dan berichten bezorgen\? Inkomende audio oproep Inkomend video gesprek Negeren - geen e2e-encryptie + geen e2e versleuteling Chat database importeren\? nooit Geen ontvangen of verzonden bestanden @@ -454,17 +454,17 @@ uitgenodigd Groep verlaten Lokale naam - Incognito modus wordt hier niet ondersteund - uw hoofdprofiel wordt naar groepsleden verzonden + Incognito modus wordt hier niet ondersteund, uw hoofdprofiel wordt naar groepsleden verzonden Alleen lokale profielgegevens Het onomkeerbaar verwijderen van berichten is verboden in deze groep. - App-scherm verbergen in de recente apps. + App scherm verbergen in de recente apps. Incognito modus Berichten Nieuw wachtwoord… Keychain fout Word lid van Groep verlaten\? - Nieuwe ledenrol + Nieuwe leden rol Geen contacten om toe te voegen Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chat profiel. Licht @@ -496,7 +496,7 @@ GEBRUIKER BERICHTEN 📱 mobiel: tik op Openen in mobiele app en tik vervolgens op Verbinden in de app. - Gebruiker wordt uit de groep verwijderd - dit kan niet ongedaan worden gemaakt! + Gebruiker wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt! Fout bij bezorging van bericht Bericht wordt gemarkeerd voor verwijdering. De ontvanger(s) kunnen dit bericht onthullen. Netwerk status @@ -506,7 +506,7 @@ Database importeren Verbeterde privacy en veiligheid De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later! - De incognito modus beschermt de privacy van uw hoofdprofielnaam en -afbeelding - voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt. + De incognito modus beschermt de privacy van uw hoofdprofielnaam en afbeelding, voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt. Nieuw database archief geen details indirect (%1$s) @@ -516,14 +516,14 @@ Meldingsservice Meldingen Ongeldige link! - Ongeldig serveradres! + Ongeldig server adres! Installeer SimpleX Chat voor terminal Hoe Hoe u uw servers gebruikt Netwerk & servers - ICE-servers (één per lijn) - Zorg ervoor dat WebRTC ICE-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn. - Als u bevestigt, kunnen de berichtenservers uw IP-adres zien en uw provider - met welke servers u verbinding maakt. + ICE servers (één per lijn) + Zorg ervoor dat WebRTC ICE server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. + Als u bevestigt, kunnen de berichten servers uw IP-adres zien en uw provider, met welke servers u verbinding maakt. Nee Immuun voor spam en misbruik Maak een privéverbinding @@ -535,7 +535,7 @@ uitgenodigd via je groep link Incognito Gemiste oproep - incognito via link naar contactadres + incognito via contact adres link incognito via groep link incognito via eenmalige link ongeldige gesprek @@ -543,21 +543,21 @@ ongeldig berichtformaat uitgenodigd om te verbinden LIVE - Zorg ervoor dat SMP-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn. + Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. gemarkeerd als verwijderd Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen. profielfoto Privacy opnieuw gedefinieerd Privacy en beveiliging Controleer uw netwerkverbinding met %1$s en probeer het opnieuw. - Mogelijk is de certificaatvingerafdruk in het serveradres onjuist + Mogelijk is de certificaat vingerafdruk in het server adres onjuist Periodieke meldingen Chat console openen Geen toestemming! profielafbeelding tijdelijke aanduiding Eenmalige uitnodiging link Plakken - Vooraf ingesteld serveradres + Vooraf ingesteld server adres Onion hosts worden niet gebruikt. Privé meldingen Plak de ontvangen link @@ -573,12 +573,12 @@ Alleen jij kunt verdwijnende berichten verzenden. Alleen uw contactpersoon kan verdwijnende berichten verzenden. Alleen jij kunt berichten onomkeerbaar verwijderen (je contactpersoon kan ze markeren voor verwijdering). - aangeboden %s: %2s + voorgesteld %s: %2s Oud database archief Voer het juiste huidige wachtwoord in. eigenaar - PING-telling - PING-interval + PING telling + PING interval Bewaar het laatste berichtconcept, met bijlagen. Privé bestandsnamen Er kunnen slechts 10 afbeeldingen tegelijk worden verzonden @@ -599,13 +599,13 @@ Onion hosts worden gebruikt indien beschikbaar. Onion hosts worden gebruikt indien beschikbaar. Onion hosts worden niet gebruikt. - Open-source protocol en code – iedereen kan de servers draaien. + Open-source protocol en code. Iedereen kan de servers draaien. Mensen kunnen alleen verbinding met u maken via de links die u deelt. Alleen uw contactpersoon kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering). Alleen jij kunt spraak berichten verzenden. Alleen uw contactpersoon kan spraak berichten verzenden. Verbied het onomkeerbaar verwijderen van berichten. - aangeboden %s + voorgesteld %s Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de gesprekken. Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u deze kwijtraakt. Gesprekken openen @@ -613,9 +613,9 @@ Oproep in behandeling Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven. Werk de app bij en neem contact op met de ontwikkelaars. - Alleen client-apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met 2-laags end-to-end-codering. + Alleen client apparaten slaan gebruikers profielen, contacten, groepen en berichten op die zijn verzonden met 2-laags end-to-end codering. De afzender heeft mogelijk het verbindingsverzoek verwijderd. - Schakel SimpleX Lock in om uw informatie te beschermen. + Schakel SimpleX Vergrendelen in om uw informatie te beschermen. \nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld. Aanzetten Ontgrendelen @@ -629,15 +629,15 @@ Uw contactpersoon kan de QR-code vanuit de app scannen. Uitnodiging link delen Code scannen - Uw contactadres + Uw contact adres Uw instellingen Deel link Jij beheert je gesprek! Uw profiel, contacten en afgeleverde berichten worden op uw apparaat opgeslagen. beginnen… - U bepaalt via welke server(s) je de berichten ontvangt, uw contacten – de servers die u gebruikt om ze berichten te sturen. + U bepaalt via welke server(s) je de berichten ontvangt, uw contacten de servers die u gebruikt om ze berichten te sturen. Video aan - Deze actie kan niet ongedaan worden gemaakt - uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. + Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. Deze instelling is van toepassing op berichten in jou huidige chat profiel Bewaar archief bijgewerkt groep profiel @@ -654,7 +654,7 @@ Toon contact en bericht Toon alleen contactpersoon SimpleX Chat berichten - SimpleX Lock ingeschakeld + SimpleX Vergrendelen ingeschakeld Stop chat Antwoord Opslaan @@ -669,7 +669,7 @@ Welkom! je bent uitgenodigd voor de groep Je hebt geen gesprekken - Je gesprekken + Jouw gesprekken Deel bestand… Afbeelding delen… Wachten op afbeelding @@ -706,14 +706,14 @@ Beveiligingscode %s is niet geverifieerd %s is geverifieerd - Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contactpersoon te verifiëren. + Vergelijk (of scan) de code op uw apparaten om end-to-end codering met uw contactpersoon te verifiëren. U kunt ook verbinding maken door op de link te klikken. Als het in de browser wordt geopend, klikt u op de knop Openen in mobiele app . Uw chat profiel wordt naar uw contactpersoon verzonden - Je chat profielen - Uw SimpleX contactadres + Uw chat profielen + Uw SimpleX contact adres Stuur vragen en ideeën Stuur ons een e-mail - SimpleX Lock + SimpleX Vergrendelen SMP servers Bewaar servers Servertest mislukt! @@ -722,8 +722,8 @@ Server test Beoordeel de app Gebruik server - Gebruik van SimpleX Chat-servers. - Uw serveradres + Gebruik van SimpleX Chat servers. + Uw server adres Uw server Transport isolation SOCKS-proxy gebruiken (poort 9050) @@ -732,7 +732,7 @@ WELKOMS BERICHT Je huidige profiel Opslaan en Contacten melden - Opslaan en Groepleden melden + Opslaan en Groepsleden melden staking Het berichten- en applicatieplatform dat uw privacy en veiligheid beschermt. Het profiel wordt alleen gedeeld met uw contacten. @@ -742,7 +742,7 @@ geheim De volgende generatie privéberichten wachten op antwoord… - Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers-ID\'s die door alle andere platforms worden gebruikt, ID\'s voor berichtenwachtrijen, afzonderlijk voor elk van uw contacten. + Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers ID\'s die door alle andere platforms worden gebruikt, ID\'s voor berichten wachtrijen, afzonderlijk voor elk van uw contacten. Gebruik chat Wanneer de app actief is video gesprek (niet e2e versleuteld) @@ -751,8 +751,10 @@ video oproep Uw oproepen Toon - WebRTC ICE-servers - Uw ICE-servers + WebRTC ICE servers + Relay server beschermt uw IP-adres, maar kan de duur van het gesprek observeren. + Relay server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien. + Uw ICE servers Overgeslagen berichten via relais Video uit @@ -769,7 +771,7 @@ U mag de meest recente versie van uw chat database ALLEEN op één apparaat gebruiken, anders ontvangt u mogelijk geen berichten meer van sommige contacten. Start de app opnieuw om de geïmporteerde chat database te gebruiken. Stop de chat om database acties mogelijk te maken. - Deze actie kan niet ongedaan worden gemaakt - alle ontvangen en verzonden bestanden en media worden verwijderd. Foto\'s met een lage resolutie blijven behouden. + Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto\'s met een lage resolutie blijven behouden. Wachtwoord verwijderen uit Keychain\? Verwijderen Update @@ -783,13 +785,13 @@ heeft je verwijderd jij: %1$s %1$s LEDEN - U kunt een link of een QR-code delen - iedereen kan lid worden van de groep. U verliest geen leden van de groep als u deze later verwijdert. + U kunt een link of een QR-code delen. Iedereen kan lid worden van de groep. U verliest geen leden van de groep als u deze later verwijdert. Wijzig De rol wordt gewijzigd in \"%s\". Iedereen in de groep wordt op de hoogte gebracht. Ontvang via Groep profiel opslaan De groep is volledig gedecentraliseerd – het is alleen zichtbaar voor de leden. - Time-out van TCP-verbinding + Timeout van TCP-verbinding Spraak berichten Spraak berichten zijn verboden in dit gesprek. Verbied het verzenden van verdwijnende berichten. @@ -800,7 +802,7 @@ Stop de chat om de chat database te exporteren, importeren of verwijderen. U kunt geen berichten ontvangen en verzenden terwijl de chat is gestopt. %s seconde(n) Database wachtwoord bijwerken - Uw chat database is niet versleuteld - stel een wachtwoord in om deze te beschermen. + Uw chat database is niet versleuteld, stel een wachtwoord in om deze te beschermen. Databasefout herstellen Onbekende fout Verkeerd wachtwoord! @@ -823,7 +825,7 @@ SERVERS Resetten naar standaardwaarden Ontvangst adres wijzigen - Protocol time-out + Protocol timeout Terugdraaien Opslaan sec @@ -857,16 +859,16 @@ Spraak berichten verboden! Resetten Verstuur - Stuur een live bericht - het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt + Stuur een live bericht, het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt (om te delen met uw contact) Bedankt voor het installeren van SimpleX Chat! - Gebruik camera + Camera Gebruik voor nieuwe verbindingen Star on GitHub De servers voor nieuwe verbindingen van je huidige chat profiel - Uw SMP-servers - Opgeslagen WebRTC ICE-servers worden verwijderd. - Uw ICE-servers + Uw SMP servers + Opgeslagen WebRTC ICE servers worden verwijderd. + Uw ICE servers Opslaan SOCKS-proxy gebruiken\? Gebruik .onion-hosts @@ -877,19 +879,19 @@ Transportisolatiemodus updaten\? bevestiging ontvangen… Wachten op bevestiging… - Het eerste platform zonder gebruikers-ID\'s - privé door ontwerp. + Het eerste platform zonder gebruikers ID\'s, privé door ontwerp. Verbied het sturen van directe berichten naar leden. Verbieden het verzenden van spraak berichten. De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits. Met optioneel welkomstbericht. Spraak berichten Uw contacten kunnen volledige verwijdering van berichten toestaan. - U moet elke keer dat de app start het wachtwoord invoeren - deze wordt niet op het apparaat opgeslagen. + U moet elke keer dat de app start het wachtwoord invoeren, deze wordt niet op het apparaat opgeslagen. Verkeerd wachtwoord voor de database Bewaar het wachtwoord en open je gesprekken De poging om het wachtwoord van de database te wijzigen is niet voltooid. - Databaseback-up terugzetten - Databaseback-up terugzetten\? + Database back-up terugzetten + Database back-up terugzetten\? Herstellen je veranderde de rol van %s in %s je veranderde de rol voor jezelf naar %s @@ -906,38 +908,38 @@ Server vereist autorisatie om wachtrijen te maken, controleer wachtwoord Groep voorkeuren instellen Bericht delen… - SimpleX Lock + SimpleX Vergrendelen Sla het wachtwoord op in Keychain SOCKS PROXY Dank aan de gebruikers – draag bij via Weblate! - De app haalt regelmatig nieuwe berichten op - het gebruikt een paar procent van de batterij per dag. De app maakt geen gebruik van push meldingen - gegevens van uw apparaat worden niet naar de servers verzonden. + De app haalt regelmatig nieuwe berichten op - het gebruikt een paar procent van de batterij per dag. De app maakt geen gebruik van push meldingen, gegevens van uw apparaat worden niet naar de servers verzonden. De afbeelding kan niet worden gedecodeerd. Probeer een andere afbeelding of neem contact op met de ontwikkelaars. THEMA\'S Scan server QR-code Deze string is geen verbinding link! - Deze actie kan niet ongedaan worden gemaakt - de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren. + Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren. Deze functie is experimenteel! Het werkt alleen als op de andere client versie 4.2 is geïnstalleerd. U zou het bericht in het gesprek moeten zien zodra de adreswijziging is voltooid. Controleer of u nog steeds berichten van dit contact (of groepslid) kunt ontvangen. Om je privacy te behouden, heeft de app in plaats van push meldingen een SimpleX achtergrondservice – deze gebruikt een paar procent van de batterij per dag. Jij staat toe Je bent uitgenodigd voor de groep U kunt verbinding maken met SimpleX Chat ontwikkelaars om vragen te stellen en updates te ontvangen. - Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn - meld het alstublieft. + Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft. \nOm verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft. .onion hosts-instelling updaten\? - SimpleX Chat-servers gebruiken\? + SimpleX Chat servers gebruiken\? Spraak berichten zijn verboden in deze groep. Welkom %1$s! - U kunt uw adres delen als een link of als een QR-code - iedereen kan verbinding met u maken. U verliest uw contacten niet als u deze later verwijdert. + U kunt uw adres delen als een link of als een QR-code. Iedereen kan verbinding met u maken. U verliest uw contacten niet als u deze later verwijdert. U kunt de chat starten via app Instellingen / Database of door de app opnieuw op te starten. je hebt het adres gewijzigd voor %s je hebt %1$s verwijderd Je contactpersoon heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%1$s). - Uw huidige chat database wordt VERWIJDERD en VERVANGEN door de geïmporteerde. -\nDeze actie kan niet ongedaan worden gemaakt - uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. + Uw huidige chatdatabase wordt VERWIJDERD en VERVANGEN door de geïmporteerde. +\nDeze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. Je probeert een contact met wie je een incognito profiel hebt gedeeld, uit te nodigen voor de groep waarin je je hoofdprofiel gebruikt Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten. \n -\nSimpleX-servers kunnen uw profiel niet zien. +\nSimpleX servers kunnen uw profiel niet zien. U moet zich authenticeren wanneer u de app na 30 seconden op de achtergrond start of hervat. Te veel afbeeldingen! Luidspreker uit @@ -946,7 +948,7 @@ Afzender heeft bestandsoverdracht geannuleerd. het ontvangen van bestanden wordt nog niet ondersteund het verzenden van bestanden wordt nog niet ondersteund - SimpleX contactadres + SimpleX contact adres SimpleX groep link SimpleX links Eenmalige SimpleX uitnodiging @@ -954,7 +956,7 @@ Er wordt geprobeerd verbinding te maken met de server die wordt gebruikt om berichten van dit contact te ontvangen (fout: %1$s). onbekend berichtformaat Via browser - via contactadres link + via contact adres link via groep link via een eenmalige link via %1$s @@ -962,8 +964,20 @@ je hebt een eenmalige link gedeeld je hebt een eenmalige link incognito gedeeld Tik op de knop - Lees meer in onze GitHub-repository. - Lees meer in onze GitHub-repository. + Lees meer in onze GitHub repository. + Lees meer in onze GitHub repository. %1$d bericht(en) overgeslagen gemodereerd + gemodereerd door %s + Bericht van lid verwijderen\? + Modereren + Het bericht wordt verwijderd voor alle leden. + Het bericht wordt gemarkeerd als gemodereerd voor alle leden. + Neem contact op met de groep beheerder. + Fout bij bijwerken van groep link + Initiële rol + waarnemer + Je kunt geen berichten versturen! + jij bent waarnemer + Systeem \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-pl/strings.xml b/apps/android/app/src/main/res/values-pl/strings.xml deleted file mode 100644 index a6b3daec9..000000000 --- a/apps/android/app/src/main/res/values-pl/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-pt-rBR/strings.xml b/apps/android/app/src/main/res/values-pt-rBR/strings.xml index 99bca53d8..be7ee5a5a 100644 --- a/apps/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/apps/android/app/src/main/res/values-pt-rBR/strings.xml @@ -6,4 +6,433 @@ 1 semana 1 mês a + b + Não é possível convidar contatos! + mudando endereço… + mudando endereço para %s… + "mudando endereço…" + Mudar regra + Mudar + Um perfil aleatório será enviado para o contato do qual você recebeu este link + Você e seu contato podem excluir mensagens enviadas de forma irreversível. + Pode ser desativado nas configurações – as notificações ainda serão exibidas enquanto o aplicativo estiver em execução. + Você e seu contato podem enviar mensagens de voz. + O aplicativo pode receber notificações apenas quando estiver em execução, nenhum serviço em segundo plano será iniciado + Sempre On + Verifica novas mensagens a cada 10 minutos por até 1 minuto + Autenticação indisponível + Cancelar visualização do arquivo + Pediu para receber a imagem + Cancelar mensagem ao vivo + Voltar + Selecione o arquivo + Adicionar novo contato: para criar seu QR code único para seu contato. + Escanear \u0020QR code: para se conectar ao seu contato que mostra o código QR para você. + Aceitar + Limpar bate-papo\? + Limpar + Limpar bate-papo + Limpar + cancelar pré-visualização do link + cancelado %s + Versão do App: v%s + chamando… + chamada em andamento + Aceitar + Chamada já encerrada! + Chamada em andamento + Chamada finalizada + Atender ligação + hash de mensagem ruim + ID de mensagem incorreta + Observação: você NÃO poderá recuperar ou alterar a senha se a perder. + Não é possível receber o arquivo + Cancelar visualização da imagem + Botão Fechar + Limpar verificação + Versão do App + Automaticamente + negrito + erro de chamada + Chamadas de áudio e vídeo + Aceitar + Chamadas na tela de bloqueio: + Áudio ligado + Banco de dados de bate-papo importado + "Android Keystore é usado para armazenar passphrase com segurança - permite que o serviço de notificação funcione." + "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." + Não é possível acessar o Keystore para salvar a senha do banco de dados + ARQUIVO DE BATE-PAPO + O bate-papo está parado + Limpar + Um perfil aleatório será enviado para o seu contato + Preferências de bate-papo + perfil de bate-papo + Aceitar pedidos + Áudio desligado + Aceitar imagens automaticamente + Banco de dados de bate-papo excluído + Não é possível convidar o contato! + 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. + Não é possível inicializar o banco de dados + Anexar + Cancelar + Console de bate-papo + Verifique o endereço do servidor e tente novamente. + Uma conexão TCP separada (e credencial SOCKS) será usada para cada perfil de bate-papo que você tiver no aplicativo. + Melhor para bateria. Você receberá notificações apenas quando o aplicativo estiver em execução, o serviço em segundo plano NÃO será usado. + Consome mais bateria! O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis. + CONVERSAS + ÍCONE DO APP + BANCO DE DADOS DE BATE-PAPO + O bate-papo está em execução + O bate-papo está parado + Alterar passphrase do banco de dados\? + Arquivo de bate-papo + endereço alterado para você + Você e seu contato podem enviar mensagens que desaparecem. + Backup de dados do aplicativo + CHAMADAS + Aceitar solicitações de contato automaticamente + Aparência + O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis. + Uma conexão TCP separada (e credencial SOCKS) será usada para cada contato e membro do grupo. Observação: se você tiver muitas conexões, o consumo de bateria e tráfego pode ser substancialmente maior e algumas conexões podem falhar. + Bom para bateria. O serviço em segundo plano verifica novas mensagens a cada 10 minutos. Você pode perder chamadas e mensagens urgentes. + chamada finalizada %1$s + Bate-papo com os desenvolvedores + Criar link de grupo + Criar link + Criar grupo secreto + Escuro + Conectar via link de convite\? + Conectar via link de contato\? + Criar fila + Nome de contato + Contato oculto: + Copiar + Permitir + Permitir enviar mensagens que desaparecem. + Permitir o envio de mensagens diretas aos membros. + Conectar via link/ QR Code + "Todas as mensagens serão excluídas - isso não pode ser desfeito! As mensagens serão excluídas APENAS para você." + Adicionar servidores predefinidos + Adicionar servidor… + Crie seu perfil + Ícone de contexto + Contato e todas as mensagens serão excluídas - isso não pode ser desfeito! + Copiado para a área de transferência + Aceitar solicitação de conexão\? + Configurações de rede avançadas + Solicitações de contato + Criar endereço + Todos os seus contatos permanecerão conectados. + chamada aceita + Contato tem criptografia e2e + contato não tem criptografia e2e + Preferências de contato + Permite excluir irreversivelmente as mensagens enviadas. + sempre + Adicione servidores digitalizando QR code. + Permitir enviar mensagens de voz. + Criar grupo secreto + Conectar via relay + Adicionar perfil + Conectar via link + Criar perfil + Banco de dados criptografado! + criador + Todos os bate-papos e mensagens serão excluídos - isso não pode ser desfeito! + Aceitar + Permitir mensagens que desaparecem apenas se o seu contato permitir. + Permita a exclusão irreversível da mensagem somente se o seu contato permitir. + Permitir que seus contatos enviem mensagens que desaparecem. + Permitir mensagens de voz somente se o seu contato permitir. + Permitir que seus contatos enviem mensagens de voz. + admin + Todos os membros do grupo permanecerão conectados. + "Contatos podem marcar mensagens para exclusão; você será capaz de visualizá-los." + Conectar via link do grupo\? + Contato já existe + Contato verificado + Contato ainda não está conectado! + Contribuir + Criar + "Acessar os servidores via proxy SOCKS na porta 9050\? O proxy deve ser iniciado antes de habilitar esta opção." + Permitir que seus contatos excluam de forma irreversível as mensagens enviadas. + Adicionar a outro dispositivo + Os administradores podem criar os links para ingressar em grupos. + Permitir mensagens de voz\? + Excluir grupo + Conexão + Excluir perfil de bate-papo\? + Excluir para todos + Conectar + conectado + conectando + excluído + Conectar + Excluir + Conectar + conectando chamada… + Excluir perfil de bate-papo\? + Excluir arquivos de todos os perfis de bate-papo + conectando… + Erro de conexão + Excluir contato + Configurar servidores ICE + Excluir endereço\? + Descentralizado + Excluir banco de dados + "O banco de dados é criptografado usando um passphrase aleatório. Por favor, altere-o antes de exportar." + Confirmar nova passphrase… + Passphrase atual… + Passphrase do banco de dados é necessária para abrir o chat. + Excluir arquivo + Excluir arquivo de bate-papo\? + regra alterada de %s para %s + conectado + Excluir link + Excluir link\? + padrão (%s) + Solicitação de conexão enviada! + conectando + conectando… + Excluir para mim + conectando… + Excluir contato\? + confirmar + Passphrase e exportação do banco de dados + Conectando chamada + Excluir mensagens + Passphrase de criptografia do banco de dados será atualizada. + Erro de banco de dados + Passphrase do banco de dados é diferente da salva no Keystore. + completo + ID do banco de dados + colorido + conectado + Conectado + Conectado + chamada de áudio (não criptografada em e2e) + Alterar a regra do grupo\? + chamada de áudio + mudou sua regra para %s + Compare os códigos de segurança com seus contatos. + Confirme sua credencial + conectando… + conectando (anunciado) + Conexão + Erro de conexão (AUTH) + conexão estabelecida + conexão %1$d + Criado em %1$s + Atualmente, o tamanho máximo de arquivo suportado é %1$s. + Excluir + Passphase de criptografia do banco de dados será atualizada e armazenada no Keystore. + Excluir endereço + "O banco de dados é criptografado usando um passphrase aleatório, você pode alterá-la." + Passphrase do banco de dados + O banco de dados será criptografado e o passphrase armazenado no Keystore. + O banco de dados será criptografado. + %d dia + Erro de decodificação + Excluir + %d dias + Excluir todos os arquivos + Excluir mensagem\? + Excluir depois + Excluir perfil de bate-papo para + grupo excluído + Excluir grupo\? + Excluir imagem + Excluir arquivos e mídia\? + conectado + conectando (aceito) + %dd + Por perfil de bate-papo (padrão) ou por conexão (BETA). + Aceitar anônimo + Excluir mensagens após + 💻 desktop: Scaneie o QR code exibido no aplicativo, via Scan QR code + Excluir conexão pendente\? + Descrição + Excluir servidor + conectando (introduction invitation) + Tempo de conexão esgotado + Excluir mensagem do membro\? + Excluir fila + DISPOSITIVO + Ferramentas de desenvolvimento + conectando (introduced) + Realçar + Erro ao remover membro + Erro ao alterar regra + direto + erro + Falha ao carregar o bate-papo + Erro ao atualizar a configuração de rede + Erro ao enviar mensagem + Erro ao adicionar membro(s) + Desconectar + Erro ao excluir perfil do usuário + %ds + %d meses + %d semanas + Criptografar banco de dados\? + Erro ao receber arquivo + Erro ao criar endereço + Nome de exibição: + Erro ao iniciar o bate-papo + Erro ao excluir banco de dados de bate-papo + Criptografar + Ativar TCP keep-alive + Erro ao criar perfil! + Erro ao ingressar no grupo + Nome de exibição duplicado! + Erro ao excluir contato + Erro ao alterar endereço + Erro ao excluir conexão de contato pendente + Editar + Ativar exclusão automática de mensagens\? + %d sec + Erro ao salvar servidores SMP + Erro ao aceitar solicitação de contato + Erro ao excluir solicitação de contato + Erro ao trocar de perfil! + Desativar Bloqueio SimpleX + Ativar Bloqueio SimpleX + editado + Erro + Email + Erro ao salvar servidores ICE + Sair sem salvar + Nome de exibição + chamada de vídeo criptografada e2e + mensagem duplicada + criptografado e2e + Exportar banco de dados + %d arquivo(s) com tamanho total de %s + Erro ao exportar banco de dados de bate-papo + Erro ao importar banco de dados de bate-papo + Erro ao interromper o bate-papo + Erro ao alterar configuração + Erro ao criptografar o banco de dados + Banco de dados criptografado + Digite o passphrase correto. + Digite o passphrase… + Erro: %s + Editar perfil do grupo + Expandir seleção de regra + Erro ao salvar o perfil do grupo + Mensagens diretas + habilitado + habilitado para contato + ativado para você + %dm + %d min + %d mês + %d semana + %d hora + 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. + Desativar + Desconectado + Mensagens que desaparecem(temporárias) são proibidas neste grupo. + Erro ao salvar arquivo + O nome de exibição não pode conter espaços em branco. + chamada de áudio criptografada e2e + Editar imagem + Insira o servidor manualmente + Erro ao excluir grupo + Funcionalidades experimentais + Erro ao criar o link de grupo + Erro ao excluir o link de grupo + Mensagens diretas entre membros são proibidas neste grupo. + %dh + %d horas + anônimo via link de endereço de contato + anônimo via link único + Esconder + Da Galeria + Os membros do grupo podem enviar mensagens que desaparecem. + Arquivo + Nome completo: + Chamada de áudio recebida + Mensagens que desaparecem + "Ocultar aplicativo nos aplicativos recentes." + Imagem enviada + Link do grupo + Importar banco de dados + O convite de grupo não é mais válido, foi removido pelo remetente. + Grupo inativo + Grupo não encontrado! + O grupo será excluído para você - isso não pode ser desfeito! + Grupo + indireto (%1$s) + Anônimo + Mensagens que desaparecem + Preferências de grupo + Mensagens que desaparecem são proibidas nesse bate-papo. + Os membros do grupo podem enviar mensagens diretas. + %dmês + Link completo + Esconder + A autenticação do dispositivo está desativada. Desativando o SimpleX Lock. + Para todos + Escondido + Gerar um link de convite único. + Como usar seus servidores + Importar + Importar banco de dados de bate-papo\? + Nome de exibição do grupo: + Nome completo do grupo: + Links de grupo + Privacidade e segurança aprimoradas + Falha ao carregar bate-papos + Arquivo: %s + Arquivo salvo + Os membros do grupo podem enviar mensagens de voz. + O grupo será excluído para todos os membros - isso não pode ser desfeito! + AJUDA + Ocultar contato e mensagem + Como usar + Como usar markdown + Se você não puder se encontrar pessoalmente, mostre o QR code na videochamada ou compartilhe o link. + Se você não puder encontrar pessoalmente, você pode escanear o QR code na videochamada ou seu contato pode compartilhar um link de convite. + Se você confirmar, os servidores de mensagens poderão ver seu endereço IP e seu provedor - e quais servidores você está se conectando. + Imagem + Se você recebeu o link de convite SimpleX Chat, você pode abri-lo em seu navegador: + Imagem salva na galeria + O modo de navegação anônima não é suportado aqui - seu perfil principal será enviado aos membros do grupo + anônimo via link do grupo + Chamada de vídeo recebida + Para usá-lo, por favor desative a otimização da bateria para SimpleX na próxima caixa de diálogo. Caso contrário, as notificações serão desativadas. + Gerar um link de convite único + Arquivo não encontrado + Se você optar por rejeitar o remetente NÃO será notificado. + Código de segurança incorreto! + Instale o SimpleX Chat para o terminal + Nome Completo (opcional) + Como funciona + Imune a spam e abuso + Vire a câmera + Desligar + Modo anônimo + Regra inicial + perfil do grupo atualizado + Grupo excluído + 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. + Os membros do grupo podem excluir mensagens enviadas de forma irreversível. + %dsemana + Configuração de servidor aprimorada + Interface francesa + terminou + Ative as chamadas pela tela de bloqueio nas Configurações. + Arquivos & mídia + Erro ao atualizar o link do grupo + O convite do grupo expirou + O arquivo será recebido quando seu contato estiver online, aguarde ou verifique mais tarde! + O perfil do grupo é armazenado nos dispositivos dos membros, não nos servidores. + ajuda + Como SimpleX funciona + Servidores ICE (um por linha) + Ignorar + A imagem será recebida quando seu contato estiver online, aguarde ou verifique mais tarde! \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml index 376334dfb..c61e70b49 100644 --- a/apps/android/app/src/main/res/values-ru/strings.xml +++ b/apps/android/app/src/main/res/values-ru/strings.xml @@ -514,13 +514,15 @@ Аудио- и видеозвонки Ваши звонки - Соединяться через сервер (relay) + Всегда соединяться через relay Звонки на экране блокировки: Принимать Показывать Выключить Ваши ICE серверы WebRTC ICE серверы + Relay сервер защищает ваш IP адрес, но может отслеживать продолжительность звонка. + Relay сервер используется только при необходимости. Другая сторона может видеть ваш IP адрес. Откройте SimpleX Chat\nчтобы принять звонок Вы можете разрешить принимать звонки на экране блокировки через Настройки. @@ -1039,4 +1041,15 @@ Уменьшенное потребление батареи Отдельные транспортные сессии удалено + удалено %s + Удалить сообщение участника\? + Модерировать + Сообщение будет удалено для всех членов группы. + Сообщение будет помечено как удаленное для всех членов группы. + Пожалуйста, свяжитесь с админом группы. + Вы не можете отправлять сообщения! + только чтение сообщений + читатель + Роль при вступлении + Ошибка обновления ссылки группы \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-bg/strings.xml b/apps/android/app/src/main/res/values-uk/strings.xml similarity index 100% rename from apps/android/app/src/main/res/values-bg/strings.xml rename to apps/android/app/src/main/res/values-uk/strings.xml diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 4319a9de7..87f833b99 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -9,9 +9,9 @@ 接受 接受 接受 - 1月 + 1个月 1周 - 强化 + 色调 已接受通话 接受 通过 SOCKS 代理访问服务器在端口9050?允许该选项前必须开始代理。 @@ -38,7 +38,7 @@ 消息 在此后删除消息 消息 - 添加资料 + 添加个人资料 所有聊天记录和消息将被删除——这一行为无法撤销! 所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。 允许发送语音消息。 @@ -67,7 +67,7 @@ 通过联系人链接连接? 通过群组链接连接? 通过群组链接/二维码连接 - 通过中继连接 + 通过中继连接 允许您的联系人不可撤回地删除已发送消息。 联系人允许 仅有您的联系人许可后才允许语音消息。 @@ -99,7 +99,7 @@ 应用程序版本 应用程序数据备份 应用程序图标 - 一个随机资料将被发送到收到您链接的联系人那里 + 随机配置文件将发送给您从中收到此链接的联系人 应用程序版本:v%s 仅在运行时应用程序可以接受通知,不会启动后台服务 一个随机资料将发送给您的联系人 @@ -185,20 +185,20 @@ 隐身聊天 加入群组 加入隐身聊天 - 隐身聊天模式 - 这里不支持隐身聊天模式——您的主要资料将被发送给群组成员 + 隐身模式 + 此处不支持隐身模式——您的主要个人资料将发送给群组成员 点击开始一个新聊天 您的随机资料 - 通过联系人地址链接隐身聊天 - 通过群组链接隐身聊天 + 通过联系地址链接隐身 + 通过群组链接隐身 您分享了一次性链接隐身聊天 点击以加入隐身聊天 您的聊天资料将被发送给群组成员 - 您正在尝试邀请与您共享隐身聊天资料的联系人加入您使用主要资料的群组 - 隐身聊天模式可以保护您的主要资料名和头像的隐私——为每个新联系人创建一个新的随机资料。 - 您正在为该群组使用隐身聊天资料——为防止共享您的主要资料,邀请联系人是不允许的 + 您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组 + 隐身模式可以保护你的主要个人资料名称和图像的隐私——对于每个新的联系人,都会创建一个新的随机个人资料。 + 您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人 您的聊天资料将被发送给您的联系人 - 通过一次性链接隐身聊天 + 通过一次性链接隐身 只有群主可以启用语音信息。 您的隐私设置 隐私和安全 @@ -218,7 +218,7 @@ 数据库密码不同于保存在密钥库中的密码。 数据库加密密码将被更新并存储在密钥库中。 数据库将被加密,密码存储在密钥库中。 - 在密匙库中没有找到密码,请手动输入。如果你使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。 + 在密匙库中没有找到密码,请手动输入。如果您使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。 从密钥库中删除密码? 在密钥库中保存密码 SimpleX Chat 服务 @@ -335,7 +335,7 @@ 已检查联系人 联系人已隐藏: 联系人尚未连接! - 背景图标 + 上下文图标 复制到剪贴板 连接中…… 创建群组链接 @@ -373,7 +373,7 @@ 群组已删除 将为所有成员删除群组——此操作无法撤消! 直接 - 私聊 + 直接信息 已启用 群组成员可以发送语音消息。 群组链接 @@ -441,7 +441,7 @@ 启用自动删除消息? 用于控制台 此群中禁止成员之间私聊。 - 此群组中禁止显示限时消息。 + 该组禁止限时消息。 群组成员可以不可撤回地删除已发送的消息。 群组成员可以私信。 限时消息 @@ -463,7 +463,7 @@ 本地名称 无效的消息格式 无效数据 - LIVE + 实时 已邀请连接 无效的连接链接 斜体 @@ -540,7 +540,7 @@ 通知 正在接收消息…… 要接收通知,请输入数据库密码 - 为了保护您的隐私,该应用程序没有推送通知,而是一个 SimpleX 后台服务 ——它每天使用百分之几的电池。 + 为了保护您的隐私,该应用程序没有推送通知,而是具有 SimpleX 后台服务 ——它每天使用百分之几的电池。 您的设置 为了使用它,请 禁用电池优化SimpleX在下一个对话框。否则通知将被禁用。 通知预览 @@ -549,7 +549,7 @@ 在应用程序打开时运行 显示预览 该应用程序会定期获取新消息——它每天会消耗百分之几的电量。该应用程序不使用推送通知——您设备中的数据不会发送到服务器。 - 你的联系人可以允许完全删除消息。 + 您的联系人可以允许完全删除消息。 已发送的消息将在设定的时间后被删除。 您的聊天数据库 密码错误! @@ -576,7 +576,7 @@ 更新 打开 SimpleX Chat 来接听电话 视频通话 - %1$s 想通过该方式与您联系 + %1$s 想通过以下方式与您联系 拒接来电 点对点 错误:%s @@ -592,12 +592,12 @@ 您的聊天资料 未接来电 待定来电 - 您的聊天资料存储在本地,只在您的设备上 + 您的聊天资料存储在本地,仅存储在您的设备上 除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。 \n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。 您已经连接到 %1$s! 您的聊天资料将被发送 -\n给你的联系人 +\n给您的联系人 资料和服务器连接 更新网络设置? 只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。 @@ -615,7 +615,7 @@ 已更新的群组资料 已删除 %1$s 您删除了 %1$s - 您的资料将被发送到收到您链接的联系人那里。 + 您的个人资料将发送给您收到此链接的联系人。 正在尝试连接到用于从该联系人接收消息的服务器(错误:%1$s)。 您已连接到用于接收该联系人消息的服务器。 您分享了一次性链接 @@ -644,4 +644,341 @@ 多个聊天资料 数据库不能正常工作。点击了解更多 消息传递错误 + %d 小时 + %d 小时 + %d 月 + %d 秒 + SimpleX 是如何工作的 + 确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。 + 许多人问:如果SimpleX没有用户标识符,它是怎样传递信息的? + 确保 SMP 服务器地址格式正确、每行分开且不重复。 + Markdown 帮助 + 标记为已验证 + 建立私密连接 + 以 %s 身份加入 + 如果您收到 SimpleX Chat 邀请链接,您可以在浏览器中打开它: + 标记为已读 + 标记为未读 + 在消息中使用 Markdown + 文件:%s + 成员将被移出群组——此操作无法撤消! + 消息草稿 + k + 标记为已删除 + %d 星期 + 您将停止接收来自该群组的消息。聊天记录将被保留。 + 成员 + 成员 + %d 星期 + %d 分钟 + %d 月 + 网络和服务器 + 网络设置 + 已被管理员移除 + Onion 主机将在可用时使用。 + 将不会使用 Onion 主机。 + 📱 手机:点击在手机应用程序中打开,然后在应用程序中点击连接 + 消息将被标记为删除。收件人将能够揭示此消息。 + 更多改进即将推出! + 未选择联系人 + 一次性邀请链接 + 关闭 + 连接需要 Onion 主机。 + Onion 主机将在可用时使用。 + 从不 + 已提供 %s + 已提供 %s:%2s + %s 中的新功能 + 一次性邀请链接 + 好的 + 没有细节 + (仅由群组成员存储) + 只有您可以发送语音消息。 + 消息将被删除——此操作无法撤消! + 一次只能发送10张图片 + 更多 + 新数据库存档 + 旧数据库存档 + 新成员角色 + 没有联系人可添加 + 网络状态 + 关闭 + 将不会使用 Onion 主机。 + 连接需要 Onion 主机。 + 没有收到或发送的文件 + 发送人已取消文件传输。 + 分享 + 发送实时消息 + 此文本在设置中可用 + 未读 + 保存的 WebRTC ICE 服务器将被删除。 + %s 已验证 + 用于新连接 + 使用直接互联网连接? + 必要 + 保存并通知联系人 + 保存并通知联系人 + 在我们的 GitHub 仓库中阅读更多内容。 + 拒绝 + 为了保护隐私,而不是所有其他平台使用的用户 ID,SimpleX 具有消息队列的标识符,每个联系人都是分开的。 + TCP 连接超时 + 收到,禁止 + 设定1天 + SimpleX Chat 安全性由 Trail of Bits 审核。 + 在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。 + 恢复数据库备份后请输入之前的密码。 此操作无法撤消。 + 请更新应用程序并联系开发者。 + 开源协议和代码——任何人都可以运行服务器。 + 粘贴 + PING 次数 + 禁止发送语音消息。 + PING 间隔 + 请检查您使用的链接是否正确,或者让您的联系人给您发送另一个链接。 + 协议超时 + 拒绝 + 回复 + 重置为默认 + 运行聊天程序 + 保存存档 + 扫码 + 从您联系人的应用程序中扫描安全码。 + 安全码 + 秘密 + 安全评估 + SimpleX 消息 + %s 未验证 + 感谢用户——通过 Weblate 做出贡献! + 第一个没有任何用户标识符的平台——专为隐私保护设计。 + 该小组是完全分散式的——它只对成员可见。 + 图像无法解码。 请尝试不同的图像或联系开发者。 + 主题 + 此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。 + 角色将更改为“%s”。 该成员将收到新的邀请。 + 此操作无法撤消——早于所选的发送和接收的消息将被删除。 这可能需要几分钟时间。 + 此二维码不是链接! + 此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。 + 此链接不是有效的连接链接! + 开始新的聊天 + 要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。 + 取消静音 + 更新 .onion 主机设置? + 更新传输隔离模式? + (从剪贴板扫描或粘贴) + 保护队列 + 揭示 + 打开 + 发送失败 + 未经授权发送 + 太多图片! + 待办的 + 切换接收地址吗? + 请让您的联系人启用发送语音消息。 + 录制语音消息 + 发消息 + 重置 + 发送 + 发送实时消息——它会在您键入时为收件人更新 + 开始新聊天 + (与您的联系人分享) + 通过链接连接 + 设置联系人姓名 + 您接受的连接将被取消! + 您与之共享此链接的联系人将无法连接! + 显示二维码 + 发送问题和想法 + 保护您的隐私和安全的消息传递和应用程序平台。 + 删去 + 人们只能通过您共享的链接与您建立联系。 + 下一代私密通讯软件 + 粘贴收到的链接 + 已跳过消息 + 支持 SIMPLEX CHAT + 发送链接预览 + SOCKS 代理 + 停止聊天程序? + 停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。 + 恢复数据库备份 + 恢复数据库备份? + 删除成员 + 发送私信 + 接收通过 + 发送通过 + 服务器 + 切换接收地址 + 保留最后的消息草稿及其附件。 + 私密文件名 + 感谢用户——通过 Weblate 做出贡献! + 传输隔离 + 将您收到的链接粘贴到下面的框中以与您的联系人联系。 + 分享邀请链接 + 此字符串不是连接链接! + 给我们发电子邮件 + SMP 服务器 + 尚不支持发送文件 + 正在尝试连接到用于从该联系人接收消息的服务器。 + 尚不支持接收文件 + 未知消息格式 + 测试服务器 + 测试服务器 + SimpleX 联系地址 + SimpleX 一次性邀请 + SimpleX 群组链接 + SimpleX 链接 + 发送人可能已删除连接请求。 + 预设服务器 + 二维码 + 传输隔离 + 分享链接 + 选择联系人 + 跳过邀请成员 + 转变 + 禁止发送语音消息。 + 只有您的联系人可以发送语音消息。 + 禁止直接向成员发送私信。 + 保护应用程序屏幕 + 主题 + 停止聊天以启用数据库操作。 + %s 秒 + 该群组已不存在。 + 点击加入 + 停止 + 重新启动应用程序以使用导入的聊天数据库。 + 所有者 + 已删除 + 角色 + + 恢复 + 重置颜色 + 保存颜色 + 减少电池使用量 + 为了保护时区,图像/语音文件使用 UTC。 + 使用聊天 + 在我们的 GitHub 存储库 中阅读更多内容。 + 打开聊天控制台 + Stop chat + 权限被拒绝! + 点击按钮 + 感谢您安装 SimpleX Chat + 使用相机 + 预设服务器地址 + 扫描服务器二维码 + 服务器测试失败! + 一些服务器未通过测试: + 在 GitHub 上加星 + 保存并通知群组成员 + 扬声器关闭 + 扬声器开启 + 已将您移除 + 更新设置会将客户端重新连接到所有服务器。 + 系统 + 对方会在您键入时看到更新。 + 查看安全码 + 语音消息 (%1$s) + 等待图像中 + 欢迎! + 欢迎 %1$s + 当您的联系人设备在线时,您将可以连接,请稍等或稍后查看! + 评价此应用程序 + 使用 SOCKS 代理? + 使用 SOCKS 代理(端口 9050) + %d 个文件,总大小为 %s + 您已加入此群组 + 您被邀请加入群组 + 默认(%s) + 此聊天中禁止语音消息。 + 语音信息在该群组中被禁用。 + 验证安全码 + 使用 SimpleX Chat 服务器。 + 通过 %1$s + 邀请至群组 %1$s + SimpleX 地址 + SimpleX 团队 + %1$s 成员 + + 您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 如果您以后删除它,您不会丢失您的联系人。 + 您可以控制通过哪些服务器接收消息,您的联系人 - 您用来向他们发送消息的服务器。 + 您的联系人可以从应用程序中扫描二维码。 + 您将在组主设备上线时连接到该群组,请稍等或稍后再检查! + 当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。 + 创建于 %1$s + 您可以 连接到 SimpleX Chat 开发者提出任何问题并接收更新 + 您已接受连接 + 您的 SMP 服务器 + %1$d 已跳过消息 + %ds + 更新内容 + 您被邀请加入群组 + 您没有聊天记录 + 等待图像中 + 语音消息 + 语音消息禁止发送! + 您需要允许您的联系人发送语音消息才能发送它们。 + 扫描二维码 + 您邀请了您的联系人 + 想要与您连接! + 您的联系人需要在线才能完成连接。 +\n您可以取消此连接并删除联系人(稍后尝试使用新链接)。 + SimpleX 标志 + 您的 SimpleX 联系地址 + 为终端安装 SimpleX Chat + 使用 SimpleX Chat 服务器? + 我们不会在服务器上存储您的任何联系人或消息(一旦发送)。 + WebRTC ICE 服务器 + 中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。 + 中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。 + 您的 ICE 服务器 + 视频关闭 + 您可以通过应用设置/数据库或重启应用开始聊天。 + 您将 %s 的角色更改为 %s + 您将自己的角色更改为 %s + 您已更改地址 + 您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。 + 间接(%1$s + 您也可以通过点击链接进行连接。 如果它在浏览器中打开,请单击在移动应用程序中打开按钮。 + SimpleX + 您将加入此链接指向的群组并连接到其群组成员。 + 通过群组链接 + 通过一次性链接 + 通过联系地址链接 + 通过浏览器 + 您的服务器 + 当可用时 + 使用 .onion 主机 + 您的 ICE 服务器 + simplexmq: v%s (%2s) + 欢迎消息 + 您的聊天由您掌控! + 您可以使用 markdown 来编排消息格式: + %dh + %d 天 + %dw + 您被邀请加入群组。 加入以与群组成员联系。 + 你加入了这个群组。连接到邀请组成员。 + 您更改了 %s 的地址 + 您已离开 + %1$d 已选择联系人 + 您允许 + 带有可选的欢迎消息。 + %dm + %dmth + 等待文件中 + 您的联系人发送的文件大于当前支持的最大大小 (<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"maxFileSize\">%1$s</xliff :g>). + 当您的连接请求被接受后,您将可以连接,请稍等或稍后检查! + 使用服务器 + 您的服务器地址 + 视频开启 + 最多 40 秒,立即收到。 + 验证连接安全 + 由 %s 审核 + 管理员移除 + 将为所有成员删除该消息。 + 该消息将对所有成员显示为已审核。 + 删除成员消息? + 观察者 + 您是观察者 + 更新群组链接错误 + 您无法发送消息! + 初始角色 + 请联系群组管理员。 + 系统 \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-zh-rTW/strings.xml b/apps/android/app/src/main/res/values-zh-rTW/strings.xml index 61b0068fd..3fb0959a6 100644 --- a/apps/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rTW/strings.xml @@ -6,7 +6,7 @@ 關於 SimpleX 接受 接受 - 1 天 + 1 日 1 個月 接受 關於 SimpleX Chat @@ -23,16 +23,16 @@ 顯示名稱: 全名: 使用更多電量!通知服務會長期在背景中運行 – 一但有訊息就會顯示在通知內。 - 對電池好。通知服務會每十分鐘檢查一次。你可能會錯過電話通話或訊息。 - 回應電話請求 + 對電量也不錯。通知服務會每十分鐘運行一次。你可能會錯過電話通話或訊息。 + 回應通話請求 清除 - 允許在群組內選擇成員後傳送訊息 + 允許在群組內選擇成員後傳送訊息。 %d 秒 已取消 %s 自動接受聯絡人請求 - 匿名者模式在這𥚃是不支援 - 你的真實帳號名稱會顯示於群組內 + 匿名聊天模式在這裡是不支援 - 你的個人檔案會顯示於群組內 不要 - 允許傳送自動銷毀的訊息 + 允許傳送自動銷毀的訊息。 無法初始化數據庫 一直開啟 關閉 SimpleX 鎖定 @@ -41,20 +41,20 @@ 回覆 分享 附件 - 和開發者對話 + 和開發人員對話 你的對話 - 分享檔案… + 分享檔案 … 分享訊息 取消圖片預覽 允許使用語音訊息? 取消 - 取消即時顯示訊息 + 取消實況訊息 新增新的聯絡人:新增新的聯絡人可以使用二維碼建立你的一次性二維碼。 掃描二維碼:連接到向你出示二維碼的聯絡人。 選擇檔案 使用相機 - 選擇來自圖片庫 - 接受匿名者的對話 + 從圖片庫選擇圖片 + 接受匿名聊天模式 所有訊息記錄會刪除 - 這不能還原!這些訊息只會在你裝置中刪除。 清除 要清除對話記錄? @@ -62,7 +62,7 @@ 清除 清除對話記錄 分享邀請連結 - 傳送問題和想法 + 傳送問題和想法給開發者 如何使用 使用終端機安裝 SimpleX Chat 應用程式版本 @@ -70,53 +70,53 @@ 程式建構:%s 應用程式版本:v%s 分享連結 - 自動化 - 你目前的帳號 + 自動接受所有請求 + 你目前的個人檔案 顯示的名稱字與字中間不能有空白。 儲存設定? 顯示名稱 全名(可選) - 通話有錯誤 - 打電話中… + 通話出現錯誤 + 正在撥打 … 通話中 私密 已連接 - 對電池最好。只有在應用程式運行時才收到通知,這樣背景就不會運行通知服務 - 端對端加密視像通話 - 視像通話(沒有端對端加密) - 通話已經結束了。 + 對電量最好。 只有在應用程式運行中的時侯才可以接收訊息,後台服務並不會使用。 + 端對端加密視訊通話 + 視訊通話(沒有端對端加密) + 通話已經結束了! 關閉語音 開啟語音 - 通話已經取消了。 + 通話已經取消了 通話中 開啟喇叭 通話 主題 語音通話(沒有端對端加密) 語音通話 - 語音 & 視像通話 - 視像通話 + 語音 & 視訊通話 + 視訊通話 粗體 - 圖片自動接受 - 備份資料數據 + 自動接收圖片 + 備份應用程式資料 應用程式圖示 已匯入對話資料庫 - Android Keystore 是用於安全地儲存密碼 - 確保通知服務的運作 + Android 金鑰庫是用於安全地儲存密碼 - 確保通知服務的運作 請注意:如果你忘記了密碼你將不能再次復原或更改密碼。 - 當你重新啟動應用程式或更改密碼後, Android Keystore 將會用來安全地儲存密碼 - 確保收到通知。 + 當你重新啟動應用程式或更改密碼後, Android 金鑰庫將會用來安全地儲存密碼 - 將會允許接到通知。 聊天室已停止運作 - 只有這個群組的創建人才能更改群組內的設定。 + 只有這個群組的負責人才能更改群組內的設定。 修改 - 加入新帳號 - 所有聊天室和聊天記錄會刪除 - 這不能還原! - 匿名者 + 加入新的個人檔案 + 所有對話和對話記錄會刪除 - 這不能還原! + 匿名聊天模式 經常 開啟 你的設定 允許你的聯絡人傳送語音訊息。 - 只能在你的聯絡人允許使用語言訊息的時候才能使用語音訊息。 + 只能在你的聯絡人允許使用語言訊息的時候,才能使用語音訊息。 你和你的聯絡人都可以傳送自動銷毀的訊息。 - 只有你能傳送可以自動銷毀的訊息。 + 只有你能傳送自動銷毀的訊息。 你和你的聯絡人都可以傳送語音訊息。 管理員可以建立可以加入群組的連結。 使用二維碼掃描並新增伺服器。 @@ -142,7 +142,7 @@ 關閉 自動銷毀訊息 - 群組內的會員可以傳送私人訊息。 + 群組內的成員可以私訊群組內的成員。 %d 分鐘 %d 月 通話結束 %1$s @@ -153,26 +153,26 @@ \n請注意:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。 一個單獨的 TCP 連接(和 SOCKS 憑證)將用於<b>每個聊天室的設定<b>。 返回 - 省電模式運行中,關閉了背景通知服務和新訊息的定期檢查。你可以在通知設定內重新啟用。 - 匿名者模式 + 省電模式運行中,關閉了背景通知服務和定期更新接收訊息。你可以在通知設定內重新啟用。 + 匿名聊天模式 預設 (%s) 群組設定 聯絡人設定 - 分享圖片… - 你和你的聯絡人都可以不可逆的刪除已經傳送的訊息 + 分享圖片 … + 你和你的聯絡人都可以不可逆地刪除已經傳送的訊息 已連接 簡介 完整連結 - 你可以通過設定關閉 - 當應用程式運行時,通知服務會仍然運行。 - 背景通知服務會一直運行 - 一但有新訊息就會顯示在通知。 - 程式只會在運行中的時候才會收到訊息的通知,不會在背景中運行通知服務。 + 你可以通過設定關閉 – 當應用程式運行時,通知服務仍然會運行。 + 通知服務會一直在後台中運行 - 一但接收到新訊息就會顯示於通知內。 + 應用程式只會在運行中的時候才會收到訊息的通知。 要求接收圖片 進階網路設定 - 將你的地址修改 - 更改地址中… - 更改地址中… + 已修改你的地址 + 更改地址中 … + 更改地址中 … 自動銷毀訊息 - 開始新對話 + 開始新對話/創建新群組 建立私密群組 建立一次性邀請連結 (分享給你的聯絡人) @@ -185,13 +185,13 @@ 檢查輸入的伺服器地址然後再試一次。 終端機對話 於 Github 給個星星 - 匿名者模式會保護你的真實帳號名稱和頭像 — 當有新聯絡人的時候會自動建立一個隨機性的名字。 + 匿名聊天模式會保護你的真實個人檔案名稱和頭像 — 當有新聯絡人的時候會自動建立一個隨機性的個人檔案 這樣就會每一個對話中也擁有不同的顯示名稱並且沒有任何的個人資料可用於分享或有機會外洩 - 要找到用於匿名連接的個人資料,請點擊上方的聯絡人或群組名稱。 - 只有在你的聯絡人允許的情況下才允許自動銷毀訊息。 + 若要查找用於匿名聊天模式連接的個人檔案,請點擊聯絡人或群組名稱。 + 只有你的聯絡人允許的情況下,才允許自動銷毀訊息。 允許你的聯絡人傳送自動銷毀的訊息。 - 只有在你的聯絡人允許的情況下,才允許將不可撤銷的訊息刪除。 - 允許你的聯絡人可以不可逆的刪除已發送的訊息。 + 只有你的聯絡人允許的情況下,才允許不可逆地將訊息刪除。 + 允許你的聯絡人可以不可逆地刪除已發送的訊息。 允許將不可撤銷的訊息刪除。 允許傳送語音訊息。 多久後刪除 @@ -200,98 +200,98 @@ 即時顯示訊息 SimpleX 群組連結 私人檔案名稱 - 傳送訊息時出錯 - 建立帳號失敗! - 你已經有一個帳號的顯示名稱和現在選擇建立的帳號名稱相同。請顯示其他名稱。 - 切換帳號失敗! - 在群組新增成員時出錯 + 加入成員(s) 時出錯 + 個人檔案建立失敗! + 你已經有一個個人檔案的顯示名稱和現在選擇建立的個人檔案名稱相同。請選擇其他名稱。 + 個人檔案切換失敗! + 加入群組時出錯 傳送者已取消傳送檔案。 接收檔案時出錯 建立地址時出錯 - 為了保護時區,圖片或語音文件使用 UTC。 + 為了保護私人檔案,圖片或語音文件使用 UTC。 目前還不支援傳送檔案 - 目前還不技援接收檔案 + 目前還不支援接收檔案 未知的訊息格式 無效的訊息格式 - 直播 + 實況 無效聊天 無效數據 連接 %1$d 已建立連線 邀請連線 - 連接中… - 你建立了一次性的連接連結 - 你建立了使用匿名者模式的一次性連接連結 - SimpleX 聯絡人連結 + 連接中 … + 你分享了一個一次性連結 + 你分享了一個匿名聊天模式的一次性連結 + SimpleX 聯絡人地址 SimpleX 一次性連結 SimpleX 連結 通過 %1$s 通過瀏覽器 - 請使用 %1$s 檢查你的網路連線並且再試一次。 + 傳送訊息時出錯 聯絡人已存在 你已經連接到 %1$s! - 通過帳號文件(默認)或通過連接(測試版)。 + 使用個人檔案(預設值)或使用連接(測試版)。 減少電量使用 更多功能即將推出! 意大利語言界面 感謝用戶 - 使用 Weblate 的翻譯貢獻! SimpleX k - 使用連結連接聯絡人 \? - 通過邀請的 - 通過使用邀請連結連接 \? - 你的個人資料將發送給你收到此連結的聯絡人。 + 透過連結連接聯絡人? + 透過邀請連結連接? + 通過邀請連結連接群組? + 你的個人檔案將會傳送給你收到此連結的聯絡人 你將會加入此連結內的群組並且連接到此群組成為群組內的成員。 連接 錯誤 連接中 - 你已連線到用於接收來自此聯絡人的訊息伺服器。 - 正在嘗試連接到這聯絡人接收的訊息伺服器 (錯誤: %1$s). - 正在嘗試連接到這聯絡人接收的訊息伺服器。 + 你已連接到此聯絡人使用的伺服器以接收訊息。 + 嘗試連接至用於接收此聯絡人訊息的伺服器 (錯誤:%1$s). + 正在嘗試連接到用於接收此聯絡人訊息伺服器。 已刪除 已標記為刪除 - 在瀏覽器中開啟連結可能會降低私隱和安全性。不受 SimpleX 信任的連結會顯示紅色。 + 在瀏覽器中開啟連結可能會有私隱疑慮和不確定性。不受 SimpleX 信任的連結會顯示紅色。 儲存 SMP 伺服器時出錯 - 請確保 SMP 伺服器連結格式正確,行分隔且不重複。 + 請確保 SMP 伺服器連結格式正確,隔行顯示且不重複。 更新網路配置時出錯 聯絡人載入失敗 多個聯絡人載入失敗 - 請更新應用程式或聯絡開發者。 + 請更新應用程式或聯絡開發人員。 連線超時 連線失敗 - 請檢查你的網路 + 請使用 %1$s 檢查你的網路連線並且再試一次。 連接 定期通知已禁用! 需要使用密碼 只顯示聯絡人名稱 - 裝置內的螢幕鎖定已關閉。已關閉 SimpleX 鎖定。 + 裝置內的螢幕鎖定已關閉。正在關閉 SimpleX 鎖定。 儲存 太多圖片! - 儲存檣案的時候有錯誤 + 儲存檔案的時候出現錯誤 有新的聯絡人連線請求 - 登入以使用憑據 + 確認你的憑據 隱藏 - 檔案已儲存 - 無效連線連結 + 已儲存檔案 + 無效的連線連結 傳送者似乎已經刪除了連接的請求。 刪除聯絡人時出錯 刪除群組時出錯 刪除聯絡人 測試在步驟 %s 失敗。 - 伺服器需要投權才能建立佇列,請檢查密碼 + 伺服器需要授權才能建立佇列,請檢查密碼 伺服器地址的憑證指紋可能不正確 即時收到通知 - 即時收到通知! - 即時收到通知已禁用! + 即時通知! + 已禁用即時收到通知! 數據庫目前沒有正常運作。點擊查看更多 - SimpleX Chat 電話 + SimpleX Chat 電話來電 通知服務 顯示預覽 通知預覽 - 如果你解鎖程式後三十秒後再次啟動或返回應用程式,你將需要進行多一次解鎖程式 + 如果你解鎖程式三十秒後再次啟動或返回應用程式,你會需要進行多一次解鎖程式。 已解鎖 - 登入 + 使用你的憑據登入 使用終端機開啟對話 傳送訊息有錯誤 大概你的聯絡人已經刪除了和你的對話並且已經沒有和你有連線。 @@ -303,100 +303,100 @@ 傳送失敗 歡迎 %1$s 歡迎! - 這文字在設定中可用 - 連接中… + 在設定中可用這文字 + 連接中 … 你被邀請加入至群組 加入為 %s - 連接中… + 連接中 … 點擊開始新對話 - 檔案找不到 + 找不到檔案 語音訊息 (%1$s) - 語音訊息… + 語音訊息 … 錄製語音訊息 - 你需要允許你的聯絡人傳送語音訊息才能使他們可以傳送給你。 + 你需要在設定上開放權限允許你的聯絡人傳送語音訊息。 禁止語音訊息! - 請詢問你的聯絡人啟用語音訊息 - 只有群組的創建人才能啟用語音訊息 + 請你的聯絡人開放權限允許你傳送語音訊息 + 只有群組的負責人才能啟用語音訊息 傳送 - 請確定你使用了正確的連結或者叫你的聯絡人傳送一個新的連結給你。 + 請你確認使用的是正確的連結,或者請你的聯絡人傳送一個新的連結給你。 連接錯誤 (AUTH) - 除非你的聯絡人刪除了連結或此連結已經被使用,否則它可能是一個錯誤 - 請匯報問題。 -\n要連線,請詢問你的聯絡人建立新的連結和確保你的網路是隱定的。 - 接受聯絡人的連接時出錯 - 刪除聯絡人請求時出錯 + 除非你的聯絡人刪除了連結或此連結已經被使用,否則它可能是一個錯誤 - 請報告問題。 +\n要連線,請詢問你的聯絡人建立新的連結和確保你的網路是穩定的。 + 接受聯絡人的連接請求時出錯 + 刪除待處理的聊絡人連接時出錯 更改地址時出錯 建立佇列 安全佇列 刪除佇列 斷開連接 - 為了使用它,請 禁用電量優化 SimpleX 在下一個對話中。否則,通知將會禁用。 - 在接收通知之前,請你確入數據庫的密碼 + 為了使用它,請 禁用電量優化 為了 SimpleX 在下一個對話中。否則,將會禁用通知。 + 在接收通知之前,請你輸入數據庫的密碼 應用程式會定期推送新訊息 — 它每天會消耗百分之幾的電量。 應用程式將不使用推送通知 — 你裝置中的數據不會傳送至伺服器。 SimpleX Chat 服務 - 正在接收訊息… + 正在接收訊息 … 隱藏 SimpleX Chat 訊息 當應用程式是開啟 定期啟用 顯示聯絡人名稱和訊息內容 隱藏聯絡人名稱和訊息內容 - 聯絡人隱藏: + 隱藏聯絡人: 有新訊息 已連線 SimpleX 鎖定 為了保護你的個人訊息,開啟 SimpleX 鎖定。 -\n在啟用此功能之前,系統將提示您完成螢幕鎖定。 +\n在啟用此功能之前,系統將提示你完成螢幕鎖定的功能。 打開 SimpleX 鎖定已開啟 - 你的裝置沒有啟動螢幕鎖定。您可以通過設定內啟動螢幕鎖定,當你啟動後就可以使用 SimpleX 鎖定 + 你的裝置沒有啟動螢幕鎖定。你可以通過設定內啟動螢幕鎖定,當你啟動後就可以使用 SimpleX 鎖定。 修改 刪除 - 透露 + 展露 確定要刪除訊息? - 訊息會刪除 - 並且不能撤消! - 訊息將被標記為刪除。 接收訊息的人(多個) 能夠透露此訊息。 - 未讀取 + 訊息會刪除 - 並且不能還原! + 訊息將被標記為刪除。 接收訊息的人(多個) 能夠展露此訊息。 + 未讀 你沒有聯絡人 解碼錯誤 - 你的的聯絡人傳送的檔案大於目前支持的最大大小 (%1$s). + 你的聯絡人傳送的檔案大於目前支持的最大上限 (%1$s). 只能同一時間傳送十張圖片 - 目前支援的最大檣案大小為 %1$s - 下載檔案需要傳送者上線的時候才能下載檣案,請等待對方上線! + 目前支援的最大檔案大小為 %1$s + 下載檔案需要傳送者上線的時候才能下載檔案,請等待對方上線! 語音訊息 - 傳送即時顯示的訊息 - 即時顯示的訊息! - 傳送即時顯示的訊息 - 這會即時顯示你在輸入中的文字 + 傳送實況的訊息 + 實況訊息! + 傳送實況訊息 - 這會即時顯示你在輸入中的文字 (掃描或使用剪貼薄貼上) - 沒有權限 - 為了保護你的私隱,即時推送通知沒有使用 <b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\"><xliff:g id=\"appName\">SimpleX</xliff:g> 後台通知 - 它每天會使用你電量的百分之幾。 + 權限拒絕! + 為了保護你的私隱,<b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">SimpleX</xliff:g> 有一個後台通知服務 – 它每天使用你幾 % 的電量。 定期通知 - 每十分鐘會檢查一次訊息,最多一分鐘 + 每十分鐘會檢查一次訊息,最快可設為每分鐘檢查一次 訊息文字 聯絡人名稱 隱藏 圖片 等待圖片 - 圖片已傳送 + 已傳送圖片 等待圖片 下載圖片需要傳送者上線的時候才能下載圖片,請等待對方上線! 圖片已儲存至圖片庫 通知 - 刪除聯給人? + 刪除聯絡人? 此聯絡人和此聯絡人的訊息會全部刪除 - 這不能還原! 刪除聯絡人 - 設置聯絡人名稱… + 設置聯絡人名稱 … 已連接 已斷開連接 錯誤 待處理 - 切換接收位置? + 切換接收地址? 此功能目前還是實驗階段! 對方需要使用 4.2 版本或更高的版本才能成功生效。 地址更改後,你會在對話中看到新訊息 - 請測試你更改地址後是否仍然能夠收到來自這聯絡人(或群組內的成員)的訊息。 查看安全碼 驗證安全碼 傳送訊息 - 刪除帳號時出現錯誤 + 刪除個人檔案時出現錯誤 停止對話 - 圖片不能解碼,嘗試其他圖片或聯絡開發者。 + 圖片不能解碼,嘗試其他圖片或聯絡開發人員。 檔案 大型檔案 等待檔案中 @@ -406,12 +406,12 @@ 沒有詳細資料 一次性邀請連結 已複製至你的剪貼薄 - 使用連結連接 / 使用二維碼 + 使用連結連接 / 使用二維碼連接 掃描二維碼 - (僅由群組成員存儲) + (僅由群組成員儲存) 想和你對話! SimpleX 徽標 - 通過使用連結連接 + 透過連結連接 預設伺服器 你的伺服器位址 刪除伺服器 @@ -419,15 +419,15 @@ ICE 伺服器(每行一個) 使用 .onion 主機 Onion 主機不會啟用 - 當有的時候,Onion 將會啟用。 + 當有的時候 Onion 將會啟用。 Onion 主機不會被啟用。 連接 - 刪除址址 + 刪除地址 顏色 如何使用你的伺服器 核心建立於:%s 使用連結連接 - 💻 桌面版:於程式內掃描一個已存在的二維碼,通過使用二維碼掃描。 + 💻 桌面版:於應用程式內掃描一個已存在的二維碼,透過二維碼掃描。 設定 這個二維碼不是一個連結! 建立一次性邀請連結 @@ -440,7 +440,7 @@ 編輯圖片 斜體 已拒絕收聽電話 - 連接收聽電話 … + 連接電話中 … 等待對方確定 … 貢獻 評價程式 @@ -452,9 +452,9 @@ 刪除圖片 開始中 … 等待對方回應 … - 如果你收到 <xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"appName\">SimepleX Chat 邀請連結,你可以使用瀏覧器開啟 + 如果你收到 <xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"appName\">SimepleX Chat 邀請連結,你可以使用瀏覧器開啟: 📱 電話版: 點擊 使用電話程式開啟, 然後在程式內點擊 連接. - 如果您選擇拒絕傳送者將不會收到通知。 + 如果你選擇拒絕,傳送者將不會收到通知。 拒絕 刪除 刪除 @@ -463,7 +463,7 @@ 你的聯絡人需要上線才能連接成功。 \n你可以取消此連線和刪除此聯絡人(或者你可以稍後使用新的連結再試一次)。 二維碼 - 個人檣案頭像 + 個人檔案頭像 預覧連結圖片 SimpleX 地址 幫助 @@ -475,22 +475,23 @@ 無效連結! 這個連結不是一個有效的連接連結! 連線請求已傳送 - 當群組的建立人上線的時侯便會成功連接至群組,請耐心等待! - 當你的連接請求已被接受的時候便會連接成功,請耐心等待! - 當你的聯絡人上線後便會連線成功,請耐心等待! - 如果你沒有聯絡人,於視像對話內出示你的二維碼,或者分享連結。 - 你的個人檔案會傳送結你的聯絡人! - 將你收到的連結貼上至下面的框內以與你的聯絡人對話。 - 如果你沒有聯絡人,你可以於 視像對話中掃描二維碼,或者你可以分享一個邀請連結給你的聯絡人。 + 當群組的建立人上線,你便會成功連接至群組,請耐心等待! + 當你的連接請求已被接受,你便會連接成功,請耐心等待! + 當你的聯絡人上線,你便會連線成功,請耐心等待! + 如果你不能面對面接觸此聯絡人,可於視訊通話中出示你的二維碼,或者分享連結。 + 你的個人檔案會傳送給 +\n你的聯絡人 + 將你收到的連結貼上至下面的框內以開展你與你的聯絡人對話。 + 如果你不能面對面接觸此聯絡人,你可以於 視訊對話中掃描二維碼,或者你可以分享一個邀請連結給此聯絡人。 你的個人檔案會傳送給你的聯絡人。 貼上 這些字串不是連接連結! - 你也可以點擊連結連接。如果連線於瀏覧器中開啟,點擊 於程式內開啟 按扭。 + 你也可以點擊連結連接。如果在瀏覧器中開啟,點擊 程式內的開啟 按扭。 一次性邀請連結 你的聯絡人地址 掃描二碼碼 錯誤的安全碼! - 於你的聯絡人的程式內掃描安全碼 + 在你聯絡人的程式內掃描安全碼 安全碼 Markdown 幫助 於訊息中使用 Markdown 語法 @@ -498,10 +499,10 @@ 使用伺服器 用於新的連接 無效的伺服器地址 - 此伺服器用於你目前的帳號 + 此伺服器用於你目前的個人檔案 使用 SimpleX Chat 伺服器? 你的 SMP 伺服器 - 目前使用中 SimpleX Chat 伺服器。 + 目前使用 SimpleX Chat 伺服器。 如何? 配置 ICE 伺服器 已儲存的 WebRTC ICE 伺服器將會移除。 @@ -526,33 +527,33 @@ 你錯過了電話 收到回應 … 連接中 … - 完結 - 你的聯絡人可以使用二維碼在此程式 + 通話完結 + 你的聯絡人可以在程式內使用二維碼 連接 網路 & 伺服器 網路設定 使用 SOCKS 代理伺服器 (端口 9050) 使用 SOCKS 代理伺服器 儲存並通知群組內的聯絡人 - 退出並且不儲存 - 對話由你控制! - 一個保護你的隱私和傳送安全的通訊應用程式平台。 + 退出並且不儲存紀錄 + 你的對話由你控制! + 一個保護你的隱私和傳送安全通訊的應用程式平台。 我們不會在伺服器內儲存你的任何聯絡人和消息(一旦傳送)。 - 建立帳號 + 建立個人檔案 回應已確認 - 您可以透過 連接到 SimpleX Chat 開發人員提出任何問題並接收更新 + 你可以透過 連接到 SimpleX Chat 開發人員提出任何問題並同意更新 開始新的對話 - 設定聯聯人名稱 + 設定聯絡人名稱 你已邀請了你的聯絡人 你接受了連接 刪除等待中的連接? - 當聯絡人發現此連結後,嘗試點擊的聯絡人將無法連結! + 當聯絡人發現此連結後,嘗試點擊的聯絡人將無法連線! 你所接受的連接將會被取消! 你的聯絡人現在還沒連接! 關閉按鈕 已標記為已驗證 - 清除驗認 - 如要和你的聯絡人驗認端對端加密,於對方的程式內掃描二維碼。 + 清除驗證 + 如果要和你的聯絡人驗認端對端加密,在對方的程式內掃描二維碼。 %s 已驗證 %s 並未驗證 你的 SimpleX 聯絡地址 @@ -571,4 +572,415 @@ 你的伺服器 連接時將會需要使用 Onion 主機 對話檔案 + 透過群組連結 + 透過群組連結使用匿名聊天模式 + 一個使用了匿名聊天模式的人透過連結加入了群組。 + 透過使用一次性連結匿名聊天模式連線 + 有很多人問: +\nxmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">如果 <xliff:g id=\"appName\">SimpleX</xliff:g> 沒有任何的用戶標識符,應如何傳送訊息?</i> + 即時 + 定期的 + 關閉 + 你錯過此通話 + 開啟 + 開啟 +\n +\nSimpleX Chat 以接受通話 + 已拒絕通話 + 顯示 + 連線通話中 + 檔案及媒體檔案 + 重新啟動應用程式以建立新的個人檔案。 + 刪除所有檔案及媒體檔案? + 刪除所有你的個人檔案及媒體檔案 + %d 檔案(s) 的總共大小為 %s + 訊息 + 永不 + 沒有收到或傳送的檔案 + 目前的密碼 … + 加密 + 修改設定時出錯 + 通知服務只會在應用程式關閉前才會傳送 + 移除 + 要從金鑰庫移除密碼? + 確定新密碼 … + 新密碼 … + 點擊加入 + 點擊以使用匿名聊天模式加入 + %s 的身份已更改為 %s + 已經邀請 %1$s + 已更改你的身份為 %s + 連線中 (已接受) + 退出 + 負責人 + 已移除 + 完成 + 連線中 + 創建人 + 新成員的身份 + %1$s 位成員 + 修改群組內的設定 + 建立群組連結 + 建立連結 + 確定要刪除連結? + 移除成員 + 成員的身份會修改為 \"%s\". 所有在群組內的成員都會收到通知 + 成員的身份會修改為 \"%s\". 該成員將收到新的邀請 + 網路狀態 + 重置為預設值 + 當你與某人分享已啟用匿名聊天模式的個人檔案時,此個人檔案將用於他們邀請你參加的群組。 + 黑暗 + 為所有人刪除 + 語音訊息 + 提供 %s: %2s + 安全性評估 + SimpleX Chat 的安全性由 Trail of Bits 審核。 + 群組連結 + 多個個人檔案 + 不同的名稱、頭像和傳輸隔離。 + 訊息草稿 + 保留最後一則帶附件的訊息草稿。 + 傳輸隔離 + 匯入對話資料庫? + 請放置你的密碼於安全的地方,如果你遺失了密碼將不可能再次存取它。 + 鎖匙鏈錯誤 + 沒有聯絡人可選擇 + 群組連結 + 刪除連結 + 群組是完全去中心化的 - 只有群組內的成員能看到。 + 禁止傳送自動銷毀的訊息。 + %d 個小時 + 新功能 + 帶有可選即時性的訊息 + 刪除數據庫時出現錯誤 + 匯入 + %s 秒(s) + 加密數據庫時出錯 + 於金鑰庫儲存密碼 + 建立於 %1$s + 還原數據庫的備份 + 群組為不活躍狀態 + 邀請連結過時! + 刪除群組? + 群組會於所有成員刪除 - 這不能還原! + 群組只會為你刪除 - 這不能還原! + 你可以分享連結或二維碼 - 任何人也可以加入至此群組內。直到你刪除群組前你也不會失去遺失群組。 + 你的個人檔案會傳送給群組內的成員。 + 儲存群組檔案 + 語音訊息於這個聊天窒是禁止的。 + 允許你的聯絡人可以完全刪除訊息 + 第一個沒有任何用戶識別符的通訊平台 – 以私隱為設計 + 新一代的私人訊息平台 + 去中心化的 + 人們只能在你分享了連結後,才能和你連接。 + 重新定義私隱 + 建立你的個人檔案 + 這是如何運作 + 你可以之後透過設定修改。 + 私下連接 + 開放源碼協議和程式碼 – 任何人也可以運行伺服器。 + 無視 + 語音通話來電 + 貼上你收到的連結 + 已經端對端加密 + 沒有端對端加密 + 關閉喇叭 + 訊息 + 私隱 & 安全性 + 主題 + 法國語言界面 + 已經完成端對端加密的語音通話 + 拒絕 + 錯誤的訊息 ID + 重覆的訊息 + 保護應用程式螢幕 + 傳送可以預覽的連結 + 開發 + 裝置 + 幫助 + 設定 + 幫助 SIMPLEX CHAT + 對話 + 開發者工具 + SOCKS 代理伺服器 + 重新啟動應用程式以匯入對話數據庫 + 刪除所有檔案 + 啟用自動銷毀訊息? + 刪除訊息 + 於多久後刪除訊息 + 請輸入正確的密碼。 + 已受加密的數據庫密碼是使用隨機性的文字,你可以修改它。 + 數據庫將會加密。 + 數據庫將會加密並且密碼會儲存於金鑰庫。 + 數據庫錯誤 + 不能讀取金鑰庫以儲存資料庫密碼 + 錯誤:%s + 檔案:%s + 需要數據庫的密碼以開啟對話。 + 輸入密碼 … + 輸入正確的密碼。 + 開啟對話 + 儲存密碼和開啟對話 + 你未完成更改數據庫密碼的程序 + 密碼不存在於金鑰庫,請手動輸入它,有這種情況你可能是使用了備份用的工具。如果不是請聯絡開發人員。 + 還原 + 還原數據庫的備份? + 還原數據庫時出錯 + 儲存存檔 + 刪除封存 + 加入 + 確定要加入群組? + 加入匿名聊天模式 + 加入群組中 + 群組的邀請連結無效,這連結已經被群組管理人刪除。 + 群組邀請連結已經過時 + 移除了你 + 沒有聯絡人可以新增 + 選擇聯絡人 + 跳過邀請成員 + 邀請至群組 + 邀請成員 + 你正在嘗試邀請一位與你分享了匿名聊天模式的聯絡人進入至你正在使用真實的個人檔案聊天模式的群組中 + 建立群組邀請連結時出錯 + 刪除群組邀請連結時出錯 + 為終端機 + 本機名稱 + 數據庫 ID + 身份 + 傳送私人訊息 + 成員將會被移除於此群組 - 這不能還原! + 移除 + 成員 + 修改身份 + 切換 + 修改這位成員的身份? + 切換接收訊息的伺服器 + 群組的檔案只會儲存於成員內的本機裝置,不會儲存於伺服器內。 + + TCP 連線超時 + 協議超時 + PING 的間隔時間 + PING 的次數 + 啟用 TCP keep-alive + 儲存 + 更新網路設定? + 更新 + 你的個人檔案只會儲存於你的本機裝置內。 + 更新設定會將客戶端重新連接到所有的伺服器。 + 刪除個人檔案? + 刪除個人檔案 + 檔案和伺服器連接 + 只有本機檔案 + 你的隨機個人檔案 + 隨機的個人檔案將會傳送給你的聯絡人。 + 系統 + 明亮 + 重設顏色 + 關閉 + 已接收,已禁止 + 設定為一日 + 聯絡人可以標記訊息為已刪除;你可以看到 + 禁止傳送語音訊息 + 只有你的聯絡人可以傳送自動銷毀的訊息 + 自動銷毀訊息已被禁止於此聊天室。 + 此聊天室禁止不可逆的訊息刪除。 + 只有你可以傳送語音訊息。 + 私訊群組內的成員於這個群組內是禁用的。 + 群組內的成員可以不可逆地刪除訊息。 + 語音訊息 + 改善伺服器配置 + 當你切換至最近應用程式版面時,程式畫面會自動隱藏,無法預覽。 + 運行對話 + 數據庫密碼 + 匯出數據庫 + 匯入資料庫 + 新的數據庫存檔 + 舊的數據庫存檔 + 刪除數據庫 + 開始新對話時出錯 + 停止對話? + 設定密碼以匯出 + 停止對話時出現錯誤 + 已受加密的數據庫是使用一個隨機性的文字。請在修改前將它匯出。 + 匯出數據庫時出現錯誤 + 匯入數據庫時出現錯誤 + 受加密的數據庫密碼會再次更新。 + 刪除封存對話? + 加密數據庫? + 邀請至群組 %1$s + 邀請成員 + 群組找不到! + 已移除 +\n<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"member profile\" example=\"alice (Alice)\"> + 已刪除群組 + 群組已經刪除 + 已經邀請 + 已經透過連結邀請了你進群組 + 聯絡人允許 + %ds + 私人通知 + GitHub \u0020查看更多。 + 於 GitHub 查看更多 + 視訊通話來電 + 掛斷電話來電 + 點對點 + 對話已經過端對端加密 + 對話沒有經過端對端加密 + 數據庫已加密! + 已加密數據庫 + 對話封存 + 群組資料已經更新 + 成員 + 你:%1$s + 刪除群組 + 即時訊息 + 對話封存 + 移除成員時出現錯誤 + 修改身份時出現錯誤 + 群組 + 連線 + 直接 + 間接 (%1$s) + 伺服器 + 接收訊息透過 + 傳送訊息透過 + 隨機的個人檔案將傳送給收到此連結的聯絡人 + 禁止傳送自動銷毀的訊息。 + 禁止不可逆的訊息刪除。 + 禁止傳送語音訊息。 + 群組內的成員可以傳送自動銷毀的訊息。 + 自動銷毀訊息於這個群組內是禁用的。 + 提供 %s + 儲存群組檔案時有錯誤 + 恢復 + 主題 + 儲存顏色 + 你允許 + 修改群組內的設定 + 私訊 + 已啟用 + 已為你啟用 + 已為聯絡人啟用 + 只有你能不可逆地刪除訊息(你的聯絡人可以將它標記為刪除) + 只有你的聊絡人可以不可逆的刪除訊息(你可以將它標記為刪除) + 只有你的聯絡人可以傳送語音訊息。 + 禁止私訊群組內的成員。 + 不可逆地刪除訊息於這個群組內是禁用的。 + 群組內的成員可以傳送語音訊息。 + 語音訊息於這個群組內是禁用的。 + %d 個月 + %dm + %dmth + %d 小時 + %dh + %d 日 + %d 天 + %dd + %d 星期 + %d 個星期 + %dw + 新的更新 %s + 最多四十秒後刪除,接收人立即收到。 + 不可逆地刪除訊息 + 增強隱私和安全性 + 已傳送的訊息將在設定的時間後被刪除。 + 當你輸入訊息時侯,對方將可以即時看到你輸入的內容。 + 驗證連線安全性。 + 驗證你與聯絡人的安全碼。 + 感謝用戶 - 使用 Weblate 的翻譯貢獻! + 正在更改地址為 %s … + 受加密的數據庫密碼會再次更新和儲存於金鑰庫。 + SimpleX 是怎樣運作 + 當發生: +\n1. 如果三十天內沒有收到訊息,那麼這些訊息將會在伺服器內過時。 +\n2. 你用來接收該聯絡人的訊息伺服器已更新並且重新啟動。 +\n3. 連接受到影響或被破壞。 +\n請透過設定列尋找開發人員並且報告你的伺服器問題。 +\n我們將會新增重複的伺服器以防止遺失伺服器。 + 只有對方的裝置才會儲存你的個人檔案,聯絡人,群組,所有訊息都會經過兩層的端對端加密 + 請放置你的密碼於安全的地方,如果你遺失了密碼,將不可能更改你的密碼。 + 停止聊天室以匯出對話,匯入或刪除對話存檔。當聊天室停止後你將不能接收或傳送訊息。 + 你正在使用匿名聊天模式進入此群組,為了避免分享你的真實個人檔案,邀請聯絡人是不允許的。 + 你傳送了一個群組連結 + 你移除了 %1$s + 你退出了群組 + 你修改了地址為 %s + 連線中(邀請介紹階段) + 你目前的對話數據庫會刪除並且以你匯入的對話數據庫頂替上。 +\n這操作不能還原 - 你現有的個人檔案,聯絡人,訊息和檔案將會不可逆地遺失。 + 透過聯絡人的邀請連結連線 + 透過一次性連結連線 + 傳輸隔離 + 更新傳輸隔離模式? + 為了保護隱私,而不像是其他平台般需要提取和存儲用戶的 ID資料,SimpleX 本平台具有SimpleX自家隊列的標識符,對於你的每個聯絡人也是獨一無二的。 + 當應用程式是開啟 + 你可以控制通過哪一個伺服器 來接收 你的聯絡人訊息 – 這些伺服器用來接收他們傳送給你的訊息。 + 透過設定啟用於上鎖畫面顯示來電通知 + 這操作不能還原 - 你現有的個人檔案,聯絡人,訊息和檔案將會不可逆地的失去。 + 你必須在裝置上使用最新版本的對話數據庫,否則你可能會停止接收某些聯絡人的訊息。 + 這操作不能還原 - 所有已經接收和傳送的檔案和媒體檔案將會刪除。低解析度圖片將保留。 + 這設置適用於你當前的個人檔案 + 這操作無法撤銷 - 早於所選時間的發送和接收的訊息將被刪除。可能需要幾分鐘的時間。 + 更新數據庫密碼 + 當每次啟動應用程式後你會需要輸入密碼 - 這不是儲存於你的個人裝置上。 + 你已經被邀請至群組 + 你將停止接收來自此群組的訊息。群組內的記錄會保留。 + 你已拒絕加入群組 + 連線中(宣布階段) + %1$s 已選擇多個聊絡人 + 你的 ICE 伺服器 + WebRTC ICE 伺服器 + 更新 + 添加更多身份選項 + 聯絡人頭像 + 個人資料頭像占位符 + 不受垃圾郵件和濫用行為影響 + %1$s 希望透過以下方式聯絡你 + 開啟視訊 + 翻轉相機 + 待確認通話 + 你的私隱 + 你的通話 + 經由分程傳遞連接 + 在上鎖畫面顯示來電通知: + %1$d 你錯過了多個訊息 + 錯誤訊息雜湊值 + 你錯過了多個訊息 + + 實驗性功能 + 你對話的數據庫並未加受加密 - 設置密碼保護它。 + 資料庫密碼與保存在金鑰庫中的密碼不同。 + 不明的錯誤 + 還原數據庫備份後請輸入舊密碼。這個操作是不能撤銷的! + 你可以透過應用程式的設置或重新啟動應用程式來開始新的對話。 + 你已經被邀请加入至群組。加入後可與群組內的成員對話。 + 你已加入至群組 + 已確認聯絡人 + 你的對話數據庫 + 刪除個人檔案? + 錯誤的數據庫密碼 + 未知的數據庫錯誤:%s + 密碼錯誤! + 你已經加入至群組。正在連線至群組內的成員。 + 這群組已經不存在。 + 更新群組檔案 + 你修改了 %s 的身份為 %s + 連線中(介紹階段) + 使用對話 + 透過轉送 + 關閉視訊 + 你修改了自己的身份為 %s + 你修改了地址 + 由 %s 管理 + 將為所有成員刪除該消息。 + 刪除成員消息? + 主持 + 該消息將對所有成員標記為已審核。 + 您不能發送消息! + 您是觀察者 + 觀察者 + 更新群組鏈接時出錯 + 請聯繫群管理員。 + 初始角色 + 系統 \ No newline at end of file diff --git a/apps/android/app/src/main/res/values/colors.xml b/apps/android/app/src/main/res/values/colors.xml index 2e02f493b..1833a6d9a 100644 --- a/apps/android/app/src/main/res/values/colors.xml +++ b/apps/android/app/src/main/res/values/colors.xml @@ -2,4 +2,5 @@ #FF000000 #FFFFFFFF + #121212 \ No newline at end of file diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index 17b37d9cd..1e0564e74 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -103,6 +103,7 @@ Delete queue Disconnect Error deleting user profile + Error updating user privacy Instant notifications @@ -459,6 +460,7 @@ Check server address and try again. Delete server The servers for new connections of your current chat profile + Save servers? Install SimpleX Chat for terminal Star on GitHub Contribute @@ -535,6 +537,16 @@ Save and notify group members Exit without saving + + + Hide profile + Password to show + Save profile password + Hidden profile password + Confirm password + To reveal your hidden profile, enter a full password into a search field in "Your chat profiles" page. + Error saving user password + You control your chat! The messaging and application platform protecting your privacy and security. @@ -631,13 +643,15 @@ Audio & video calls Your calls - Connect via relay + Always use relay Calls on lock screen: Accept Show Disable Your ICE servers WebRTC ICE servers + Relay server protects your IP address, but it can observe the duration of the call. + Relay server is only used if necessary. Another party can observe your IP address. Open SimpleX Chat to accept call @@ -696,6 +710,7 @@ Developer tools Experimental features SOCKS PROXY + LANGUAGE APP ICON THEMES MESSAGES @@ -921,6 +936,8 @@ Group will be deleted for you - this cannot be undone! Leave group Edit group profile + Add welcome message + Welcome message Group link Create group link Create link @@ -958,6 +975,11 @@ direct indirect (%1$s) + + Welcome message + Save welcome message? + Save and update group profile + SERVERS Receiving via @@ -1001,6 +1023,20 @@ Delete chat profile for Profile and server connections Local profile data only + Hide + Unhide + Mute + Unmute + Enter password above to show! + Tap to activate profile. + Can\'t delete user profile! + There should be at least one visible user profile. + There should be at least one user profile. + Make profile private! + You can hide or mute a user profile - hold it for the menu.\nSimpleX Lock must be enabled. + Don\'t show again + Muted when inactive! + You will still receive calls and notifications from muted profiles when they are active. Incognito @@ -1018,6 +1054,9 @@ Light Dark + + System + Theme Save color @@ -1144,4 +1183,16 @@ More improvements are coming soon! Italian interface Thanks to the users – contribute via Weblate! + Hidden chat profiles + Protect your chat profiles with a password! + Audio and video calls + Support bluetooth and other improvements. + Group moderation + Now admins can:\n- delete members\' messages.\n- disable members (\"observer\" role) + Group welcome message + Set the message shown to new members! + Further reduced battery usage + More improvements are coming soon! + Chinese and Spanish interface + Thanks to the users – contribute via Weblate! diff --git a/apps/android/app/src/main/res/xml/locales_config.xml b/apps/android/app/src/main/res/xml/locales_config.xml new file mode 100644 index 000000000..22fe04d1e --- /dev/null +++ b/apps/android/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/120.png b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/120.png new file mode 100644 index 000000000..9cbe08ed8 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/120.png differ diff --git a/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/180.png b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/180.png new file mode 100644 index 000000000..4c23ec8f2 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/180.png differ diff --git a/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/60.png b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/60.png new file mode 100644 index 000000000..ce0940364 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/60.png differ diff --git a/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/Contents.json b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/Contents.json new file mode 100644 index 000000000..b0e2cd5eb --- /dev/null +++ b/apps/ios/Shared/Assets.xcassets/icon-transparent.imageset/Contents.json @@ -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" + } +} \ No newline at end of file diff --git a/apps/ios/Shared/ContentView.swift b/apps/ios/Shared/ContentView.swift index 10930ac31..aeccaf934 100644 --- a/apps/ios/Shared/ContentView.swift +++ b/apps/ios/Shared/ContentView.swift @@ -6,14 +6,18 @@ // import SwiftUI +import Intents import SimpleXChat struct ContentView: View { @EnvironmentObject var chatModel: ChatModel @ObservedObject var alertManager = AlertManager.shared @ObservedObject var callController = CallController.shared + @Environment(\.colorScheme) var colorScheme @Binding var doAuthenticate: Bool @Binding var userAuthorized: Bool? + @Binding var canConnectCall: Bool + @Binding var lastSuccessfulUnlock: TimeInterval? @AppStorage(DEFAULT_SHOW_LA_NOTICE) private var prefShowLANotice = false @AppStorage(DEFAULT_LA_NOTICE_SHOWN) private var prefLANoticeShown = false @AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false @@ -23,41 +27,64 @@ struct ContentView: View { var body: some View { ZStack { - if prefPerformLA && userAuthorized != true { - Button(action: runAuthenticate) { Label("Unlock", systemImage: "lock") } - } else if let status = chatModel.chatDbStatus, status != .ok { - DatabaseErrorView(status: status) - } else if !chatModel.v3DBMigration.startChat { - MigrateToAppGroupView() - } else if let step = chatModel.onboardingStage { - if case .onboardingComplete = step, - chatModel.currentUser != nil { - mainView().privacySensitive(protectScreen) - } else { - OnboardingView(onboarding: step) - } + contentView() + if chatModel.showCallView, let call = chatModel.activeCall { + callView(call) } } .onAppear { - if doAuthenticate { runAuthenticate() } + if prefPerformLA { requestNtfAuthorization() } + initAuthenticate() + } + .onChange(of: doAuthenticate) { _ in + initAuthenticate() } - .onChange(of: doAuthenticate) { _ in if doAuthenticate { runAuthenticate() } } .alert(isPresented: $alertManager.presentAlert) { alertManager.alertView! } } + @ViewBuilder private func contentView() -> some View { + if prefPerformLA && userAuthorized != true { + lockButton() + } else if let status = chatModel.chatDbStatus, status != .ok { + DatabaseErrorView(status: status) + } else if !chatModel.v3DBMigration.startChat { + MigrateToAppGroupView() + } else if let step = chatModel.onboardingStage { + if case .onboardingComplete = step, + chatModel.currentUser != nil { + mainView() + } else { + OnboardingView(onboarding: step) + } + } + } + + @ViewBuilder private func callView(_ call: Call) -> some View { + if CallController.useCallKit() { + ActiveCallView(call: call, canConnectCall: Binding.constant(true)) + .onDisappear { + if userAuthorized == false && doAuthenticate { runAuthenticate() } + } + } else { + ActiveCallView(call: call, canConnectCall: $canConnectCall) + if prefPerformLA && userAuthorized != true { + Rectangle() + .fill(colorScheme == .dark ? .black : .white) + .frame(maxWidth: .infinity, maxHeight: .infinity) + lockButton() + } + } + } + + private func lockButton() -> some View { + Button(action: runAuthenticate) { Label("Unlock", systemImage: "lock") } + } + private func mainView() -> some View { ZStack(alignment: .top) { - ChatListView() + ChatListView().privacySensitive(protectScreen) .onAppear { - NtfManager.shared.requestAuthorization( - onDeny: { - if (!notificationAlertShown) { - notificationAlertShown = true - alertManager.showAlert(notificationAlert()) - } - }, - onAuthorized: { notificationAlertShown = false } - ) + if !prefPerformLA { requestNtfAuthorization() } // Local Authentication notice is to be shown on next start after onboarding is complete if (!prefLANoticeShown && prefShowLANotice && !chatModel.chats.isEmpty) { prefLANoticeShown = true @@ -74,11 +101,42 @@ struct ContentView: View { .sheet(isPresented: $showWhatsNew) { WhatsNewView() } - if chatModel.showCallView, let call = chatModel.activeCall { - ActiveCallView(call: call) - } IncomingCallView() } + .onContinueUserActivity("INStartCallIntent", perform: processUserActivity) + .onContinueUserActivity("INStartAudioCallIntent", perform: processUserActivity) + .onContinueUserActivity("INStartVideoCallIntent", perform: processUserActivity) + } + + private func processUserActivity(_ activity: NSUserActivity) { + let intent = activity.interaction?.intent + if let intent = intent as? INStartCallIntent { + callToRecentContact(intent.contacts, intent.callCapability == .videoCall ? .video : .audio) + } else if let intent = intent as? INStartAudioCallIntent { + callToRecentContact(intent.contacts, .audio) + } else if let intent = intent as? INStartVideoCallIntent { + callToRecentContact(intent.contacts, .video) + } + } + + private func callToRecentContact(_ contacts: [INPerson]?, _ mediaType: CallMediaType) { + logger.debug("callToRecentContact") + if let contactId = contacts?.first?.personHandle?.value, + let chat = chatModel.getChat(contactId), + case let .direct(contact) = chat.chatInfo { + logger.debug("callToRecentContact: schedule call") + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + CallController.shared.startCall(contact, mediaType) + } + } + } + + private func initAuthenticate() { + if CallController.useCallKit() && chatModel.showCallView && chatModel.activeCall != nil { + userAuthorized = false + } else if doAuthenticate { + runAuthenticate() + } } private func runAuthenticate() { @@ -98,16 +156,31 @@ struct ContentView: View { switch (laResult) { case .success: userAuthorized = true + canConnectCall = true + lastSuccessfulUnlock = ProcessInfo.processInfo.systemUptime case .failed: break case .unavailable: userAuthorized = true prefPerformLA = false + canConnectCall = true AlertManager.shared.showAlert(laUnavailableTurningOffAlert()) } } } + func requestNtfAuthorization() { + NtfManager.shared.requestAuthorization( + onDeny: { + if (!notificationAlertShown) { + notificationAlertShown = true + alertManager.showAlert(notificationAlert()) + } + }, + onAuthorized: { notificationAlertShown = false } + ) + } + func laNoticeAlert() -> Alert { Alert( title: Text("SimpleX Lock"), diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index adec3f54f..e8f917af3 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -9,7 +9,6 @@ import Foundation import Combine import SwiftUI -import WebKit import SimpleXChat final class ChatModel: ObservableObject { @@ -59,7 +58,6 @@ final class ChatModel: ObservableObject { @Published var stopPreviousRecPlay: Bool = false // value is not taken into account, only the fact it switches @Published var draft: ComposeState? @Published var draftChatId: String? - var callWebView: WKWebView? var messageDelivery: Dictionary Void> = [:] @@ -69,6 +67,31 @@ final class ChatModel: ObservableObject { static var ok: Bool { ChatModel.shared.chatDbStatus == .ok } + func getUser(_ userId: Int64) -> User? { + currentUser?.userId == userId + ? currentUser + : users.first { $0.user.userId == userId }?.user + } + + func getUserIndex(_ user: User) -> Int? { + users.firstIndex { $0.user.userId == user.userId } + } + + func updateUser(_ user: User) { + if let i = getUserIndex(user) { + users[i].user = user + } + if currentUser?.userId == user.userId { + currentUser = user + } + } + + func removeUser(_ user: User) { + if let i = getUserIndex(user), users[i].user.userId != currentUser?.userId { + users.remove(at: i) + } + } + func hasChat(_ id: String) -> Bool { chats.first(where: { $0.id == id }) != nil } diff --git a/apps/ios/Shared/Model/NtfManager.swift b/apps/ios/Shared/Model/NtfManager.swift index 9663a7319..4a4511eae 100644 --- a/apps/ios/Shared/Model/NtfManager.swift +++ b/apps/ios/Shared/Model/NtfManager.swift @@ -39,7 +39,7 @@ class NtfManager: NSObject, UNUserNotificationCenterDelegate, ObservableObject { logger.debug("NtfManager.userNotificationCenter: didReceive: action \(action), categoryIdentifier \(content.categoryIdentifier)") if let userId = content.userInfo["userId"] as? Int64, userId != chatModel.currentUser?.userId { - changeActiveUser(userId) + changeActiveUser(userId, viewPwd: nil) } if content.categoryIdentifier == ntfCategoryContactRequest && action == ntfActionAcceptContact, let chatId = content.userInfo["chatId"] as? String { @@ -87,13 +87,17 @@ class NtfManager: NSObject, UNUserNotificationCenterDelegate, ObservableObject { switch content.categoryIdentifier { case ntfCategoryMessageReceived: let recent = recentInTheSameChat(content) - if model.chatId == nil { + let userId = content.userInfo["userId"] as? Int64 + if let userId = userId, let user = model.getUser(userId), !user.showNotifications { + // ... inactive user with disabled notifications + return [] + } else if model.chatId == nil { // in the chat list... - if model.currentUser?.userId == (content.userInfo["userId"] as? Int64) { - // ... of the current user + if model.currentUser?.userId == userId { + // ... of the active user return recent ? [] : [.sound, .list] } else { - // ... of different user + // ... of inactive user return recent ? [.banner] : [.sound, .banner, .list] } } else if model.chatId == content.targetContentIdentifier { diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 2dcf79922..d5ad40b85 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -132,21 +132,56 @@ func apiCreateActiveUser(_ p: Profile) throws -> User { } func listUsers() throws -> [UserInfo] { - let r = chatSendCmdSync(.listUsers) + return try listUsersResponse(chatSendCmdSync(.listUsers)) +} + +func listUsersAsync() async throws -> [UserInfo] { + return try listUsersResponse(await chatSendCmd(.listUsers)) +} + +private func listUsersResponse(_ r: ChatResponse) throws -> [UserInfo] { if case let .usersList(users) = r { return users.sorted { $0.user.chatViewName.compare($1.user.chatViewName) == .orderedAscending } } throw r } -func apiSetActiveUser(_ userId: Int64) throws -> User { - let r = chatSendCmdSync(.apiSetActiveUser(userId: userId)) +func apiSetActiveUser(_ userId: Int64, viewPwd: String?) throws -> User { + let r = chatSendCmdSync(.apiSetActiveUser(userId: userId, viewPwd: viewPwd)) if case let .activeUser(user) = r { return user } throw r } -func apiDeleteUser(_ userId: Int64, _ delSMPQueues: Bool) throws { - let r = chatSendCmdSync(.apiDeleteUser(userId: userId, delSMPQueues: delSMPQueues)) +func apiSetActiveUserAsync(_ userId: Int64, viewPwd: String?) async throws -> User { + let r = await chatSendCmd(.apiSetActiveUser(userId: userId, viewPwd: viewPwd)) + if case let .activeUser(user) = r { return user } + throw r +} + +func apiHideUser(_ userId: Int64, viewPwd: String) async throws -> User { + try await setUserPrivacy_(.apiHideUser(userId: userId, viewPwd: viewPwd)) +} + +func apiUnhideUser(_ userId: Int64, viewPwd: String?) async throws -> User { + try await setUserPrivacy_(.apiUnhideUser(userId: userId, viewPwd: viewPwd)) +} + +func apiMuteUser(_ userId: Int64, viewPwd: String?) async throws -> User { + try await setUserPrivacy_(.apiMuteUser(userId: userId, viewPwd: viewPwd)) +} + +func apiUnmuteUser(_ userId: Int64, viewPwd: String?) async throws -> User { + try await setUserPrivacy_(.apiUnmuteUser(userId: userId, viewPwd: viewPwd)) +} + +func setUserPrivacy_(_ cmd: ChatCommand) async throws -> User { + let r = await chatSendCmd(cmd) + if case let .userPrivacy(user) = r { return user } + throw r +} + +func apiDeleteUser(_ userId: Int64, _ delSMPQueues: Bool, viewPwd: String?) async throws { + let r = await chatSendCmd(.apiDeleteUser(userId: userId, delSMPQueues: delSMPQueues, viewPwd: viewPwd)) if case .cmdOk = r { return } throw r } @@ -209,8 +244,16 @@ func apiStorageEncryption(currentKey: String = "", newKey: String = "") async th } func apiGetChats() throws -> [ChatData] { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiGetChats: no current user") } - let r = chatSendCmdSync(.apiGetChats(userId: userId)) + let userId = try currentUserId("apiGetChats") + return try apiChatsResponse(chatSendCmdSync(.apiGetChats(userId: userId))) +} + +func apiGetChatsAsync() async throws -> [ChatData] { + let userId = try currentUserId("apiGetChats") + return try apiChatsResponse(await chatSendCmd(.apiGetChats(userId: userId))) +} + +private func apiChatsResponse(_ r: ChatResponse) throws -> [ChatData] { if case let .apiChats(_, chats) = r { return chats } throw r } @@ -337,19 +380,27 @@ func apiDeleteToken(token: DeviceToken) async throws { } func getUserSMPServers() throws -> ([ServerCfg], [String]) { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("getUserSMPServers: no current user") } - let r = chatSendCmdSync(.apiGetUserSMPServers(userId: userId)) + let userId = try currentUserId("getUserSMPServers") + return try userSMPServersResponse(chatSendCmdSync(.apiGetUserSMPServers(userId: userId))) +} + +func getUserSMPServersAsync() async throws -> ([ServerCfg], [String]) { + let userId = try currentUserId("getUserSMPServersAsync") + return try userSMPServersResponse(await chatSendCmd(.apiGetUserSMPServers(userId: userId))) +} + +private func userSMPServersResponse(_ r: ChatResponse) throws -> ([ServerCfg], [String]) { if case let .userSMPServers(_, smpServers, presetServers) = r { return (smpServers, presetServers) } throw r } func setUserSMPServers(smpServers: [ServerCfg]) async throws { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("setUserSMPServers: no current user") } + let userId = try currentUserId("setUserSMPServers") try await sendCommandOkResp(.apiSetUserSMPServers(userId: userId, smpServers: smpServers)) } func testSMPServer(smpServer: String) async throws -> Result<(), SMPTestFailure> { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("testSMPServer: no current user") } + let userId = try currentUserId("testSMPServer") let r = await chatSendCmd(.apiTestSMPServer(userId: userId, smpServer: smpServer)) if case let .smpTestResult(_, testFailure) = r { if let t = testFailure { @@ -361,14 +412,22 @@ func testSMPServer(smpServer: String) async throws -> Result<(), SMPTestFailure> } func getChatItemTTL() throws -> ChatItemTTL { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("getChatItemTTL: no current user") } - let r = chatSendCmdSync(.apiGetChatItemTTL(userId: userId)) + let userId = try currentUserId("getChatItemTTL") + return try chatItemTTLResponse(chatSendCmdSync(.apiGetChatItemTTL(userId: userId))) +} + +func getChatItemTTLAsync() async throws -> ChatItemTTL { + let userId = try currentUserId("getChatItemTTLAsync") + return try chatItemTTLResponse(await chatSendCmd(.apiGetChatItemTTL(userId: userId))) +} + +private func chatItemTTLResponse(_ r: ChatResponse) throws -> ChatItemTTL { if case let .chatItemTTL(_, chatItemTTL) = r { return ChatItemTTL(chatItemTTL) } throw r } func setChatItemTTL(_ chatItemTTL: ChatItemTTL) async throws { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("setChatItemTTL: no current user") } + let userId = try currentUserId("setChatItemTTL") try await sendCommandOkResp(.apiSetChatItemTTL(userId: userId, seconds: chatItemTTL.seconds)) } @@ -539,14 +598,14 @@ func clearChat(_ chat: Chat) async { } func apiListContacts() throws -> [Contact] { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiListContacts: no current user") } + let userId = try currentUserId("apiListContacts") let r = chatSendCmdSync(.apiListContacts(userId: userId)) if case let .contactsList(_, contacts) = r { return contacts } throw r } func apiUpdateProfile(profile: Profile) async throws -> Profile? { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiUpdateProfile: no current user") } + let userId = try currentUserId("apiUpdateProfile") let r = await chatSendCmd(.apiUpdateProfile(userId: userId, profile: profile)) switch r { case .userProfileNoChange: return nil @@ -574,22 +633,30 @@ func apiSetConnectionAlias(connId: Int64, localAlias: String) async throws -> Pe } func apiCreateUserAddress() async throws -> String { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiCreateUserAddress: no current user") } + let userId = try currentUserId("apiCreateUserAddress") let r = await chatSendCmd(.apiCreateMyAddress(userId: userId)) if case let .userContactLinkCreated(_, connReq) = r { return connReq } throw r } func apiDeleteUserAddress() async throws { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiDeleteUserAddress: no current user") } + let userId = try currentUserId("apiDeleteUserAddress") let r = await chatSendCmd(.apiDeleteMyAddress(userId: userId)) if case .userContactLinkDeleted = r { return } throw r } func apiGetUserAddress() throws -> UserContactLink? { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiGetUserAddress: no current user") } - let r = chatSendCmdSync(.apiShowMyAddress(userId: userId)) + let userId = try currentUserId("apiGetUserAddress") + return try userAddressResponse(chatSendCmdSync(.apiShowMyAddress(userId: userId))) +} + +func apiGetUserAddressAsync() async throws -> UserContactLink? { + let userId = try currentUserId("apiGetUserAddressAsync") + return try userAddressResponse(await chatSendCmd(.apiShowMyAddress(userId: userId))) +} + +private func userAddressResponse(_ r: ChatResponse) throws -> UserContactLink? { switch r { case let .userContactLink(_, contactLink): return contactLink case .chatCmdError(_, chatError: .errorStore(storeError: .userContactLinkNotFound)): return nil @@ -598,7 +665,7 @@ func apiGetUserAddress() throws -> UserContactLink? { } func userAddressAutoAccept(_ autoAccept: AutoAccept?) async throws -> UserContactLink? { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("userAddressAutoAccept: no current user") } + let userId = try currentUserId("userAddressAutoAccept") let r = await chatSendCmd(.apiAddressAutoAccept(userId: userId, autoAccept: autoAccept)) switch r { case let .userContactLinkUpdated(_, contactLink): return contactLink @@ -793,7 +860,7 @@ private func sendCommandOkResp(_ cmd: ChatCommand) async throws { } func apiNewGroup(_ p: GroupProfile) throws -> GroupInfo { - guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("apiNewGroup: no current user") } + let userId = try currentUserId("apiNewGroup") let r = chatSendCmdSync(.apiNewGroup(userId: userId, groupProfile: p)) if case let .groupCreated(_, groupInfo) = r { return groupInfo } throw r @@ -909,7 +976,14 @@ func apiGetVersion() throws -> CoreVersionInfo { throw r } -func initializeChat(start: Bool, dbKey: String? = nil) throws { +private func currentUserId(_ funcName: String) throws -> Int64 { + if let userId = ChatModel.shared.currentUser?.userId { + return userId + } + throw RuntimeError("\(funcName): no current user") +} + +func initializeChat(start: Bool, dbKey: String? = nil, refreshInvitations: Bool = true) throws { logger.debug("initializeChat") let m = ChatModel.shared (m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey) @@ -925,13 +999,13 @@ func initializeChat(start: Bool, dbKey: String? = nil) throws { if m.currentUser == nil { m.onboardingStage = .step1_SimpleXInfo } else if start { - try startChat() + try startChat(refreshInvitations: refreshInvitations) } else { m.chatRunning = false } } -func startChat() throws { +func startChat(refreshInvitations: Bool = true) throws { logger.debug("startChat") let m = ChatModel.shared try setNetworkConfig(getNetCfg()) @@ -940,7 +1014,9 @@ func startChat() throws { if justStarted { try getUserChatData() NtfManager.shared.setNtfBadgeCount(m.totalUnreadCountForAllUsers()) - try refreshCallInvitations() + if (refreshInvitations) { + try refreshCallInvitations() + } (m.savedToken, m.tokenStatus, m.notificationMode) = apiGetNtfToken() if let token = m.deviceToken { registerToken(token: token) @@ -956,21 +1032,38 @@ func startChat() throws { chatLastStartGroupDefault.set(Date.now) } -func changeActiveUser(_ userId: Int64) { +func changeActiveUser(_ userId: Int64, viewPwd: String?) { do { - try changeActiveUser_(userId) + try changeActiveUser_(userId, viewPwd: viewPwd) } catch let error { logger.error("Unable to set active user: \(responseError(error))") } } -func changeActiveUser_(_ userId: Int64) throws { +private func changeActiveUser_(_ userId: Int64, viewPwd: String?) throws { let m = ChatModel.shared - m.currentUser = try apiSetActiveUser(userId) + m.currentUser = try apiSetActiveUser(userId, viewPwd: viewPwd) m.users = try listUsers() try getUserChatData() } +func changeActiveUserAsync_(_ userId: Int64, viewPwd: String?) async throws { + let currentUser = try await apiSetActiveUserAsync(userId, viewPwd: viewPwd) + let users = try await listUsersAsync() + await MainActor.run { + let m = ChatModel.shared + m.currentUser = currentUser + m.users = users + } + try await getUserChatDataAsync() + await MainActor.run { + if var (_, invitation) = ChatModel.shared.callInvitations.first(where: { _, inv in inv.user.userId == userId }) { + invitation.user = currentUser + activateCall(invitation) + } + } +} + func getUserChatData() throws { let m = ChatModel.shared m.userAddress = try apiGetUserAddress() @@ -980,6 +1073,20 @@ func getUserChatData() throws { m.chats = chats.map { Chat.init($0) } } +private func getUserChatDataAsync() async throws { + let userAddress = try await apiGetUserAddressAsync() + let servers = try await getUserSMPServersAsync() + let chatItemTTL = try await getChatItemTTLAsync() + let chats = try await apiGetChatsAsync() + await MainActor.run { + let m = ChatModel.shared + m.userAddress = userAddress + (m.userSMPServers, m.presetSMPServers) = servers + m.chatItemTTL = chatItemTTL + m.chats = chats.map { Chat.init($0) } + } +} + class ChatReceiver { private var receiveLoop: Task? private var receiveMessages = true @@ -1048,18 +1155,18 @@ func processReceivedMsg(_ res: ChatResponse) async { m.removeChat(contact.activeConn.id) } case let .receivedContactRequest(user, contactRequest): - if !active(user) { return } - - let cInfo = ChatInfo.contactRequest(contactRequest: contactRequest) - if m.hasChat(contactRequest.id) { - m.updateChatInfo(cInfo) - } else { - m.addChat(Chat( - chatInfo: cInfo, - chatItems: [] - )) - NtfManager.shared.notifyContactRequest(user, contactRequest) + if active(user) { + let cInfo = ChatInfo.contactRequest(contactRequest: contactRequest) + if m.hasChat(contactRequest.id) { + m.updateChatInfo(cInfo) + } else { + m.addChat(Chat( + chatInfo: cInfo, + chatItems: [] + )) + } } + NtfManager.shared.notifyContactRequest(user, contactRequest) case let .contactUpdated(user, toContact): if active(user) && m.hasChat(toContact.id) { let cInfo = ChatInfo.direct(contact: toContact) @@ -1214,19 +1321,6 @@ func processReceivedMsg(_ res: ChatResponse) async { case let .callInvitation(invitation): m.callInvitations[invitation.contact.id] = invitation activateCall(invitation) - -// This will be called from notification service extension -// CXProvider.reportNewIncomingVoIPPushPayload([ -// "displayName": contact.displayName, -// "contactId": contact.id, -// "uuid": invitation.callkitUUID -// ]) { error in -// if let error = error { -// logger.error("reportNewIncomingVoIPPushPayload error \(error.localizedDescription)") -// } else { -// logger.debug("reportNewIncomingVoIPPushPayload success for \(contact.id)") -// } -// } case let .callOffer(_, contact, callType, offer, sharedKey, _): withCall(contact) { call in call.callState = .offerReceived @@ -1259,7 +1353,7 @@ func processReceivedMsg(_ res: ChatResponse) async { } withCall(contact) { call in m.callCommand = .end -// CallController.shared.reportCallRemoteEnded(call: call) + CallController.shared.reportCallRemoteEnded(call: call) } case .chatSuspended: chatSuspended() @@ -1310,18 +1404,25 @@ func processContactSubError(_ contact: Contact, _ chatError: ChatError) { func refreshCallInvitations() throws { let m = ChatModel.shared - let callInvitations = try apiGetCallInvitations() - m.callInvitations = callInvitations.reduce(into: [ChatId: RcvCallInvitation]()) { result, inv in result[inv.contact.id] = inv } + let callInvitations = try justRefreshCallInvitations() if let (chatId, ntfAction) = m.ntfCallInvitationAction, let invitation = m.callInvitations.removeValue(forKey: chatId) { m.ntfCallInvitationAction = nil CallController.shared.callAction(invitation: invitation, action: ntfAction) - } else if let invitation = callInvitations.last { + } else if let invitation = callInvitations.last(where: { $0.user.showNotifications }) { activateCall(invitation) } } +func justRefreshCallInvitations() throws -> [RcvCallInvitation] { + let m = ChatModel.shared + let callInvitations = try apiGetCallInvitations() + m.callInvitations = callInvitations.reduce(into: [ChatId: RcvCallInvitation]()) { result, inv in result[inv.contact.id] = inv } + return callInvitations +} + func activateCall(_ callInvitation: RcvCallInvitation) { + if !callInvitation.user.showNotifications { return } let m = ChatModel.shared CallController.shared.reportNewIncomingCall(invitation: callInvitation) { error in if let error = error { diff --git a/apps/ios/Shared/Model/SuspendChat.swift b/apps/ios/Shared/Model/SuspendChat.swift index 499dbbb1f..6d8108a3e 100644 --- a/apps/ios/Shared/Model/SuspendChat.swift +++ b/apps/ios/Shared/Model/SuspendChat.swift @@ -81,3 +81,24 @@ func activateChat(appState: AppState = .active) { if ChatModel.ok { apiActivateChat() } } } + +func initChatAndMigrate(refreshInvitations: Bool = true) { + let m = ChatModel.shared + if (!m.chatInitialized) { + do { + m.v3DBMigration = v3DBMigrationDefault.get() + try initializeChat(start: m.v3DBMigration.startChat, refreshInvitations: refreshInvitations) + } catch let error { + fatalError("Failed to start or load chats: \(responseError(error))") + } + } +} + +func startChatAndActivate() { + if ChatModel.shared.chatRunning == true { + ChatReceiver.shared.start() + } + if .active != appStateGroupDefault.get() { + activateChat() + } +} \ No newline at end of file diff --git a/apps/ios/Shared/SimpleXApp.swift b/apps/ios/Shared/SimpleXApp.swift index c8b641d20..b93d402a8 100644 --- a/apps/ios/Shared/SimpleXApp.swift +++ b/apps/ios/Shared/SimpleXApp.swift @@ -21,6 +21,8 @@ struct SimpleXApp: App { @State private var userAuthorized: Bool? @State private var doAuthenticate = false @State private var enteredBackground: TimeInterval? = nil + @State private var canConnectCall = false + @State private var lastSuccessfulUnlock: TimeInterval? = nil init() { hs_init(0, nil) @@ -34,44 +36,43 @@ struct SimpleXApp: App { var body: some Scene { return WindowGroup { - ContentView(doAuthenticate: $doAuthenticate, userAuthorized: $userAuthorized) + ContentView(doAuthenticate: $doAuthenticate, userAuthorized: $userAuthorized, canConnectCall: $canConnectCall, lastSuccessfulUnlock: $lastSuccessfulUnlock) .environmentObject(chatModel) .onOpenURL { url in logger.debug("ContentView.onOpenURL: \(url)") chatModel.appOpenUrl = url } .onAppear() { - if (!chatModel.chatInitialized) { - do { - chatModel.v3DBMigration = v3DBMigrationDefault.get() - try initializeChat(start: chatModel.v3DBMigration.startChat) - } catch let error { - fatalError("Failed to start or load chats: \(responseError(error))") - } - } + initChatAndMigrate() } .onChange(of: scenePhase) { phase in - logger.debug("scenePhase \(String(describing: scenePhase))") + logger.debug("scenePhase was \(String(describing: scenePhase)), now \(String(describing: phase))") switch (phase) { case .background: - suspendChat() - BGManager.shared.schedule() + if CallController.useCallKit() && chatModel.activeCall != nil { + CallController.shared.shouldSuspendChat = true + } else { + suspendChat() + BGManager.shared.schedule() + } if userAuthorized == true { enteredBackground = ProcessInfo.processInfo.systemUptime } doAuthenticate = false + canConnectCall = false NtfManager.shared.setNtfBadgeCount(chatModel.totalUnreadCountForAllUsers()) case .active: - if chatModel.chatRunning == true { - ChatReceiver.shared.start() - } + CallController.shared.shouldSuspendChat = false let appState = appStateGroupDefault.get() - activateChat() + startChatAndActivate() if appState.inactive && chatModel.chatRunning == true { updateChats() - updateCallInvitations() + if !chatModel.showCallView && !CallController.shared.hasActiveCalls() { + updateCallInvitations() + } } doAuthenticate = authenticationExpired() + canConnectCall = !(doAuthenticate && prefPerformLA) || unlockedRecently() default: break } @@ -111,6 +112,14 @@ struct SimpleXApp: App { } } + private func unlockedRecently() -> Bool { + if let lastSuccessfulUnlock = lastSuccessfulUnlock { + return ProcessInfo.processInfo.systemUptime - lastSuccessfulUnlock < 2 + } else { + return false + } + } + private func updateChats() { do { let chats = try apiGetChats() diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift index d53b351de..393a370ee 100644 --- a/apps/ios/Shared/Views/Call/ActiveCallView.swift +++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift @@ -13,9 +13,11 @@ import SimpleXChat struct ActiveCallView: View { @EnvironmentObject var m: ChatModel @ObservedObject var call: Call + @Environment(\.scenePhase) var scenePhase @State private var client: WebRTCClient? = nil @State private var activeCall: WebRTCClient.Call? = nil @State private var localRendererAspectRatio: CGFloat? = nil + @Binding var canConnectCall: Bool var body: some View { ZStack(alignment: .bottom) { @@ -36,12 +38,16 @@ struct ActiveCallView: View { } } .onAppear { - if client == nil { - client = WebRTCClient($activeCall, { msg in await MainActor.run { processRtcMessage(msg: msg) } }, $localRendererAspectRatio) - sendCommandToClient() - } + logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase), privacy: .public), canConnectCall \(canConnectCall)") + createWebRTCClient() + dismissAllSheets() + } + .onChange(of: canConnectCall) { _ in + logger.debug("ActiveCallView: canConnectCall changed to \(canConnectCall, privacy: .public)") + createWebRTCClient() } .onDisappear { + logger.debug("ActiveCallView: disappear") client?.endCall() } .onChange(of: m.callCommand) { _ in sendCommandToClient()} @@ -49,6 +55,13 @@ struct ActiveCallView: View { .preferredColorScheme(.dark) } + private func createWebRTCClient() { + if client == nil && canConnectCall { + client = WebRTCClient($activeCall, { msg in await MainActor.run { processRtcMessage(msg: msg) } }, $localRendererAspectRatio) + sendCommandToClient() + } + } + private func sendCommandToClient() { if call == m.activeCall, m.activeCall != nil, @@ -117,9 +130,9 @@ struct ActiveCallView: View { case let .connection(state): if let callStatus = WebRTCCallStatus.init(rawValue: state.connectionState), case .connected = callStatus { -// if case .outgoing = call.direction { -// CallController.shared.reportOutgoingCall(call: call, connectedAt: nil) -// } + call.direction == .outgoing + ? CallController.shared.reportOutgoingCall(call: call, connectedAt: nil) + : CallController.shared.reportIncomingCall(call: call, connectedAt: nil) call.callState = .connected } if state.connectionState == "closed" { @@ -252,7 +265,7 @@ struct ActiveCallOverlay: View { private func endCallButton() -> some View { let cc = CallController.shared - return callButton("phone.down.fill", size: 60) { + return callButton("phone.down.fill", width: 60, height: 60) { if let uuid = call.callkitUUID { cc.endCall(callUUID: uuid) } else { @@ -274,7 +287,7 @@ struct ActiveCallOverlay: View { } private func toggleSpeakerButton() -> some View { - controlButton(call, call.speakerEnabled ? "speaker.fill" : "speaker.slash") { + controlButton(call, call.speakerEnabled ? "speaker.wave.2.fill" : "speaker.wave.1.fill") { Task { client.setSpeakerEnabledAndConfigureSession(!call.speakerEnabled) DispatchQueue.main.async { @@ -305,22 +318,22 @@ struct ActiveCallOverlay: View { @ViewBuilder private func controlButton(_ call: Call, _ imageName: String, _ perform: @escaping () -> Void) -> some View { if call.hasMedia { - callButton(imageName, size: 40, perform) + callButton(imageName, width: 50, height: 38, perform) .foregroundColor(.white) .opacity(0.85) } else { - Color.clear.frame(width: 40, height: 40) + Color.clear.frame(width: 50, height: 38) } } - private func callButton(_ imageName: String, size: CGFloat, _ perform: @escaping () -> Void) -> some View { + private func callButton(_ imageName: String, width: CGFloat, height: CGFloat, _ perform: @escaping () -> Void) -> some View { Button { perform() } label: { Image(systemName: imageName) .resizable() .scaledToFit() - .frame(maxWidth: size, maxHeight: size) + .frame(maxWidth: width, maxHeight: height) } } } diff --git a/apps/ios/Shared/Views/Call/CallController.swift b/apps/ios/Shared/Views/Call/CallController.swift index 15332ef32..6a20eee59 100644 --- a/apps/ios/Shared/Views/Call/CallController.swift +++ b/apps/ios/Shared/Views/Call/CallController.swift @@ -7,192 +7,317 @@ // import Foundation -//import CallKit +import CallKit +import StoreKit +import PushKit import AVFoundation import SimpleXChat +import WebRTC -//class CallController: NSObject, CXProviderDelegate, ObservableObject { -class CallController: NSObject, ObservableObject { - static let useCallKit = false +class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, ObservableObject { static let shared = CallController() -// private let provider = CXProvider(configuration: CallController.configuration) -// private let controller = CXCallController() + static let isInChina = SKStorefront().countryCode == "CHN" + static func useCallKit() -> Bool { !isInChina && callKitEnabledGroupDefault.get() } + + private let provider = CXProvider(configuration: { + let configuration = CXProviderConfiguration() + configuration.supportsVideo = true + configuration.supportedHandleTypes = [.generic] + configuration.includesCallsInRecents = UserDefaults.standard.bool(forKey: DEFAULT_CALL_KIT_CALLS_IN_RECENTS) + configuration.maximumCallGroups = 1 + configuration.maximumCallsPerCallGroup = 1 + configuration.iconTemplateImageData = UIImage(named: "icon-transparent")?.pngData() + return configuration + }()) + private let controller = CXCallController() private let callManager = CallManager() @Published var activeCallInvitation: RcvCallInvitation? + var shouldSuspendChat: Bool = false + var fulfillOnConnect: CXAnswerCallAction? = nil -// PKPushRegistry will be used from notification service extension -// let registry = PKPushRegistry(queue: nil) - -// static let configuration: CXProviderConfiguration = { -// let configuration = CXProviderConfiguration() -// configuration.supportsVideo = true -// configuration.supportedHandleTypes = [.generic] -// configuration.includesCallsInRecents = true // TODO disable or add option -// configuration.maximumCallsPerCallGroup = 1 -// return configuration -// }() + // PKPushRegistry is used from notification service extension + private let registry = PKPushRegistry(queue: nil) override init() { super.init() -// self.provider.setDelegate(self, queue: nil) -// self.registry.delegate = self -// self.registry.desiredPushTypes = [.voIP] + provider.setDelegate(self, queue: nil) + registry.delegate = self + registry.desiredPushTypes = [.voIP] } -// func providerDidReset(_ provider: CXProvider) { -// } + func providerDidReset(_ provider: CXProvider) { + logger.debug("CallController.providerDidReset") + } -// func provider(_ provider: CXProvider, perform action: CXStartCallAction) { -// logger.debug("CallController.provider CXStartCallAction") -// if callManager.startOutgoingCall(callUUID: action.callUUID) { -// action.fulfill() -// provider.reportOutgoingCall(with: action.callUUID, startedConnectingAt: nil) -// } else { -// action.fail() -// } -// } + func provider(_ provider: CXProvider, perform action: CXStartCallAction) { + logger.debug("CallController.provider CXStartCallAction") + if callManager.startOutgoingCall(callUUID: action.callUUID) { + action.fulfill() + provider.reportOutgoingCall(with: action.callUUID, startedConnectingAt: nil) + } else { + action.fail() + } + } -// func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) { -// logger.debug("CallController.provider CXAnswerCallAction") -// if callManager.answerIncomingCall(callUUID: action.callUUID) { -// action.fulfill() -// } else { -// action.fail() -// } -// } + func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) { + logger.debug("CallController.provider CXAnswerCallAction") + if callManager.answerIncomingCall(callUUID: action.callUUID) { + // WebRTC call should be in connected state to fulfill. + // Otherwise no audio and mic working on lockscreen + fulfillOnConnect = action + } else { + action.fail() + } + } -// func provider(_ provider: CXProvider, perform action: CXEndCallAction) { -// logger.debug("CallController.provider CXEndCallAction") -// callManager.endCall(callUUID: action.callUUID) { ok in -// if ok { -// action.fulfill() -// } else { -// action.fail() -// } -// } -// } + func provider(_ provider: CXProvider, perform action: CXEndCallAction) { + logger.debug("CallController.provider CXEndCallAction") + // Should be nil here if connection was in connected state + fulfillOnConnect?.fail() + fulfillOnConnect = nil + callManager.endCall(callUUID: action.callUUID) { ok in + if ok { + action.fulfill() + } else { + action.fail() + } + self.suspendOnEndCall() + } + } -// func provider(_ provider: CXProvider, timedOutPerforming action: CXAction) { -// print("timed out", #function) -// action.fulfill() -// } + func provider(_ provider: CXProvider, perform action: CXSetMutedCallAction) { + if callManager.enableMedia(media: .audio, enable: !action.isMuted, callUUID: action.callUUID) { + action.fulfill() + } else { + action.fail() + } + } -// func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) { -// print("received", #function) -//// do { -//// try audioSession.setCategory(.playAndRecord, mode: .voiceChat, options: .mixWithOthers) -//// logger.debug("audioSession category set") -//// try audioSession.setActive(true) -//// logger.debug("audioSession activated") -//// } catch { -//// print(error) -//// logger.error("failed activating audio session") -//// } -// } + func provider(_ provider: CXProvider, timedOutPerforming action: CXAction) { + logger.debug("timed out: \(String(describing: action))") + action.fulfill() + } -// func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) { -// print("received", #function) -// } + func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) { + logger.debug("CallController: activating audioSession and audio in WebRTCClient") + RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession) + RTCAudioSession.sharedInstance().isAudioEnabled = true + do { + try audioSession.setCategory(.playAndRecord, mode: .voiceChat, options: .mixWithOthers) + logger.debug("audioSession category set") + try audioSession.setActive(true) + logger.debug("audioSession activated") + } catch { + print(error) + logger.error("failed activating audio session") + } + } -// func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) { -// -// } + func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) { + logger.debug("CallController: deactivating audioSession and audio in WebRTCClient") + RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession) + RTCAudioSession.sharedInstance().isAudioEnabled = false + do { + try audioSession.setActive(false) + logger.debug("audioSession deactivated") + } catch { + print(error) + logger.error("failed deactivating audio session") + } + suspendOnEndCall() + } -// This will be needed when we have notification service extension -// func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) { -// if type == .voIP { -// // Extract the call information from the push notification payload -// if let displayName = payload.dictionaryPayload["displayName"] as? String, -// let contactId = payload.dictionaryPayload["contactId"] as? String, -// let uuidStr = payload.dictionaryPayload["uuid"] as? String, -// let uuid = UUID(uuidString: uuidStr) { -// let callUpdate = CXCallUpdate() -// callUpdate.remoteHandle = CXHandle(type: .phoneNumber, value: displayName) -// provider.reportNewIncomingCall(with: uuid, update: callUpdate, completion: { error in -// if error != nil { -// let m = ChatModel.shared -// m.callInvitations.removeValue(forKey: contactId) -// } -// // Tell PushKit that the notification is handled. -// completion() -// }) -// } -// } -// } + func suspendOnEndCall() { + if shouldSuspendChat { + // The delay allows to accept the second call before suspending a chat + // see `.onChange(of: scenePhase)` in SimpleXApp + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [weak self] in + logger.debug("CallController: shouldSuspendChat \(String(describing: self?.shouldSuspendChat), privacy: .public)") + if ChatModel.shared.activeCall == nil && self?.shouldSuspendChat == true { + self?.shouldSuspendChat = false + suspendChat() + BGManager.shared.schedule() + } + } + } + } + + @objc(pushRegistry:didUpdatePushCredentials:forType:) + func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) { + logger.debug("CallController: didUpdate push credentials for type \(type.rawValue, privacy: .public)") + } + + func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) { + logger.debug("CallController: did receive push with type \(type.rawValue, privacy: .public)") + if type != .voIP { + completion() + return + } + logger.debug("CallController: initializing chat") + if (!ChatModel.shared.chatInitialized) { + initChatAndMigrate(refreshInvitations: false) + } + startChatAndActivate() + shouldSuspendChat = true + // There are no invitations in the model, as it was processed by NSE + _ = try? justRefreshCallInvitations() + // logger.debug("CallController justRefreshCallInvitations: \(String(describing: m.callInvitations))") + // Extract the call information from the push notification payload + let m = ChatModel.shared + if let contactId = payload.dictionaryPayload["contactId"] as? String, + let invitation = m.callInvitations[contactId] { + let update = cxCallUpdate(invitation: invitation) + if let uuid = invitation.callkitUUID { + logger.debug("CallController: report pushkit call via CallKit") + let update = cxCallUpdate(invitation: invitation) + provider.reportNewIncomingCall(with: uuid, update: update) { error in + if error != nil { + m.callInvitations.removeValue(forKey: contactId) + } + // Tell PushKit that the notification is handled. + completion() + } + } else { + reportExpiredCall(update: update, completion) + } + } else { + reportExpiredCall(payload: payload, completion) + } + } + + // This function fulfils the requirement to always report a call when PushKit notification is received, + // even when there is no more active calls by the time PushKit payload is processed. + // See the note in the bottom of this article: + // https://developer.apple.com/documentation/pushkit/pkpushregistrydelegate/2875784-pushregistry + private func reportExpiredCall(update: CXCallUpdate, _ completion: @escaping () -> Void) { + logger.debug("CallController: report expired pushkit call via CallKit") + let uuid = UUID() + provider.reportNewIncomingCall(with: uuid, update: update) { error in + if error == nil { + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + self.provider.reportCall(with: uuid, endedAt: nil, reason: .remoteEnded) + } + } + completion() + } + } + + private func reportExpiredCall(payload: PKPushPayload, _ completion: @escaping () -> Void) { + let update = CXCallUpdate() + let displayName = payload.dictionaryPayload["displayName"] as? String + let media = payload.dictionaryPayload["media"] as? String + update.localizedCallerName = displayName ?? NSLocalizedString("Unknown caller", comment: "callkit banner") + update.hasVideo = media == CallMediaType.video.rawValue + reportExpiredCall(update: update, completion) + } func reportNewIncomingCall(invitation: RcvCallInvitation, completion: @escaping (Error?) -> Void) { - logger.debug("CallController.reportNewIncomingCall") -// if CallController.useCallKit, let uuid = invitation.callkitUUID { -// let update = CXCallUpdate() -// update.remoteHandle = CXHandle(type: .generic, value: invitation.contact.displayName) -// update.hasVideo = invitation.peerMedia == .video -// provider.reportNewIncomingCall(with: uuid, update: update, completion: completion) -// } else { + logger.debug("CallController.reportNewIncomingCall, UUID=\(String(describing: invitation.callkitUUID), privacy: .public)") + if CallController.useCallKit(), let uuid = invitation.callkitUUID { + if invitation.callTs.timeIntervalSinceNow >= -180 { + let update = cxCallUpdate(invitation: invitation) + provider.reportNewIncomingCall(with: uuid, update: update, completion: completion) + } + } else { NtfManager.shared.notifyCallInvitation(invitation) if invitation.callTs.timeIntervalSinceNow >= -180 { activeCallInvitation = invitation } -// } + } } -// func reportOutgoingCall(call: Call, connectedAt dateConnected: Date?) { -// if CallController.useCallKit, let uuid = call.callkitUUID { -// provider.reportOutgoingCall(with: uuid, connectedAt: dateConnected) -// } -// } + private func cxCallUpdate(invitation: RcvCallInvitation) -> CXCallUpdate { + let update = CXCallUpdate() + update.remoteHandle = CXHandle(type: .generic, value: invitation.contact.id) + update.hasVideo = invitation.callType.media == .video + update.localizedCallerName = invitation.contact.displayName + return update + } + + func reportIncomingCall(call: Call, connectedAt dateConnected: Date?) { + logger.debug("CallController: reporting incoming call connected") + if CallController.useCallKit() { + // Fulfilling this action only after connect, otherwise there are no audio and mic on lockscreen + fulfillOnConnect?.fulfill() + fulfillOnConnect = nil + } + } + + func reportOutgoingCall(call: Call, connectedAt dateConnected: Date?) { + logger.debug("CallController: reporting outgoing call connected") + if CallController.useCallKit(), let uuid = call.callkitUUID { + provider.reportOutgoingCall(with: uuid, connectedAt: dateConnected) + } + } func reportCallRemoteEnded(invitation: RcvCallInvitation) { -// if CallController.useCallKit, let uuid = invitation.callkitUUID { -// provider.reportCall(with: uuid, endedAt: nil, reason: .remoteEnded) -// } else if invitation.contact.id == activeCallInvitation?.contact.id { + logger.debug("CallController: reporting remote ended") + if CallController.useCallKit(), let uuid = invitation.callkitUUID { + provider.reportCall(with: uuid, endedAt: nil, reason: .remoteEnded) + } else if invitation.contact.id == activeCallInvitation?.contact.id { activeCallInvitation = nil -// } + } } -// func reportCallRemoteEnded(call: Call) { -// if CallController.useCallKit, let uuid = call.callkitUUID { -// provider.reportCall(with: uuid, endedAt: nil, reason: .remoteEnded) -// } -// } + func reportCallRemoteEnded(call: Call) { + logger.debug("CallController: reporting remote ended") + if CallController.useCallKit(), let uuid = call.callkitUUID { + provider.reportCall(with: uuid, endedAt: nil, reason: .remoteEnded) + } + } func startCall(_ contact: Contact, _ media: CallMediaType) { logger.debug("CallController.startCall") let uuid = callManager.newOutgoingCall(contact, media) -// if CallController.useCallKit { -// let handle = CXHandle(type: .generic, value: contact.displayName) -// let action = CXStartCallAction(call: uuid, handle: handle) -// action.isVideo = media == .video -// requestTransaction(with: action) -// } else if callManager.startOutgoingCall(callUUID: uuid) { - if callManager.startOutgoingCall(callUUID: uuid) { - logger.debug("CallController.startCall: call started") - } else { - logger.error("CallController.startCall: no active call") + if CallController.useCallKit() { + let handle = CXHandle(type: .generic, value: contact.id) + let action = CXStartCallAction(call: uuid, handle: handle) + action.isVideo = media == .video + requestTransaction(with: action) { + let update = CXCallUpdate() + update.remoteHandle = CXHandle(type: .generic, value: contact.id) + update.hasVideo = media == .video + update.localizedCallerName = contact.displayName + self.provider.reportCall(with: uuid, updated: update) + } + } else if callManager.startOutgoingCall(callUUID: uuid) { + if callManager.startOutgoingCall(callUUID: uuid) { + logger.debug("CallController.startCall: call started") + } else { + logger.error("CallController.startCall: no active call") + } } } func answerCall(invitation: RcvCallInvitation) { - callManager.answerIncomingCall(invitation: invitation) + logger.debug("CallController: answering a call") + if CallController.useCallKit(), let callUUID = invitation.callkitUUID { + requestTransaction(with: CXAnswerCallAction(call: callUUID)) + } else { + callManager.answerIncomingCall(invitation: invitation) + } if invitation.contact.id == self.activeCallInvitation?.contact.id { self.activeCallInvitation = nil } } func endCall(callUUID: UUID) { -// if CallController.useCallKit { -// requestTransaction(with: CXEndCallAction(call: callUUID)) -// } else { + logger.debug("CallController: ending the call with UUID \(callUUID.uuidString)") + if CallController.useCallKit() { + requestTransaction(with: CXEndCallAction(call: callUUID)) + } else { callManager.endCall(callUUID: callUUID) { ok in if ok { logger.debug("CallController.endCall: call ended") } else { - logger.error("CallController.endCall: no actove call pr call invitation to end") + logger.error("CallController.endCall: no active call pr call invitation to end") } } -// } + } } func endCall(invitation: RcvCallInvitation) { + logger.debug("CallController: ending the call with invitation") callManager.endCall(invitation: invitation) { if invitation.contact.id == self.activeCallInvitation?.contact.id { DispatchQueue.main.async { @@ -203,6 +328,7 @@ class CallController: NSObject, ObservableObject { } func endCall(call: Call, completed: @escaping () -> Void) { + logger.debug("CallController: ending the call with call instance") callManager.endCall(call: call, completed: completed) } @@ -213,15 +339,24 @@ class CallController: NSObject, ObservableObject { } } -// private func requestTransaction(with action: CXAction) { -// let t = CXTransaction() -// t.addAction(action) -// controller.request(t) { error in -// if let error = error { -// logger.error("CallController.requestTransaction error requesting transaction: \(error.localizedDescription)") -// } else { -// logger.debug("CallController.requestTransaction requested transaction successfully") -// } -// } -// } + func showInRecents(_ show: Bool) { + let conf = provider.configuration + conf.includesCallsInRecents = show + provider.configuration = conf + } + + func hasActiveCalls() -> Bool { + controller.callObserver.calls.count > 0 + } + + private func requestTransaction(with action: CXAction, onSuccess: @escaping () -> Void = {}) { + controller.request(CXTransaction(action: action)) { error in + if let error = error { + logger.error("CallController.requestTransaction error requesting transaction: \(error.localizedDescription, privacy: .public)") + } else { + logger.debug("CallController.requestTransaction requested transaction successfully") + onSuccess() + } + } + } } diff --git a/apps/ios/Shared/Views/Call/CallManager.swift b/apps/ios/Shared/Views/Call/CallManager.swift index a87fbc425..6e3066d1a 100644 --- a/apps/ios/Shared/Views/Call/CallManager.swift +++ b/apps/ios/Shared/Views/Call/CallManager.swift @@ -48,18 +48,31 @@ class CallManager { sharedKey: invitation.sharedKey ) call.speakerEnabled = invitation.callType.media == .video - m.activeCall = call - m.showCallView = true let useRelay = UserDefaults.standard.bool(forKey: DEFAULT_WEBRTC_POLICY_RELAY) let iceServers = getIceServers() logger.debug("answerIncomingCall useRelay: \(useRelay)") logger.debug("answerIncomingCall iceServers: \(String(describing: iceServers))") - m.callCommand = .start( - media: invitation.callType.media, - aesKey: invitation.sharedKey, - iceServers: iceServers, - relay: useRelay - ) + // When in active call user wants to accept another call, this can only work after delay (to hide and show activeCallView) + DispatchQueue.main.asyncAfter(deadline: .now() + (m.activeCall == nil ? 0 : 1)) { + m.activeCall = call + m.showCallView = true + + m.callCommand = .start( + media: invitation.callType.media, + aesKey: invitation.sharedKey, + iceServers: iceServers, + relay: useRelay + ) + } + } + + func enableMedia(media: CallMediaType, enable: Bool, callUUID: UUID) -> Bool { + if let call = ChatModel.shared.activeCall, call.callkitUUID == callUUID { + let m = ChatModel.shared + m.callCommand = .media(media: media, enable: enable) + return true + } + return false } func endCall(callUUID: UUID, completed: @escaping (Bool) -> Void) { @@ -82,17 +95,15 @@ class CallManager { } else { logger.debug("CallManager.endCall: ending call...") m.callCommand = .end + m.activeCall = nil m.showCallView = false + completed() Task { do { try await apiEndCall(call.contact) } catch { logger.error("CallController.provider apiEndCall error: \(responseError(error))") } - DispatchQueue.main.async { - m.activeCall = nil - completed() - } } } } diff --git a/apps/ios/Shared/Views/Call/IncomingCallView.swift b/apps/ios/Shared/Views/Call/IncomingCallView.swift index 0044434ef..c2d5dabd4 100644 --- a/apps/ios/Shared/Views/Call/IncomingCallView.swift +++ b/apps/ios/Shared/Views/Call/IncomingCallView.swift @@ -65,6 +65,7 @@ struct IncomingCallView: View { .padding(.vertical, 12) .frame(maxWidth: .infinity) .background(Color(uiColor: .tertiarySystemGroupedBackground)) + .onAppear { dismissAllSheets() } } private func callButton(_ text: LocalizedStringKey, _ image: String, _ color: Color, action: @escaping () -> Void) -> some View { diff --git a/apps/ios/Shared/Views/Call/WebRTCClient.swift b/apps/ios/Shared/Views/Call/WebRTCClient.swift index 582faef73..f64276f9b 100644 --- a/apps/ios/Shared/Views/Call/WebRTCClient.swift +++ b/apps/ios/Shared/Views/Call/WebRTCClient.swift @@ -47,6 +47,9 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg self.sendCallResponse = sendCallResponse self.activeCall = activeCall self.localRendererAspectRatio = localRendererAspectRatio + rtcAudioSession.useManualAudio = CallController.useCallKit() + rtcAudioSession.isAudioEnabled = !CallController.useCallKit() + logger.debug("WebRTCClient: rtcAudioSession has manual audio \(self.rtcAudioSession.useManualAudio) and audio enabled \(self.rtcAudioSession.isAudioEnabled)}") super.init() } @@ -239,6 +242,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg } func enableMedia(_ media: CallMediaType, _ enable: Bool) { + logger.debug("WebRTCClient: enabling media \(media.rawValue) \(enable)") media == .video ? setVideoEnabled(enable) : setAudioEnabled(enable) } @@ -361,6 +365,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg func endCall() { guard let call = activeCall.wrappedValue else { return } + logger.debug("WebRTCClient: ending the call") activeCall.wrappedValue = nil call.connection.close() call.connection.delegate = nil @@ -532,6 +537,7 @@ extension WebRTCClient { } func setSpeakerEnabledAndConfigureSession( _ enabled: Bool) { + logger.debug("WebRTCClient: configuring session with speaker enabled \(enabled)") audioQueue.async { [weak self] in guard let self = self else { return } self.rtcAudioSession.lockForConfiguration() @@ -543,6 +549,7 @@ extension WebRTCClient { try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue) try self.rtcAudioSession.overrideOutputAudioPort(enabled ? .speaker : .none) try self.rtcAudioSession.setActive(true) + logger.debug("WebRTCClient: configuring session with speaker enabled \(enabled) success") } catch let error { logger.debug("Error configuring AVAudioSession: \(error)") } @@ -550,6 +557,7 @@ extension WebRTCClient { } func audioSessionToDefaults() { + logger.debug("WebRTCClient: audioSession to defaults") audioQueue.async { [weak self] in guard let self = self else { return } self.rtcAudioSession.lockForConfiguration() @@ -561,8 +569,9 @@ extension WebRTCClient { try self.rtcAudioSession.setMode(AVAudioSession.Mode.default.rawValue) try self.rtcAudioSession.overrideOutputAudioPort(.none) try self.rtcAudioSession.setActive(false) + logger.debug("WebRTCClient: audioSession to defaults success") } catch let error { - logger.debug("Error configuring AVAudioSession: \(error)") + logger.debug("Error configuring AVAudioSession with defaults: \(error)") } } } diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift index 613ae37b4..e2ce4fc64 100644 --- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift @@ -140,7 +140,7 @@ struct AddGroupMembersView: View { private func rolePicker() -> some View { Picker("New member role", selection: $selectedRole) { ForEach(GroupMemberRole.allCases) { role in - if role <= groupInfo.membership.memberRole && role != .observer { + if role <= groupInfo.membership.memberRole { Text(role.text) } } diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift index 569be904a..ed8dfd922 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift @@ -45,6 +45,7 @@ struct GroupChatInfoView: View { Section { if groupInfo.canEdit { editGroupButton() + addOrEditWelcomeMessage() } groupPreferencesButton($groupInfo) } header: { @@ -215,6 +216,18 @@ struct GroupChatInfoView: View { } } + private func addOrEditWelcomeMessage() -> some View { + NavigationLink { + GroupWelcomeView(groupId: groupInfo.groupId, groupInfo: $groupInfo) + .navigationTitle("Welcome message") + .navigationBarTitleDisplayMode(.large) + } label: { + groupInfo.groupProfile.description == nil + ? Label("Add welcome message", systemImage: "plus.message") + : Label("Welcome message", systemImage: "message") + } + } + private func deleteGroupButton() -> some View { Button(role: .destructive) { alert = .deleteGroupAlert diff --git a/apps/ios/Shared/Views/Chat/Group/GroupLinkView.swift b/apps/ios/Shared/Views/Chat/Group/GroupLinkView.swift index 0c4c1c839..aeef91212 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupLinkView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupLinkView.swift @@ -34,15 +34,15 @@ struct GroupLinkView: View { Text("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.") .padding(.bottom) if let groupLink = groupLink { -// HStack { -// Text("Initial role") -// Picker("Initial role", selection: $groupLinkMemberRole) { -// ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in -// Text(role.text) -// } -// } -// } -// .frame(maxWidth: .infinity, alignment: .leading) + HStack { + Text("Initial role") + Picker("Initial role", selection: $groupLinkMemberRole) { + ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in + Text(role.text) + } + } + } + .frame(maxWidth: .infinity, alignment: .leading) QRCode(uri: groupLink) HStack { Button { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift b/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift new file mode 100644 index 000000000..7aa372d5d --- /dev/null +++ b/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift @@ -0,0 +1,84 @@ +// +// GroupWelcomeView.swift +// SimpleX (iOS) +// +// Created by Avently on 21/03/2022. +// Copyright © 2023 SimpleX Chat. All rights reserved. +// + +import SwiftUI +import SimpleXChat + +struct GroupWelcomeView: View { + @Environment(\.dismiss) var dismiss: DismissAction + @EnvironmentObject private var m: ChatModel + var groupId: Int64 + @Binding var groupInfo: GroupInfo + @State private var welcomeText: String = "" + @FocusState private var keyboardVisible: Bool + @State private var showSaveDialog = false + + var body: some View { + List { + Section { + TextEditor(text: $welcomeText) + .focused($keyboardVisible) + .padding(.horizontal, -5) + .padding(.top, -8) + .frame(height: 90, alignment: .topLeading) + .frame(maxWidth: .infinity, alignment: .leading) + } + Section { + saveButton() + } + } + .onAppear { + welcomeText = groupInfo.groupProfile.description ?? "" + } + .modifier(BackButton { + if welcomeText == groupInfo.groupProfile.description || (welcomeText == "" && groupInfo.groupProfile.description == nil) { + dismiss() + } else { + showSaveDialog = true + } + }) + .confirmationDialog("Save welcome message?", isPresented: $showSaveDialog) { + Button("Save and update group profile") { + save() + dismiss() + } + Button("Exit without saving") { dismiss() } + } + } + + @ViewBuilder private func saveButton() -> some View { + Button("Save and update group profile") { + save() + } + .disabled(welcomeText == groupInfo.groupProfile.description || (welcomeText == "" && groupInfo.groupProfile.description == nil)) + } + + private func save() { + Task { + do { + var welcome: String? = welcomeText.trimmingCharacters(in: .whitespacesAndNewlines) + if welcome?.count == 0 { + welcome = nil + } + var groupProfileUpdated = groupInfo.groupProfile + groupProfileUpdated.description = welcome + groupInfo = try await apiUpdateGroup(groupId, groupProfileUpdated) + m.updateGroup(groupInfo) + welcomeText = welcome ?? "" + } catch let error { + logger.error("apiUpdateGroup error: \(responseError(error))") + } + } + } +} + +struct GroupWelcomeView_Previews: PreviewProvider { + static var previews: some View { + GroupWelcomeView(groupId: 1, groupInfo: Binding.constant(GroupInfo.sampleData)) + } +} diff --git a/apps/ios/Shared/Views/ChatList/UserPicker.swift b/apps/ios/Shared/Views/ChatList/UserPicker.swift index b9f3c3bc4..76bac7a28 100644 --- a/apps/ios/Shared/Views/ChatList/UserPicker.swift +++ b/apps/ios/Shared/Views/ChatList/UserPicker.swift @@ -29,7 +29,9 @@ struct UserPicker: View { VStack(spacing: 0) { ScrollView { ScrollViewReader { sp in - let users = m.users.sorted { u, _ in u.user.activeUser } + let users = m.users + .filter({ u in u.user.activeUser || !u.user.hidden }) + .sorted { u, _ in u.user.activeUser } VStack(spacing: 0) { ForEach(users) { u in userView(u) @@ -97,14 +99,18 @@ struct UserPicker: View { userPickerVisible.toggle() } } else { - do { - try changeActiveUser_(user.userId) - userPickerVisible = false - } catch { - AlertManager.shared.showAlertMsg( - title: "Error switching profile!", - message: "Error: \(responseError(error))" - ) + Task { + do { + try await changeActiveUserAsync_(user.userId, viewPwd: nil) + await MainActor.run { userPickerVisible = false } + } catch { + await MainActor.run { + AlertManager.shared.showAlertMsg( + title: "Error switching profile!", + message: "Error: \(responseError(error))" + ) + } + } } } }, label: { diff --git a/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift b/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift index 22ab2a4ed..acc86ff78 100644 --- a/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift +++ b/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift @@ -73,11 +73,11 @@ struct DatabaseEncryptionView: View { } if !initialRandomDBPassphrase && m.chatDbEncrypted == true { - DatabaseKeyField(key: $currentKey, placeholder: "Current passphrase…", valid: validKey(currentKey)) + PassphraseField(key: $currentKey, placeholder: "Current passphrase…", valid: validKey(currentKey)) } - DatabaseKeyField(key: $newKey, placeholder: "New passphrase…", valid: validKey(newKey), showStrength: true) - DatabaseKeyField(key: $confirmNewKey, placeholder: "Confirm new passphrase…", valid: confirmNewKey == "" || newKey == confirmNewKey) + PassphraseField(key: $newKey, placeholder: "New passphrase…", valid: validKey(newKey), showStrength: true) + PassphraseField(key: $confirmNewKey, placeholder: "Confirm new passphrase…", valid: confirmNewKey == "" || newKey == confirmNewKey) settingsRow("lock.rotation") { Button("Update database passphrase") { @@ -255,7 +255,7 @@ struct DatabaseEncryptionView: View { } -struct DatabaseKeyField: View { +struct PassphraseField: View { @Binding var key: String var placeholder: LocalizedStringKey var valid: Bool diff --git a/apps/ios/Shared/Views/Database/DatabaseErrorView.swift b/apps/ios/Shared/Views/Database/DatabaseErrorView.swift index 5c6451e50..4830c8172 100644 --- a/apps/ios/Shared/Views/Database/DatabaseErrorView.swift +++ b/apps/ios/Shared/Views/Database/DatabaseErrorView.swift @@ -66,7 +66,7 @@ struct DatabaseErrorView: View { } private func databaseKeyField(onSubmit: @escaping () -> Void) -> some View { - DatabaseKeyField(key: $dbKey, placeholder: "Enter passphrase…", valid: validKey(dbKey), onSubmit: onSubmit) + PassphraseField(key: $dbKey, placeholder: "Enter passphrase…", valid: validKey(dbKey), onSubmit: onSubmit) } private func saveAndOpenButton() -> some View { diff --git a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift index adb625b93..06a32a7c2 100644 --- a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift +++ b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift @@ -129,6 +129,41 @@ private let versionDescriptions: [VersionDescription] = [ description: "Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" ) ] + ), + VersionDescription( + version: "v4.6", + features: [ + FeatureDescription( + icon: "lock", + title: "Hidden chat profiles", + description: "Protect your chat profiles with a password!" + ), + FeatureDescription( + icon: "phone.arrow.up.right", + title: "Audio and video calls", + description: "Fully re-implemented - work in background!" + ), + FeatureDescription( + icon: "flag", + title: "Group moderation", + description: "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" + ), + FeatureDescription( + icon: "plus.message", + title: "Group welcome message", + description: "Set the message shown to new members!" + ), + FeatureDescription( + icon: "battery.50", + title: "Further reduced battery usage", + description: "More improvements are coming soon!" + ), + FeatureDescription( + icon: "character", + title: "Chinese and Spanish interface", + description: "Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" + ), + ] ) ] @@ -182,6 +217,9 @@ struct WhatsNewView: View { pagination() } .padding() + .onChange(of: currentVersion) { _ in + currentVersionNav = currentVersion + } } private func featureDescription(_ icon: String, _ title: LocalizedStringKey, _ description: LocalizedStringKey) -> some View { diff --git a/apps/ios/Shared/Views/TerminalView.swift b/apps/ios/Shared/Views/TerminalView.swift index 5b063e8ba..4174e5b43 100644 --- a/apps/ios/Shared/Views/TerminalView.swift +++ b/apps/ios/Shared/Views/TerminalView.swift @@ -100,7 +100,7 @@ struct TerminalView: View { func sendMessage() { let cmd = ChatCommand.string(composeState.message) if composeState.message.starts(with: "/sql") && (!prefPerformLA || !developerTools) { - let resp = ChatResponse.chatCmdError(user: nil, chatError: ChatError.error(errorType: ChatErrorType.commandError(message: "Failed reading: empty"))) + let resp = ChatResponse.chatCmdError(user_: nil, chatError: ChatError.error(errorType: ChatErrorType.commandError(message: "Failed reading: empty"))) DispatchQueue.main.async { ChatModel.shared.addTerminalItem(.cmd(.now, cmd)) ChatModel.shared.addTerminalItem(.resp(.now, resp)) diff --git a/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift b/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift index 712dfe43c..1f648b09d 100644 --- a/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift +++ b/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift @@ -14,6 +14,8 @@ let interfaceStyles: [UIUserInterfaceStyle] = [.unspecified, .light, .dark] let interfaceStyleNames: [LocalizedStringKey] = ["System", "Light", "Dark"] +let appSettingsURL = URL(string: UIApplication.openSettingsURLString)! + struct AppearanceSettings: View { @EnvironmentObject var sceneDelegate: SceneDelegate @State private var iconLightTapped = false @@ -24,6 +26,16 @@ struct AppearanceSettings: View { var body: some View { VStack{ List { + Section(String("Language")) { + HStack { + Text(currentLanguage) + Spacer() + Button("Change") { + UIApplication.shared.open(appSettingsURL) + } + } + } + Section("App icon") { HStack { updateAppIcon(image: "icon-light", icon: nil, tapped: $iconLightTapped) @@ -62,6 +74,11 @@ struct AppearanceSettings: View { } } + private var currentLanguage: String { + let lang = Bundle.main.preferredLocalizations.first ?? "en" + return Locale.current.localizedString(forIdentifier: lang)?.localizedCapitalized ?? lang + } + private func updateAppIcon(image: String, icon: String?, tapped: Binding) -> some View { Image(image) .resizable() diff --git a/apps/ios/Shared/Views/UserSettings/CallSettings.swift b/apps/ios/Shared/Views/UserSettings/CallSettings.swift index 254820be3..ca43faab0 100644 --- a/apps/ios/Shared/Views/UserSettings/CallSettings.swift +++ b/apps/ios/Shared/Views/UserSettings/CallSettings.swift @@ -7,22 +7,26 @@ // import SwiftUI +import SimpleXChat struct CallSettings: View { @AppStorage(DEFAULT_WEBRTC_POLICY_RELAY) private var webrtcPolicyRelay = true + @AppStorage(GROUP_DEFAULT_CALL_KIT_ENABLED, store: UserDefaults(suiteName: APP_GROUP_NAME)!) private var callKitEnabled = true + @AppStorage(DEFAULT_CALL_KIT_CALLS_IN_RECENTS) private var callKitCallsInRecents = false + @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false + private let allowChangingCallsHistory = false var body: some View { VStack { List { Section { - Toggle("Connect via relay", isOn: $webrtcPolicyRelay) - NavigationLink { RTCServers() .navigationTitle("Your ICE servers") } label: { Text("WebRTC ICE servers") } + Toggle("Always use relay", isOn: $webrtcPolicyRelay) } header: { Text("Settings") } footer: { @@ -33,12 +37,29 @@ struct CallSettings: View { } } + if !CallController.isInChina { + Section { + Toggle("Use iOS call interface", isOn: $callKitEnabled) + Toggle("Show calls in phone history", isOn: $callKitCallsInRecents) + .disabled(!callKitEnabled) + .onChange(of: callKitCallsInRecents) { value in + CallController.shared.showInRecents(value) + } + } header: { + Text("Interface") + } footer: { + if callKitEnabled { + Text("You can accept calls from lock screen, without device and app authentication.") + } else { + Text("Authentication is required before the call is connected, but you may miss calls.") + } + } + } + Section("Limitations") { VStack(alignment: .leading, spacing: 8) { textListItem("1.", "Do NOT use SimpleX for emergency calls.") - textListItem("2.", "The microphone does not work when the app is in the background.") - textListItem("3.", "To prevent the call interruption, enable Do Not Disturb mode.") - textListItem("4.", "If the video fails to connect, flip the camera to resolve it.") + textListItem("2.", "Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.") } .font(.callout) .padding(.vertical, 8) diff --git a/apps/ios/Shared/Views/UserSettings/HiddenProfileView.swift b/apps/ios/Shared/Views/UserSettings/HiddenProfileView.swift new file mode 100644 index 000000000..d01fee92f --- /dev/null +++ b/apps/ios/Shared/Views/UserSettings/HiddenProfileView.swift @@ -0,0 +1,84 @@ +// +// ProfilePrivacyView.swift +// SimpleX (iOS) +// +// Created by Evgeny on 17/03/2023. +// Copyright © 2023 SimpleX Chat. All rights reserved. +// + +import SwiftUI +import SimpleXChat + +struct HiddenProfileView: View { + @State var user: User + @Binding var profileHidden: Bool + @EnvironmentObject private var m: ChatModel + @Environment(\.dismiss) var dismiss: DismissAction + @State private var hidePassword = "" + @State private var confirmHidePassword = "" + @State private var saveErrorAlert = false + @State private var savePasswordError: String? + + var body: some View { + List { + Text("Hide profile") + .font(.title) + .bold() + .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)) + .listRowBackground(Color.clear) + + Section() { + ProfilePreview(profileOf: user) + .padding(.leading, -8) + } + + Section { + PassphraseField(key: $hidePassword, placeholder: "Password to show", valid: true, showStrength: true) + PassphraseField(key: $confirmHidePassword, placeholder: "Confirm password", valid: confirmValid) + + settingsRow("lock") { + Button("Save profile password") { + Task { + do { + let u = try await apiHideUser(user.userId, viewPwd: hidePassword) + await MainActor.run { + m.updateUser(u) + dismiss() + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + withAnimation { profileHidden = true } + } + } + } catch let error { + saveErrorAlert = true + savePasswordError = responseError(error) + } + } + } + } + .disabled(saveDisabled) + } header: { + Text("Hidden profile password") + } footer: { + Text("To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.") + .font(.body) + .padding(.top, 8) + } + } + .alert(isPresented: $saveErrorAlert) { + Alert( + title: Text("Error saving user password"), + message: Text(savePasswordError ?? "") + ) + } + } + + var confirmValid: Bool { confirmHidePassword == "" || hidePassword == confirmHidePassword } + + var saveDisabled: Bool { hidePassword == "" || confirmHidePassword == "" || !confirmValid } +} + +struct ProfilePrivacyView_Previews: PreviewProvider { + static var previews: some View { + HiddenProfileView(user: User.sampleData, profileHidden: Binding.constant(false)) + } +} diff --git a/apps/ios/Shared/Views/UserSettings/SMPServersView.swift b/apps/ios/Shared/Views/UserSettings/SMPServersView.swift index 7cea87cb6..ab6b95477 100644 --- a/apps/ios/Shared/Views/UserSettings/SMPServersView.swift +++ b/apps/ios/Shared/Views/UserSettings/SMPServersView.swift @@ -12,6 +12,7 @@ import SimpleXChat private let howToUrl = URL(string: "https://github.com/simplex-chat/simplex-chat/blob/stable/docs/SERVER.md")! struct SMPServersView: View { + @Environment(\.dismiss) var dismiss: DismissAction @EnvironmentObject private var m: ChatModel @Environment(\.editMode) private var editMode @State private var servers = ChatModel.shared.userSMPServers ?? [] @@ -20,6 +21,7 @@ struct SMPServersView: View { @State private var showScanSMPServer = false @State private var testing = false @State private var alert: SMPServerAlert? = nil + @State private var showSaveDialog = false var body: some View { ZStack { @@ -87,6 +89,20 @@ struct SMPServersView: View { .sheet(isPresented: $showScanSMPServer) { ScanSMPServer(servers: $servers) } + .modifier(BackButton { + if saveDisabled { + dismiss() + } else { + showSaveDialog = true + } + }) + .confirmationDialog("Save servers?", isPresented: $showSaveDialog) { + Button("Save") { + saveSMPServers() + dismiss() + } + Button("Exit without saving") { dismiss() } + } .alert(item: $alert) { a in switch a { case let .testsFailed(fs): diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index cb08dab92..cb58d2fea 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -22,6 +22,7 @@ let DEFAULT_PERFORM_LA = "performLocalAuthentication" let DEFAULT_NOTIFICATION_ALERT_SHOWN = "notificationAlertShown" let DEFAULT_WEBRTC_POLICY_RELAY = "webrtcPolicyRelay" let DEFAULT_WEBRTC_ICE_SERVERS = "webrtcICEServers" +let DEFAULT_CALL_KIT_CALLS_IN_RECENTS = "callKitCallsInRecents" let DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages" let DEFAULT_PRIVACY_LINK_PREVIEWS = "privacyLinkPreviews" let DEFAULT_PRIVACY_SIMPLEX_LINK_MODE = "privacySimplexLinkMode" @@ -39,6 +40,8 @@ let DEFAULT_ACCENT_COLOR_BLUE = "accentColorBlue" let DEFAULT_USER_INTERFACE_STYLE = "userInterfaceStyle" let DEFAULT_CONNECT_VIA_LINK_TAB = "connectViaLinkTab" let DEFAULT_LIVE_MESSAGE_ALERT_SHOWN = "liveMessageAlertShown" +let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice" +let DEFAULT_SHOW_MUTE_PROFILE_ALERT = "showMuteProfileAlert" let DEFAULT_WHATS_NEW_VERSION = "defaultWhatsNewVersion" let appDefaults: [String: Any] = [ @@ -47,6 +50,7 @@ let appDefaults: [String: Any] = [ DEFAULT_PERFORM_LA: false, DEFAULT_NOTIFICATION_ALERT_SHOWN: false, DEFAULT_WEBRTC_POLICY_RELAY: true, + DEFAULT_CALL_KIT_CALLS_IN_RECENTS: false, DEFAULT_PRIVACY_ACCEPT_IMAGES: true, DEFAULT_PRIVACY_LINK_PREVIEWS: true, DEFAULT_PRIVACY_SIMPLEX_LINK_MODE: "description", @@ -60,7 +64,9 @@ let appDefaults: [String: Any] = [ DEFAULT_ACCENT_COLOR_BLUE: 1.000, DEFAULT_USER_INTERFACE_STYLE: 0, DEFAULT_CONNECT_VIA_LINK_TAB: "scan", - DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false + DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false, + DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true, + DEFAULT_SHOW_MUTE_PROFILE_ALERT: true, ] enum SimpleXLinkMode: String, Identifiable { diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift index d78b7ea66..01de1a8b3 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift @@ -9,19 +9,31 @@ import SimpleXChat struct UserProfilesView: View { @EnvironmentObject private var m: ChatModel @Environment(\.editMode) private var editMode + @AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false + @AppStorage(DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE) private var showHiddenProfilesNotice = true + @AppStorage(DEFAULT_SHOW_MUTE_PROFILE_ALERT) private var showMuteProfileAlert = true @State private var showDeleteConfirmation = false - @State private var userToDelete: Int? + @State private var userToDelete: UserInfo? @State private var alert: UserProfilesAlert? - @State var authorized = !UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA) + @State private var authorized = !UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA) + @State private var searchTextOrPassword = "" + @State private var selectedUser: User? + @State private var profileHidden = false private enum UserProfilesAlert: Identifiable { - case deleteUser(index: Int, delSMPQueues: Bool) + case deleteUser(userInfo: UserInfo, delSMPQueues: Bool) + case cantDeleteLastUser + case hiddenProfilesNotice + case muteProfileAlert case activateUserError(error: String) case error(title: LocalizedStringKey, error: LocalizedStringKey = "") var id: String { switch self { - case let .deleteUser(index, delSMPQueues): return "deleteUser \(index) \(delSMPQueues)" + case let .deleteUser(userInfo, delSMPQueues): return "deleteUser \(userInfo.user.userId) \(delSMPQueues)" + case .cantDeleteLastUser: return "cantDeleteLastUser" + case .hiddenProfilesNotice: return "hiddenProfilesNotice" + case .muteProfileAlert: return "muteProfileAlert" case let .activateUserError(err): return "activateUserError \(err)" case let .error(title, _): return "error \(title)" } @@ -41,45 +53,103 @@ struct UserProfilesView: View { private func userProfilesView() -> some View { List { + if profileHidden { + Button { + withAnimation { profileHidden = false } + } label: { + Label("Enter password above to show!", systemImage: "lock.open") + } + } Section { - ForEach(m.users) { u in + let users = filteredUsers() + ForEach(users) { u in userView(u.user) } .onDelete { indexSet in if let i = indexSet.first { - showDeleteConfirmation = true - userToDelete = i + if m.users.count > 1 && (m.users[i].user.hidden || visibleUsersCount > 1) { + showDeleteConfirmation = true + userToDelete = users[i] + } else { + alert = .cantDeleteLastUser + } } } - NavigationLink { - CreateProfile() - } label: { - Label("Add profile", systemImage: "plus") + if searchTextOrPassword == "" { + NavigationLink { + CreateProfile() + } label: { + Label("Add profile", systemImage: "plus") + } + .frame(height: 44) + .padding(.vertical, 4) } - .frame(height: 44) - .padding(.vertical, 4) } footer: { - Text("Your chat profiles are stored locally, only on your device.") + Text("Tap to activate profile.") + .font(.body) + .padding(.top, 8) + } } .toolbar { EditButton() } .navigationTitle("Your chat profiles") + .searchable(text: $searchTextOrPassword, placement: .navigationBarDrawer(displayMode: .always)) + .autocorrectionDisabled(true) + .textInputAutocapitalization(.never) + .onAppear { + if showHiddenProfilesNotice && m.users.count > 1 { + alert = .hiddenProfilesNotice + } + } .confirmationDialog("Delete chat profile?", isPresented: $showDeleteConfirmation, titleVisibility: .visible) { deleteModeButton("Profile and server connections", true) deleteModeButton("Local profile data only", false) } + .sheet(item: $selectedUser) { user in + HiddenProfileView(user: user, profileHidden: $profileHidden) + } + .onChange(of: profileHidden) { _ in + DispatchQueue.main.asyncAfter(deadline: .now() + 10) { + withAnimation { profileHidden = false } + } + } .alert(item: $alert) { alert in switch alert { - case let .deleteUser(index, delSMPQueues): + case let .deleteUser(userInfo, delSMPQueues): return Alert( title: Text("Delete user profile?"), message: Text("All chats and messages will be deleted - this cannot be undone!"), primaryButton: .destructive(Text("Delete")) { - removeUser(index, delSMPQueues) + Task { await removeUser(userInfo, delSMPQueues) } }, secondaryButton: .cancel() ) + case .cantDeleteLastUser: + return Alert( + title: Text("Can't delete user profile!"), + message: m.users.count > 1 + ? Text("There should be at least one visible user profile.") + : Text("There should be at least one user profile.") + ) + case .hiddenProfilesNotice: + return Alert( + title: Text("Make profile private!"), + message: Text("You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled."), + primaryButton: .default(Text("Don't show again")) { + showHiddenProfilesNotice = false + }, + secondaryButton: .default(Text("Ok")) + ) + case .muteProfileAlert: + return Alert( + title: Text("Muted when inactive!"), + message: Text("You will still receive calls and notifications from muted profiles when they are active."), + primaryButton: .default(Text("Don't show again")) { + showMuteProfileAlert = false + }, + secondaryButton: .default(Text("Ok")) + ) case let .activateUserError(error: err): return Alert( title: Text("Error switching profile!"), @@ -91,43 +161,66 @@ struct UserProfilesView: View { } } + private func filteredUsers() -> [UserInfo] { + let s = searchTextOrPassword.trimmingCharacters(in: .whitespaces) + let lower = s.localizedLowercase + return m.users.filter { u in + if (u.user.activeUser || u.user.viewPwdHash == nil) && (s == "" || u.user.chatViewName.localizedLowercase.contains(lower)) { + return true + } + if let ph = u.user.viewPwdHash { + return s != "" && chatPasswordHash(s, ph.salt) == ph.hash + } + return false + } + } + + private var visibleUsersCount: Int { + m.users.filter({ u in !u.user.hidden }).count + } + + private func userViewPassword(_ user: User) -> String? { + user.activeUser || !user.hidden ? nil : searchTextOrPassword + } + private func deleteModeButton(_ title: LocalizedStringKey, _ delSMPQueues: Bool) -> some View { Button(title, role: .destructive) { - if let i = userToDelete { - alert = .deleteUser(index: i, delSMPQueues: delSMPQueues) + if let userInfo = userToDelete { + alert = .deleteUser(userInfo: userInfo, delSMPQueues: delSMPQueues) } } } - private func removeUser(_ index: Int, _ delSMPQueues: Bool) { - if index >= m.users.count { return } + private func removeUser(_ userInfo: UserInfo, _ delSMPQueues: Bool) async { do { - let u = m.users[index].user + let u = userInfo.user if u.activeUser { - if let newActive = m.users.first(where: { !$0.user.activeUser }) { - try changeActiveUser_(newActive.user.userId) - try deleteUser(u.userId) + if let newActive = m.users.first(where: { u in !u.user.activeUser && !u.user.hidden }) { + try await changeActiveUserAsync_(newActive.user.userId, viewPwd: nil) + try await deleteUser(u) } } else { - try deleteUser(u.userId) + try await deleteUser(u) } } catch let error { let a = getErrorAlert(error, "Error deleting user profile") alert = .error(title: a.title, error: a.message) } - func deleteUser(_ userId: Int64) throws { - try apiDeleteUser(userId, delSMPQueues) - m.users.remove(at: index) + func deleteUser(_ user: User) async throws { + try await apiDeleteUser(user.userId, delSMPQueues, viewPwd: userViewPassword(user)) + await MainActor.run { withAnimation { m.removeUser(user) } } } } private func userView(_ user: User) -> some View { Button { - do { - try changeActiveUser_(user.userId) - } catch { - alert = .activateUserError(error: responseError(error)) + Task { + do { + try await changeActiveUserAsync_(user.userId, viewPwd: userViewPassword(user)) + } catch { + await MainActor.run { alert = .activateUserError(error: responseError(error)) } + } } } label: { HStack { @@ -137,14 +230,75 @@ struct UserProfilesView: View { .padding(.trailing, 12) Text(user.chatViewName) Spacer() - Image(systemName: "checkmark") - .foregroundColor(user.activeUser ? .primary : .clear) + if user.activeUser { + Image(systemName: "checkmark").foregroundColor(.primary) + } else if user.hidden { + Image(systemName: "lock").foregroundColor(.secondary) + } else if !user.showNtfs { + Image(systemName: "speaker.slash").foregroundColor(.secondary) + } else { + Image(systemName: "checkmark").foregroundColor(.clear) + } } } .disabled(user.activeUser) .foregroundColor(.primary) .deleteDisabled(m.users.count <= 1) + .swipeActions(edge: .leading, allowsFullSwipe: true) { + if user.hidden { + Button("Unhide") { + setUserPrivacy(user) { try await apiUnhideUser(user.userId, viewPwd: userViewPassword(user)) } + } + .tint(.green) + } else { + if visibleUsersCount > 1 && prefPerformLA { + Button("Hide") { + selectedUser = user + } + .tint(.gray) + } + Group { + if user.showNtfs { + Button("Mute") { + setUserPrivacy(user, successAlert: showMuteProfileAlert ? .muteProfileAlert : nil) { + try await apiMuteUser(user.userId, viewPwd: userViewPassword(user)) + } + } + } else { + Button("Unmute") { + setUserPrivacy(user) { try await apiUnmuteUser(user.userId, viewPwd: userViewPassword(user)) } + } + } + } + .tint(.accentColor) + } + } } + + private func setUserPrivacy(_ user: User, successAlert: UserProfilesAlert? = nil, _ api: @escaping () async throws -> User) { + Task { + do { + let u = try await api() + await MainActor.run { + withAnimation { m.updateUser(u) } + if successAlert != nil { + alert = successAlert + } + } + } catch let error { + let a = getErrorAlert(error, "Error updating user privacy") + alert = .error(title: a.title, error: a.message) + } + } + } +} + +public func chatPasswordHash(_ pwd: String, _ salt: String) -> String { + var cPwd = pwd.cString(using: .utf8)! + var cSalt = salt.cString(using: .utf8)! + let cHash = chat_password_hash(&cPwd, &cSalt)! + let hash = fromCString(cHash) + return hash } struct UserProfilesView_Previews: PreviewProvider { diff --git a/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff b/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff index bf42c4057..678d25b4b 100644 --- a/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff +++ b/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff @@ -5,97 +5,120 @@ - + + + No comment provided by engineer. - + + No comment provided by engineer. - + + No comment provided by engineer. - + + No comment provided by engineer. - + ( + ( No comment provided by engineer. - + (can be copied) + (يمكن نسخها) No comment provided by engineer. - + !1 colored! + ! 1 ملون! No comment provided by engineer. - + #secret# + #سر# No comment provided by engineer. - + %@ + %@ No comment provided by engineer. - + %@ %@ + %@ %@ No comment provided by engineer. - + %@ / %@ + %@ / %@ No comment provided by engineer. - + %@ is connected! + %@ متصل! notification title - + %@ is not verified + %@ لم يتم التحقق منها No comment provided by engineer. - + %@ is verified + %@ تم التحقق منه No comment provided by engineer. - + %@ wants to connect! + %@ يريد الاتصال! notification title - + %d days + %d أيام message ttl - + %d hours + %d ساعات message ttl - + %d min + %d دقيقة message ttl - + %d months + %d شهور message ttl - + %d sec + %d ثانية message ttl %d skipped message(s) integrity error chat item - + %lld + %lld No comment provided by engineer. - + %lld %@ + %lld %@ No comment provided by engineer. @@ -106,182 +129,226 @@ %lld file(s) with total size of %@ No comment provided by engineer. - + %lld members + %lld أعضاء No comment provided by engineer. %lld second(s) No comment provided by engineer. - + %lldd + %lldd No comment provided by engineer. - + %lldh + %lldh No comment provided by engineer. - + %lldk + %lldk No comment provided by engineer. - + %lldm + %lldm No comment provided by engineer. - + %lldmth + %lldmth No comment provided by engineer. - + %llds + %llds No comment provided by engineer. - + %lldw + %lldw No comment provided by engineer. - + ( + ( No comment provided by engineer. - + ) + ) No comment provided by engineer. - + **Add new contact**: to create your one-time QR Code or link for your contact. + ** إضافة جهة اتصال جديدة **: لإنشاء رمز QR لمرة واحدة أو رابط جهة الاتصال الخاصة بك. No comment provided by engineer. - + **Create link / QR code** for your contact to use. + ** أنشئ رابطًا / رمز QR ** لتستخدمه جهة الاتصال الخاصة بك. No comment provided by engineer. - + **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. + ** المزيد من الخصوصية **: تحقق من الرسائل الجديدة كل 20 دقيقة. تتم مشاركة رمز الجهاز مع خادم SimpleX Chat ، ولكن ليس عدد جهات الاتصال أو الرسائل لديك. No comment provided by engineer. - + **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). + ** الأكثر خصوصية **: لا تستخدم خادم إشعارات SimpleX Chat ، وتحقق من الرسائل بشكل دوري في الخلفية (يعتمد على عدد مرات استخدامك للتطبيق). No comment provided by engineer. - + **Paste received link** or open it in the browser and tap **Open in mobile app**. + ** الصق الرابط المستلم ** أو افتحه في المتصفح واضغط على ** فتح في تطبيق الهاتف **. No comment provided by engineer. - + **Please note**: you will NOT be able to recover or change passphrase if you lose it. + ** يرجى ملاحظة **: لن تتمكن من استعادة أو تغيير عبارة المرور إذا فقدتها. No comment provided by engineer. - + **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. + ** موصى به **: يتم إرسال رمز الجهاز والإشعارات إلى خادم إشعارات SimpleX Chat ، ولكن ليس محتوى الرسالة أو حجمها أو مصدرها. No comment provided by engineer. - + **Scan QR code**: to connect to your contact in person or via video call. + ** مسح رمز QR **: للاتصال بجهة الاتصال الخاصة بك شخصيًا أو عبر مكالمة فيديو. No comment provided by engineer. - + **Warning**: Instant push notifications require passphrase saved in Keychain. + ** تحذير **: تتطلب الإشعارات الفورية حفظ عبارة المرور في Keychain. No comment provided by engineer. - + **e2e encrypted** audio call + ** تشفير ** e2e ** مكالمة صوتية No comment provided by engineer. - + **e2e encrypted** video call + ** مكالمة فيديو ** مشفرة e2e ** No comment provided by engineer. - + \*bold* + \*عريض* No comment provided by engineer. - + , + , No comment provided by engineer. - + . + . No comment provided by engineer. - + 1 day + يوم 1 message ttl - + 1 hour + 1 ساعة message ttl - + 1 month + شهر 1 message ttl - + 1 week + اسبوع 1 message ttl - + 2 weeks + 2 أسابيع message ttl - + 6 + 6 No comment provided by engineer. - + : + : No comment provided by engineer. - + A new contact + جهة اتصال جديدة notification title - + A random profile will be sent to the contact that you received this link from + سيتم إرسال ملف تعريف عشوائي إلى جهة الاتصال التي تلقيت منها هذا الرابط No comment provided by engineer. - + A random profile will be sent to your contact + سيتم إرسال ملف تعريف عشوائي إلى جهة الاتصال الخاصة بك No comment provided by engineer. - + A separate TCP connection will be used **for each chat profile you have in the app**. + سيتم استخدام اتصال TCP منفصل ** لكل ملف تعريف دردشة لديك في التطبيق **. No comment provided by engineer. - + A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. + سيتم استخدام اتصال TCP منفصل ** لكل جهة اتصال وعضو في المجموعة **. +** يرجى الملاحظة **: إذا كان لديك العديد من التوصيلات ، فقد يكون استهلاك البطارية وحركة المرور أعلى بكثير وقد تفشل بعض الاتصالات. No comment provided by engineer. - + About SimpleX + عن SimpleX No comment provided by engineer. - + About SimpleX Chat + عن SimpleX Chat No comment provided by engineer. - + Accent color + لون التمييز No comment provided by engineer. - + Accept + قبول accept contact request via notification accept incoming call via notification - + Accept contact + قبول الاتصال No comment provided by engineer. - + Accept contact request from %@? + قبول طلب الاتصال من %@? notification body - + Accept incognito + قبول التخفي No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index b6611764d..364fba900 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -2,1940 +2,2041 @@
- +
- + - + No comment provided by engineer. - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + ( - ( + ( No comment provided by engineer. - + (can be copied) - (lze kopírovat) + (lze kopírovat) No comment provided by engineer. - + !1 colored! - !1 barevný! + !1 barevný! No comment provided by engineer. - + #secret# - #tajný# + #tajný# No comment provided by engineer. - + %@ - %@ + %@ No comment provided by engineer. - + %@ %@ - %@ %@ + %@ %@ No comment provided by engineer. - + %@ / %@ - %@ / %@ + %@ / %@ No comment provided by engineer. - + %@ is connected! - %@ je připojen! + %@ je připojen! notification title - + %@ is not verified - %@ není ověřeno + %@ není ověřeno No comment provided by engineer. - + %@ is verified - %@ je ověřený + %@ je ověřený No comment provided by engineer. - + %@ wants to connect! - %@ se chce připojit! + %@ se chce připojit! notification title - + %d days - %d dní + %d dní message ttl - + %d hours - %d hodin + %d hodin message ttl - + %d min - %d minuty + %d minuty message ttl - + %d months - %d měsíce + %d měsíce message ttl - + %d sec - %d sek + %d sek message ttl - + %d skipped message(s) - %d přeskočené zprávy + %d přeskočené zprávy integrity error chat item - + %lld - %lld + %lld No comment provided by engineer. - + %lld %@ - %lld %@ + %lld %@ No comment provided by engineer. - + %lld contact(s) selected - %lld kontakt(y) vybrané + %lld kontakt(y) vybrané No comment provided by engineer. - + %lld file(s) with total size of %@ - %lld soubor(y) s celkovou velikostí %@ + %lld soubor(y) s celkovou velikostí %@ No comment provided by engineer. - + %lld members - %lld členové + %lld členové No comment provided by engineer. - + %lld second(s) - %lld vteřin + %lld vteřin No comment provided by engineer. - + %lldd - %lldd + %lldd No comment provided by engineer. - + %lldh - %lldh + %lldh No comment provided by engineer. - + %lldk - %lldk + %lldk No comment provided by engineer. - + %lldm - %lldm + %lldm No comment provided by engineer. - + %lldmth - %lldmth + %lldmth No comment provided by engineer. - + %llds - %llds + %llds No comment provided by engineer. - + %lldw - %lldw + %lldw No comment provided by engineer. - + ( - ( + ( No comment provided by engineer. - + ) - ) + ) No comment provided by engineer. - + **Add new contact**: to create your one-time QR Code or link for your contact. - **Přidat nový kontakt**: pro vytvoření jednorázového QR kódu nebo odkazu pro váš kontakt. + **Přidat nový kontakt**: pro vytvoření jednorázového QR kódu nebo odkazu pro váš kontakt. No comment provided by engineer. - + **Create link / QR code** for your contact to use. - **Vytvořte odkaz / QR kód** pro váš kontakt. + **Vytvořte odkaz / QR kód** pro váš kontakt. No comment provided by engineer. - + **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. - **Soukromější**: kontrolovat nové zprávy každých 20 minut. Token zařízení je sdílen se serverem SimpleX Chat, ale ne kolik máte kontaktů nebo zpráv. + **Soukromější**: kontrolovat nové zprávy každých 20 minut. Token zařízení je sdílen se serverem SimpleX Chat, ale ne kolik máte kontaktů nebo zpráv. No comment provided by engineer. - + **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). - **Nejsoukromější**: nepoužívejte server oznámení SimpleX Chat, pravidelně kontrolujte zprávy na pozadí (závisí na tom, jak často aplikaci používáte). + **Nejsoukromější**: nepoužívejte server oznámení SimpleX Chat, pravidelně kontrolujte zprávy na pozadí (závisí na tom, jak často aplikaci používáte). No comment provided by engineer. - + **Paste received link** or open it in the browser and tap **Open in mobile app**. - **Vložte přijatý odkaz** nebo jej otevřete v prohlížeči a klepněte na **Otevřít v mobilní aplikaci**. + **Vložte přijatý odkaz** nebo jej otevřete v prohlížeči a klepněte na **Otevřít v mobilní aplikaci**. No comment provided by engineer. - + **Please note**: you will NOT be able to recover or change passphrase if you lose it. - **Upozornění**: Pokud heslo ztratíte, NEBUDETE jej moci obnovit ani změnit. + **Upozornění**: Pokud heslo ztratíte, NEBUDETE jej moci obnovit ani změnit. No comment provided by engineer. - + **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. - **Doporučeno**: Token zařízení a oznámení se odesílají na oznamovací server SimpleX Chat, ale nikoli obsah, velikost nebo od koho jsou zprávy. + **Doporučeno**: Token zařízení a oznámení se odesílají na oznamovací server SimpleX Chat, ale nikoli obsah, velikost nebo od koho jsou zprávy. No comment provided by engineer. - + **Scan QR code**: to connect to your contact in person or via video call. - ** Naskenujte QR kód**: pro připojení ke kontaktu osobně nebo prostřednictvím videohovoru. + ** Naskenujte QR kód**: pro připojení ke kontaktu osobně nebo prostřednictvím videohovoru. No comment provided by engineer. - + **Warning**: Instant push notifications require passphrase saved in Keychain. - **Upozornění**: Okamžitě doručovaná oznámení vyžadují přístupové heslo uložené v Klíčence. + **Upozornění**: Okamžitě doručovaná oznámení vyžadují přístupové heslo uložené v Klíčence. No comment provided by engineer. - + **e2e encrypted** audio call - **e2e šifrovaný** audio hovor + **e2e šifrovaný** audio hovor No comment provided by engineer. - + **e2e encrypted** video call - **e2e šifrovaný** videohovor + **e2e šifrovaný** videohovor No comment provided by engineer. - + \*bold* - \*tučně* + \*tučně* No comment provided by engineer. - + , - , + , No comment provided by engineer. - + . - . + . No comment provided by engineer. - + 1 day - 1 den + 1 den message ttl - + 1 hour - 1 hodina + 1 hodina message ttl - + 1 month - 1 měsíc + 1 měsíc message ttl - + 1 week - 1 týden + 1 týden message ttl - + 2 weeks - 2 týdny + 2 týdny message ttl - + 6 - 6 + 6 No comment provided by engineer. - + : - : + : No comment provided by engineer. - + A new contact - Nový kontakt + Nový kontakt notification title - + A random profile will be sent to the contact that you received this link from - Náhodný profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz + Náhodný profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz No comment provided by engineer. - + A random profile will be sent to your contact - Vašemu kontaktu bude zaslán náhodný profil + Vašemu kontaktu bude zaslán náhodný profil No comment provided by engineer. - + A separate TCP connection will be used **for each chat profile you have in the app**. - Samostatné připojení TCP bude použito **pro každý chat profil, který máte v aplikaci**. + Samostatné připojení TCP bude použito **pro každý chat profil, který máte v aplikaci**. No comment provided by engineer. - + A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. - **pro každý kontakt a člena skupiny** bude použito samostatné připojení TCP. + **pro každý kontakt a člena skupiny** bude použito samostatné připojení TCP. **Upozornění**: Pokud máte mnoho připojení, spotřeba baterie a provozu může být podstatně vyšší a některá připojení mohou selhat. No comment provided by engineer. - + About SimpleX - O SimpleX + O SimpleX No comment provided by engineer. - + About SimpleX Chat - O SimpleX chat + O SimpleX chat No comment provided by engineer. - + Accent color - Barva přízvuku + Zbarvení No comment provided by engineer. - + Accept - Přijmout + Přijmout accept contact request via notification accept incoming call via notification - + Accept contact - Přijmout kontakt + Přijmout kontakt No comment provided by engineer. - + Accept contact request from %@? - Přijmout žádost o kontakt od %@? + Přijmout žádost o kontakt od %@? notification body - + Accept incognito - Přijmout inkognito + Přijmout inkognito No comment provided by engineer. - + Accept requests - Přijímat žádosti + Přijímat žádosti No comment provided by engineer. - + Add preset servers - Přidejte přednastavené servery + Přidejte přednastavené servery No comment provided by engineer. - + Add profile - Přidat profil + Přidat profil No comment provided by engineer. - + Add servers by scanning QR codes. - Přidejte servery skenováním QR kódů. + Přidejte servery skenováním QR kódů. No comment provided by engineer. - + Add server… - Přidat server… + Přidat server… No comment provided by engineer. - + Add to another device - Přidat do jiného zařízení + Přidat do jiného zařízení No comment provided by engineer. - + + Add welcome message + No comment provided by engineer. + + Admins can create the links to join groups. - Správci mohou vytvářet odkazy pro připojení ke skupinám. + Správci mohou vytvářet odkazy pro připojení ke skupinám. No comment provided by engineer. - + Advanced network settings - Pokročilá nastavení sítě + Pokročilá nastavení sítě No comment provided by engineer. - + All chats and messages will be deleted - this cannot be undone! - Všechny chaty a zprávy budou smazány – tuto akci nelze vrátit zpět! + Všechny chaty a zprávy budou smazány – tuto akci nelze vrátit zpět! No comment provided by engineer. - + All group members will remain connected. - Všichni členové skupiny zůstanou připojeni. + Všichni členové skupiny zůstanou připojeni. No comment provided by engineer. - + All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. - Všechny zprávy budou smazány – tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás. + Všechny zprávy budou smazány – tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás. No comment provided by engineer. - + All your contacts will remain connected - Všechny vaše kontakty zůstanou připojeny + Všechny vaše kontakty zůstanou připojeny No comment provided by engineer. - + Allow - Povolit + Povolit No comment provided by engineer. - + Allow disappearing messages only if your contact allows it to you. - Povolte mizící zprávy, pouze pokud vám to váš kontakt dovolí. + Povolte mizící zprávy, pouze pokud vám to váš kontakt dovolí. No comment provided by engineer. - + Allow irreversible message deletion only if your contact allows it to you. - Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí. + Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí. No comment provided by engineer. - + Allow sending direct messages to members. - Povolit odesílání přímých zpráv členům. + Povolit odesílání přímých zpráv členům. No comment provided by engineer. - + Allow sending disappearing messages. - Povolit odesílání mizících zpráv. + Povolit odesílání mizících zpráv. No comment provided by engineer. - + Allow to irreversibly delete sent messages. - Povolit nevratné smazání odeslaných zpráv. + Povolit nevratné smazání odeslaných zpráv. No comment provided by engineer. - + Allow to send voice messages. - Povolit odesílání hlasových zpráv. + Povolit odesílání hlasových zpráv. No comment provided by engineer. - + Allow voice messages only if your contact allows them. - Povolte hlasové zprávy, pouze pokud je váš kontakt povolí. + Povolte hlasové zprávy, pouze pokud je váš kontakt povolí. No comment provided by engineer. - + Allow voice messages? - Povolit hlasové zprávy? + Povolit hlasové zprávy? No comment provided by engineer. - + Allow your contacts to irreversibly delete sent messages. - Umožněte svým kontaktům nevratně odstranit odeslané zprávy. + Umožněte svým kontaktům nevratně odstranit odeslané zprávy. No comment provided by engineer. - + Allow your contacts to send disappearing messages. - Umožněte svým kontaktům odesílat mizející zprávy. + Umožněte svým kontaktům odesílat mizící zprávy. No comment provided by engineer. - + Allow your contacts to send voice messages. - Povolte svým kontaktům odesílání hlasových zpráv. + Povolte svým kontaktům odesílání hlasových zpráv. No comment provided by engineer. - + Already connected? - Již připojeno? + Již připojeno? No comment provided by engineer. - + + Always use relay + Spojení přes relé + No comment provided by engineer. + + Answer call - Přijmout hovor + Přijmout hovor No comment provided by engineer. - + App build: %@ - Sestavení aplikace: %@ + Sestavení aplikace: %@ No comment provided by engineer. - + App icon - Ikona aplikace + Ikona aplikace No comment provided by engineer. - + App version - Verze aplikace + Verze aplikace No comment provided by engineer. - + App version: v%@ - Verze aplikace: v%@ + Verze aplikace: v%@ No comment provided by engineer. - + Appearance - Vzhled + Vzhled No comment provided by engineer. - + Attach - Připojit + Připojit No comment provided by engineer. - + Audio & video calls - Audio a video hovory + Audio a video hovory No comment provided by engineer. - + + Audio and video calls + No comment provided by engineer. + + Authentication failed - Ověření selhalo + Ověření selhalo No comment provided by engineer. - + + Authentication is required before the call is connected, but you may miss calls. + Před spojením hovoru je vyžadováno ověření, ale můžete zmeškat hovory. + No comment provided by engineer. + + Authentication unavailable - Ověřování není k dispozici + Ověřování není k dispozici No comment provided by engineer. - + Auto-accept contact requests - Automatické přijímání žádostí o kontakt + Automatické přijímání žádostí o kontakt No comment provided by engineer. - + Auto-accept images - Automaticky přijímat obrázky + Automaticky přijímat obrázky No comment provided by engineer. - + Automatically - Automaticky + Automaticky No comment provided by engineer. - + Back - Zpět + Zpět No comment provided by engineer. - + Both you and your contact can irreversibly delete sent messages. - Vy i váš kontakt můžete nevratně mazat odeslané zprávy. + Vy i váš kontakt můžete nevratně mazat odeslané zprávy. No comment provided by engineer. - + Both you and your contact can send disappearing messages. - Vy i váš kontakt můžete posílat mizející zprávy. + Vy i váš kontakt můžete posílat mizící zprávy. No comment provided by engineer. - + Both you and your contact can send voice messages. - Hlasové zprávy můžete posílat vy i váš kontakt. + Hlasové zprávy můžete posílat vy i váš kontakt. No comment provided by engineer. - + + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). + Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). + No comment provided by engineer. + + Call already ended! - Hovor již skončil! + Hovor již skončil! No comment provided by engineer. - + Calls - Hovory + Hovory No comment provided by engineer. - + + Can't delete user profile! + No comment provided by engineer. + + Can't invite contact! - Nelze pozvat kontakt! + Nelze pozvat kontakt! No comment provided by engineer. - + Can't invite contacts! - Nelze pozvat kontakty! + Nelze pozvat kontakty! No comment provided by engineer. - + Cancel - Zrušit + Zrušit No comment provided by engineer. - + Cannot access keychain to save database password - Nelze získat přístup ke klíčence pro uložení hesla databáze + Nelze získat přístup ke klíčence pro uložení hesla databáze No comment provided by engineer. - + Cannot receive file - Nelze přijmout soubor + Nelze přijmout soubor No comment provided by engineer. - + Change - Změnit + Změnit No comment provided by engineer. - + Change database passphrase? - Změnit přístupovou frázi databáze? + Změnit přístupovou frázi databáze? No comment provided by engineer. - + Change member role? - Změnit roli člena? + Změnit roli člena? No comment provided by engineer. - + Change receiving address - Změna adresy příjemce + Změna adresy příjemce No comment provided by engineer. - + Change receiving address? - Změnit přijímající adresu? + Změnit přijímající adresu? No comment provided by engineer. - + Change role - Změnit roli + Změnit roli No comment provided by engineer. - + Chat archive - Chat se archivuje + Chat se archivuje No comment provided by engineer. - + Chat console - Konzola pro chat + Konzola pro chat No comment provided by engineer. - + Chat database - Chat databáze + Chat databáze No comment provided by engineer. - + Chat database deleted - Databáze chatu odstraněna + Databáze chatu odstraněna No comment provided by engineer. - + Chat database imported - Importovaná databáze chatu + Importovaná databáze chatu No comment provided by engineer. - + Chat is running - Chat je spuštěn + Chat je spuštěn No comment provided by engineer. - + Chat is stopped - Chat je zastaven + Chat je zastaven No comment provided by engineer. - + Chat preferences - Předvolby chatu + Předvolby chatu No comment provided by engineer. - + Chats - Chaty + Chaty No comment provided by engineer. - + Check server address and try again. - Zkontrolujte adresu serveru a zkuste to znovu. + Zkontrolujte adresu serveru a zkuste to znovu. No comment provided by engineer. - + + Chinese and Spanish interface + No comment provided by engineer. + + Choose file - Vybrat soubor + Vybrat soubor No comment provided by engineer. - + Choose from library - Vybrat z knihovny + Vybrat z knihovny No comment provided by engineer. - + Clear - Vyčistit + Vyčistit No comment provided by engineer. - + Clear conversation - Vyčistit konverzaci + Vyčistit konverzaci No comment provided by engineer. - + Clear conversation? - Vyčistit konverzaci? + Vyčistit konverzaci? No comment provided by engineer. - + Clear verification - Zrušte ověření + Zrušte ověření No comment provided by engineer. - + Colors - Barvy + Barvy No comment provided by engineer. - + Compare security codes with your contacts. - Porovnejte bezpečnostní kódy se svými kontakty. + Porovnejte bezpečnostní kódy se svými kontakty. No comment provided by engineer. - + Configure ICE servers - Konfigurace serverů ICE + Konfigurace serverů ICE No comment provided by engineer. - + Confirm - Potvrdit + Potvrdit No comment provided by engineer. - + Confirm new passphrase… - Potvrdit novou heslovou frázi… + Potvrdit novou heslovou frázi… No comment provided by engineer. - + + Confirm password + No comment provided by engineer. + + Connect - Připojit + Připojit server test step - + Connect via contact link? - Připojit se přes kontaktní odkaz? + Připojit se přes kontaktní odkaz? No comment provided by engineer. - + Connect via group link? - Připojit se přes odkaz skupiny? + Připojit se přes odkaz skupiny? No comment provided by engineer. - + Connect via link - Připojte se prostřednictvím odkazu + Připojte se prostřednictvím odkazu No comment provided by engineer. - + Connect via link / QR code - Připojit se prostřednictvím odkazu / QR kódu + Připojit se prostřednictvím odkazu / QR kódu No comment provided by engineer. - + Connect via one-time link? - Připojit se jednorázovým odkazem? + Připojit se jednorázovým odkazem? No comment provided by engineer. - - Connect via relay - Spojení přes relé - No comment provided by engineer. - - + Connecting to server… - Připojování k serveru… + Připojování k serveru… No comment provided by engineer. - + Connecting to server… (error: %@) - Připojování k serveru... (chyba: %@) + Připojování k serveru... (chyba: %@) No comment provided by engineer. - + Connection - Připojení + Připojení No comment provided by engineer. - + Connection error - Chyba připojení + Chyba připojení No comment provided by engineer. - + Connection error (AUTH) - Chyba spojení (AUTH) + Chyba spojení (AUTH) No comment provided by engineer. - + Connection request - Žádost o připojení + Žádost o připojení No comment provided by engineer. - + Connection request sent! - Požadavek na připojení byl odeslán! + Požadavek na připojení byl odeslán! No comment provided by engineer. - + Connection timeout - Časový limit připojení + Časový limit připojení No comment provided by engineer. - + Contact allows - Kontakt povoluje + Kontakt povolil No comment provided by engineer. - + Contact already exists - Kontakt již existuje + Kontakt již existuje No comment provided by engineer. - + Contact and all messages will be deleted - this cannot be undone! - Kontakt a všechny zprávy budou smazány - nelze to vzít zpět! + Kontakt a všechny zprávy budou smazány - nelze to vzít zpět! No comment provided by engineer. - + Contact hidden: - Skrytý kontakt: + Skrytý kontakt: notification - + Contact is connected - Kontakt je připojen + Kontakt je připojen notification - + Contact is not connected yet! - Kontakt ještě není připojen! + Kontakt ještě není připojen! No comment provided by engineer. - + Contact name - Jméno kontaktu + Jméno kontaktu No comment provided by engineer. - + Contact preferences - Předvolby kontaktů + Předvolby kontaktů No comment provided by engineer. - + Contact requests - Žádosti o kontakt + Žádosti o kontakt No comment provided by engineer. - + Contacts can mark messages for deletion; you will be able to view them. - Kontakty mohou označit zprávy ke smazání; vy je budete moci zobrazit. + Kontakty mohou označit zprávy ke smazání; vy je budete moci zobrazit. No comment provided by engineer. - + Copy - Kopírovat + Kopírovat chat item action - + Core built at: %@ - Jádro sestavené na: %@ + Jádro sestavené na: %@ No comment provided by engineer. - + Core version: v%@ - Verze jádra: v%@ + Verze jádra: v%@ No comment provided by engineer. - + Create - Vytvořit + Vytvořit No comment provided by engineer. - + Create address - Vytvořit adresu + Vytvořit adresu No comment provided by engineer. - + Create group link - Vytvořit odkaz na skupinu + Vytvořit odkaz na skupinu No comment provided by engineer. - + Create link - Vytvořit odkaz + Vytvořit odkaz No comment provided by engineer. - + Create one-time invitation link - Vytvořit jednorázovou pozvánku + Vytvořit jednorázovou pozvánku No comment provided by engineer. - + Create queue - Vytvořit frontu + Vytvořit frontu server test step - + Create secret group - Vytvořit tajnou skupinu + Vytvořit tajnou skupinu No comment provided by engineer. - + Create your profile - Vytvořte si profil + Vytvořte si profil No comment provided by engineer. - + Created on %@ - Vytvořeno na %@ + Vytvořeno na %@ No comment provided by engineer. - + Current passphrase… - Aktuální přístupová fráze… + Aktuální přístupová fráze… No comment provided by engineer. - + Currently maximum supported file size is %@. - Aktuálně maximální podporovaná velikost souboru je %@. + Aktuálně maximální podporovaná velikost souboru je %@. No comment provided by engineer. - + Dark - Tmavý + Tmavý No comment provided by engineer. - - Data - No comment provided by engineer. - - + Database ID - ID databáze + ID databáze No comment provided by engineer. - + Database encrypted! - Databáze zašifrována! + Databáze zašifrována! No comment provided by engineer. - + Database encryption passphrase will be updated and stored in the keychain. - Heslo pro šifrování databáze bude aktualizováno a uloženo v klíčence. + Heslo pro šifrování databáze bude aktualizováno a uloženo v klíčence. No comment provided by engineer. - + Database encryption passphrase will be updated. - Šifrovací heslová fráze databáze bude aktualizována. + Šifrovací heslová fráze databáze bude aktualizována. No comment provided by engineer. - + Database error - Chyba databáze + Chyba databáze No comment provided by engineer. - + Database is encrypted using a random passphrase, you can change it. - Databáze je zašifrována pomocí náhodné přístupové fráze, můžete ji změnit. + Databáze je zašifrována pomocí náhodné přístupové fráze, můžete ji změnit. No comment provided by engineer. - + Database is encrypted using a random passphrase. Please change it before exporting. - Databáze je šifrována pomocí náhodné přístupové fráze. Před exportem ji změňte. + Databáze je šifrována pomocí náhodné přístupové fráze. Před exportem ji změňte. No comment provided by engineer. - + Database passphrase - Heslo databáze + Heslo databáze No comment provided by engineer. - + Database passphrase & export - Databázová hesla a export + Databázová hesla a export No comment provided by engineer. - + Database passphrase is different from saved in the keychain. - Přístupové heslo databáze se liší od hesla uloženého v klíčence. + Přístupové heslo databáze se liší od hesla uloženého v klíčence. No comment provided by engineer. - + Database passphrase is required to open chat. - Pro otevření chatu je vyžadována přístupová fráze databáze. + Pro otevření chatu je vyžadována přístupová fráze databáze. No comment provided by engineer. - + Database will be encrypted and the passphrase stored in the keychain. - Databáze bude zašifrována a heslo bude uloženo v klíčence. + Databáze bude zašifrována a heslo bude uloženo v klíčence. No comment provided by engineer. - + Database will be encrypted. - Databáze bude zašifrována. + Databáze bude zašifrována. No comment provided by engineer. - + Database will be migrated when the app restarts - Databáze bude přenesena po restartu aplikace + Databáze bude přenesena po restartu aplikace No comment provided by engineer. - + Decentralized - Decentralizované + Decentralizované No comment provided by engineer. - + Delete - Smazat + Smazat chat item action - + Delete Contact - Smazat kontakt + Smazat kontakt No comment provided by engineer. - + Delete address - Odstranit adresu + Odstranit adresu No comment provided by engineer. - + Delete address? - Smazat adresu? + Smazat adresu? No comment provided by engineer. - + Delete after - Smazat po + Smazat po No comment provided by engineer. - + Delete all files - Odstranit všechny soubory + Odstranit všechny soubory No comment provided by engineer. - + Delete archive - Smazat archiv + Smazat archiv No comment provided by engineer. - + Delete chat archive? - Smazat archiv chatu? + Smazat archiv chatu? No comment provided by engineer. - + Delete chat profile? - Smazat profil chatu? + Smazat chat profil? No comment provided by engineer. - + Delete connection - Smazat připojení + Smazat připojení No comment provided by engineer. - + Delete contact - Smazat kontakt + Smazat kontakt No comment provided by engineer. - + Delete contact? - Smazat kontakt? + Smazat kontakt? No comment provided by engineer. - + Delete database - Odstranění databáze + Odstranění databáze No comment provided by engineer. - - Delete files & media - No comment provided by engineer. - - + Delete files and media? - Smazat soubory a média? + Smazat soubory a média? No comment provided by engineer. - + Delete files for all chat profiles - Odstranění souborů pro všechny profily chatu + Odstranění souborů pro všechny profily chatu No comment provided by engineer. - + Delete for everyone - Smazat pro všechny + Smazat pro všechny chat feature - + Delete for me - Smazat pro mě + Smazat pro mě No comment provided by engineer. - + Delete group - Smazat skupinu + Smazat skupinu No comment provided by engineer. - + Delete group? - Smazat skupinu? + Smazat skupinu? No comment provided by engineer. - + Delete invitation - Smazat pozvánku + Smazat pozvánku No comment provided by engineer. - + Delete link - Smazat odkaz + Smazat odkaz No comment provided by engineer. - + Delete link? - Smazat odkaz? + Smazat odkaz? No comment provided by engineer. - + + Delete member message? + Smazat zprávu člena? + No comment provided by engineer. + + Delete message? - Smazat zprávu? + Smazat zprávu? No comment provided by engineer. - + Delete messages - Smazat zprávy + Smazat zprávy No comment provided by engineer. - + Delete messages after - Smazat zprávy po + Smazat zprávy po No comment provided by engineer. - + Delete old database - Smazat starou databázi + Smazat starou databázi No comment provided by engineer. - + Delete old database? - Smazat starou databázi? + Smazat starou databázi? No comment provided by engineer. - + Delete pending connection - Smazat čekající připojení + Smazat čekající připojení No comment provided by engineer. - + Delete pending connection? - Smazat čekající připojení? + Smazat čekající připojení? No comment provided by engineer. - + Delete queue - Odstranit frontu + Odstranit frontu server test step - + Delete user profile? - Smazat uživatelský profil? + Smazat uživatelský profil? No comment provided by engineer. - + Description - Popis + Popis No comment provided by engineer. - + Develop - Vyvinout + Vyvinout No comment provided by engineer. - + Developer tools - Nástroje pro vývojáře + Nástroje pro vývojáře No comment provided by engineer. - + Device - Zařízení + Zařízení No comment provided by engineer. - + Device authentication is disabled. Turning off SimpleX Lock. - Ověřování zařízení je zakázáno. Vypnutí zámku SimpleX Lock. + Ověřování zařízení je zakázáno. Vypnutí zámku SimpleX Lock. No comment provided by engineer. - + Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. - Ověřování zařízení není povoleno. Jakmile povolíte ověřování zařízení, můžete zámek SimpleX Lock zapnout prostřednictvím Nastavení. + Ověřování zařízení není povoleno. Jakmile povolíte ověřování zařízení, můžete zámek SimpleX Lock zapnout prostřednictvím Nastavení. No comment provided by engineer. - + + Different names, avatars and transport isolation. + Různá jména, avatary a dopravní izolace. + No comment provided by engineer. + + Direct messages - Přímé zprávy + Přímé zprávy chat feature - + Direct messages between members are prohibited in this group. - Přímé zprávy mezi členy jsou v této skupině zakázány. + Přímé zprávy mezi členy jsou v této skupině zakázány. No comment provided by engineer. - + Disable SimpleX Lock - Vypnutí zámku SimpleX + Vypnutí zámku SimpleX authentication reason - + Disappearing messages - Zmizení zpráv + Mizící zprávy chat feature - + Disappearing messages are prohibited in this chat. - Mizící zprávy jsou v tomto chatu zakázány. + Mizící zprávy jsou v tomto chatu zakázány. No comment provided by engineer. - + Disappearing messages are prohibited in this group. - Mizící zprávy jsou v této skupině zakázány. + Mizící zprávy jsou v této skupině zakázány. No comment provided by engineer. - + Disconnect - Odpojit + Odpojit server test step - + Display name - Zobrazované jméno + Zobrazované jméno No comment provided by engineer. - + Display name: - Zobrazované jméno: + Zobrazované jméno: No comment provided by engineer. - + Do NOT use SimpleX for emergency calls. - NEpoužívejte SimpleX pro tísňová volání. + NEpoužívejte SimpleX pro tísňová volání. No comment provided by engineer. - + Do it later - Udělat později + Udělat později No comment provided by engineer. - + + Don't show again + No comment provided by engineer. + + + Duplicate display name! + Duplicitní zobrazované jméno! + No comment provided by engineer. + + Edit - Upravit + Upravit chat item action - + Edit group profile - Upravit profil skupiny + Upravit profil skupiny No comment provided by engineer. - + Enable - Zapnout + Zapnout No comment provided by engineer. - + Enable SimpleX Lock - Zapnutí zámku SimpleX + Zapnutí zámku SimpleX authentication reason - + Enable TCP keep-alive - Povolit TCP keep-alive + Povolit TCP keep-alive No comment provided by engineer. - + Enable automatic message deletion? - Povolit automatické mazání zpráv? + Povolit automatické mazání zpráv? No comment provided by engineer. - + Enable instant notifications? - Povolit okamžitá oznámení? + Povolit okamžitá oznámení? No comment provided by engineer. - + Enable notifications - Povolit upozornění + Povolit upozornění No comment provided by engineer. - + Enable periodic notifications? - Povolit pravidelná oznámení? + Povolit pravidelná oznámení? No comment provided by engineer. - + Encrypt - Šifrovat + Šifrovat No comment provided by engineer. - + Encrypt database? - Šifrovat databázi? + Šifrovat databázi? No comment provided by engineer. - + Encrypted database - Zašifrovaná databáze + Zašifrovaná databáze No comment provided by engineer. - + Encrypted message or another event - Šifrovaná zpráva nebo jiná událost + Šifrovaná zpráva nebo jiná událost notification - + Encrypted message: database error - Šifrovaná zpráva: chyba databáze + Šifrovaná zpráva: chyba databáze notification - + Encrypted message: keychain error - Zašifrovaná zpráva: chyba klíčenky + Zašifrovaná zpráva: chyba klíčenky notification - + Encrypted message: no passphrase - Šifrovaná zpráva: žádné přístupové heslo + Šifrovaná zpráva: žádné přístupové heslo notification - + Encrypted message: unexpected error - Šifrovaná zpráva: neočekávaná chyba + Šifrovaná zpráva: neočekávaná chyba notification - + Enter correct passphrase. - Zadejte správnou přístupovou frázi. + Zadejte správnou přístupovou frázi. No comment provided by engineer. - + Enter passphrase… - Zadejte přístupovou frázi… + Zadejte přístupovou frázi… No comment provided by engineer. - + + Enter password above to show! + No comment provided by engineer. + + Enter server manually - Zadejte server ručně + Zadejte server ručně No comment provided by engineer. - + Error - Chyba + Chyba No comment provided by engineer. - + Error accepting contact request - Chyba při přijímání žádosti o kontakt + Chyba při přijímání žádosti o kontakt No comment provided by engineer. - + Error accessing database file - Chyba přístupu k souboru databáze + Chyba přístupu k souboru databáze No comment provided by engineer. - + Error adding member(s) - Chyba přidávání člena(ů) + Chyba přidávání člena(ů) No comment provided by engineer. - + Error changing address - Chuba změny adresy + Chuba změny adresy No comment provided by engineer. - + Error changing role - Chyba při změně role + Chyba při změně role No comment provided by engineer. - + Error changing setting - Chyba změny nastavení + Chyba změny nastavení No comment provided by engineer. - + Error creating address - Chyba při vytváření adresy + Chyba při vytváření adresy No comment provided by engineer. - + Error creating group - Chyba při vytváření skupiny + Chyba při vytváření skupiny No comment provided by engineer. - + Error creating group link - Chyba při vytváření odkazu skupiny + Chyba při vytváření odkazu skupiny No comment provided by engineer. - + + Error creating profile! + Chyba při vytváření profilu! + No comment provided by engineer. + + Error deleting chat database - Chyba při mazání databáze chatu + Chyba při mazání databáze chatu No comment provided by engineer. - + Error deleting chat! - Chyba při mazání chatu! + Chyba při mazání chatu! No comment provided by engineer. - + Error deleting connection - Chyba při mazání připojení + Chyba při mazání připojení No comment provided by engineer. - + Error deleting contact - Chyba mazání kontaktu + Chyba mazání kontaktu No comment provided by engineer. - + Error deleting database - Chyba při mazání databáze + Chyba při mazání databáze No comment provided by engineer. - + Error deleting old database - Chyba při mazání staré databáze + Chyba při mazání staré databáze No comment provided by engineer. - + Error deleting token - Chyba při mazání tokenu + Chyba při mazání tokenu No comment provided by engineer. - + Error deleting user profile - Chyba mazání uživatelského profilu + Chyba mazání uživatelského profilu No comment provided by engineer. - + Error enabling notifications - Chyba při aktivaci oznámení + Chyba při aktivaci oznámení No comment provided by engineer. - + Error encrypting database - Chyba šifrování databáze + Chyba šifrování databáze No comment provided by engineer. - + Error exporting chat database - Chyba při exportu databáze chatu + Chyba při exportu databáze chatu No comment provided by engineer. - + Error importing chat database - Chyba při importu databáze chatu + Chyba při importu databáze chatu No comment provided by engineer. - + Error joining group - Chyba při připojování ke skupině + Chyba při připojování ke skupině No comment provided by engineer. - + Error receiving file - Chyba při příjmu souboru + Chyba při příjmu souboru No comment provided by engineer. - + Error removing member - Chyba při odebrání člena + Chyba při odebrání člena No comment provided by engineer. - + Error saving ICE servers - Chyba při ukládání serverů ICE + Chyba při ukládání serverů ICE No comment provided by engineer. - + Error saving SMP servers - Chyba při ukládání serverů SMP + Chyba při ukládání serverů SMP No comment provided by engineer. - + Error saving group profile - Chyba při ukládání profilu skupiny + Chyba při ukládání profilu skupiny No comment provided by engineer. - + Error saving passphrase to keychain - Při ukládání přístupové fráze do klíčenky došlo k chybě + Při ukládání přístupové fráze do klíčenky došlo k chybě No comment provided by engineer. - + + Error saving user password + No comment provided by engineer. + + Error sending message - Chyba při odesílání zprávy + Chyba při odesílání zprávy No comment provided by engineer. - + Error starting chat - Chyba při spuštění chatu + Chyba při spuštění chatu No comment provided by engineer. - + Error stopping chat - Chyba při zastavení chatu + Chyba při zastavení chatu No comment provided by engineer. - + + Error switching profile! + Chyba při přepínání profilu! + No comment provided by engineer. + + + Error updating group link + Chyba aktualizace odkazu skupiny + No comment provided by engineer. + + Error updating message - Chyba aktualizace zprávy + Chyba aktualizace zprávy No comment provided by engineer. - + Error updating settings - Chyba při aktualizaci nastavení + Chyba při aktualizaci nastavení No comment provided by engineer. - + + Error updating user privacy + No comment provided by engineer. + + Error: %@ - Chyba: %@ + Chyba: %@ No comment provided by engineer. - + Error: URL is invalid - Chyba: Adresa URL je neplatná + Chyba: Adresa URL je neplatná No comment provided by engineer. - + Error: no database file - Chyba: žádný soubor databáze + Chyba: žádný soubor databáze No comment provided by engineer. - + Exit without saving - Ukončit bez uložení + Ukončit bez uložení No comment provided by engineer. - + Export database - Export databáze + Export databáze No comment provided by engineer. - + Export error: - Chyba exportu: + Chyba exportu: No comment provided by engineer. - + Exported database archive. - Exportovaný archiv databáze. + Exportovaný archiv databáze. No comment provided by engineer. - + Exporting database archive... - Exportuji archiv databáze... + Exportuji archiv databáze... No comment provided by engineer. - + Failed to remove passphrase - Přístupovou frázi se nepodařilo odstranit + Přístupovou frázi se nepodařilo odstranit No comment provided by engineer. - + File will be received when your contact is online, please wait or check later! - Soubor bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později! + Soubor bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později! No comment provided by engineer. - + File: %@ - Soubor: %@ + Soubor: %@ No comment provided by engineer. - + Files & media - Soubory a média + Soubory a média No comment provided by engineer. - + For console - Pro konzoli + Pro konzoli No comment provided by engineer. - + + French interface + Francouzské rozhraní + No comment provided by engineer. + + Full link - Úplný odkaz + Úplný odkaz No comment provided by engineer. - + Full name (optional) - Celé jméno (volitelné) + Celé jméno (volitelné) No comment provided by engineer. - + Full name: - Celé jméno: + Celé jméno: No comment provided by engineer. - + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + + GIFs and stickers - GIFy a nálepky + GIFy a nálepky No comment provided by engineer. - + Group - Skupina + Skupina No comment provided by engineer. - + Group display name - Zobrazovaný název skupiny + Zobrazovaný název skupiny No comment provided by engineer. - + Group full name (optional) - Celé jméno skupiny (volitelné) + Celé jméno skupiny (volitelné) No comment provided by engineer. - + Group image - Obrázek skupiny + Obrázek skupiny No comment provided by engineer. - + Group invitation - Skupinová pozvánka + Skupinová pozvánka No comment provided by engineer. - + Group invitation expired - Platnost pozvánky do skupiny vypršela + Platnost pozvánky do skupiny vypršela No comment provided by engineer. - + Group invitation is no longer valid, it was removed by sender. - Skupinová pozvánka již není platná, byla odstraněna odesílatelem. + Skupinová pozvánka již není platná, byla odstraněna odesílatelem. No comment provided by engineer. - + Group link - Odkaz na skupinu + Odkaz na skupinu No comment provided by engineer. - + Group links - Odkazy na skupiny + Odkazy na skupiny No comment provided by engineer. - + Group members can irreversibly delete sent messages. - Členové skupiny mohou nevratně mazat odeslané zprávy. + Členové skupiny mohou nevratně mazat odeslané zprávy. No comment provided by engineer. - + Group members can send direct messages. - Členové skupiny mohou posílat přímé zprávy. + Členové skupiny mohou posílat přímé zprávy. No comment provided by engineer. - + Group members can send disappearing messages. - Členové skupiny mohou posílat mizející zprávy. + Členové skupiny mohou posílat mizící zprávy. No comment provided by engineer. - + Group members can send voice messages. - Členové skupiny mohou posílat hlasové zprávy. + Členové skupiny mohou posílat hlasové zprávy. No comment provided by engineer. - + Group message: - Skupinová zpráva: + Skupinová zpráva: notification - + + Group moderation + No comment provided by engineer. + + Group preferences - Předvolby skupiny + Předvolby skupiny No comment provided by engineer. - + Group profile - Profil skupiny + Profil skupiny No comment provided by engineer. - + Group profile is stored on members' devices, not on the servers. - Profil skupiny je uložen v zařízeních členů, nikoli na serverech. + Profil skupiny je uložen v zařízeních členů, nikoli na serverech. No comment provided by engineer. - + + Group welcome message + No comment provided by engineer. + + Group will be deleted for all members - this cannot be undone! - Skupina bude smazána pro všechny členy - nelze to vzít zpět! + Skupina bude smazána pro všechny členy - nelze to vzít zpět! No comment provided by engineer. - + Group will be deleted for you - this cannot be undone! - Skupina bude smazána pro vás - toto nelze vzít zpět! + Skupina bude smazána pro vás - toto nelze vzít zpět! No comment provided by engineer. - + Help - Pomoc + Pomoc No comment provided by engineer. - + Hidden - Skryté + Skryté No comment provided by engineer. - + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + + Hide - Skrýt + Skrýt chat item action - + Hide app screen in the recent apps. - Skrytí obrazovky aplikace v posledních aplikacích. + Skrytí obrazovky aplikace v posledních aplikacích. No comment provided by engineer. - + + Hide profile + No comment provided by engineer. + + How SimpleX works - Jak SimpleX funguje + Jak SimpleX funguje No comment provided by engineer. - + How it works - Jak to funguje + Jak to funguje No comment provided by engineer. - + How to - Jak + Jak No comment provided by engineer. - + How to use it - Jak ji používat + Jak ji používat No comment provided by engineer. - + How to use your servers - Jak používat servery + Jak používat servery No comment provided by engineer. - + ICE servers (one per line) - Servery ICE (jeden na řádek) + Servery ICE (jeden na řádek) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - Pokud se připojení videa nezdaří, vyřešte to otočením kamery. - No comment provided by engineer. - - + If you can't meet in person, **show QR code in the video call**, or share the link. - Pokud se nemůžete setkat osobně, **ukažte QR kód ve videohovoru**, nebo sdílejte odkaz. + Pokud se nemůžete setkat osobně, **ukažte QR kód ve videohovoru**, nebo sdílejte odkaz. No comment provided by engineer. - + If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link. - Pokud se nemůžete setkat osobně, můžete **naskenovat QR kód během videohovoru**, nebo váš kontakt může sdílet odkaz na pozvánku. + Pokud se nemůžete setkat osobně, můžete **naskenovat QR kód během videohovoru**, nebo váš kontakt může sdílet odkaz na pozvánku. No comment provided by engineer. - + If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app). - Pokud potřebujete chat používat nyní, klepněte na **Udělat později** níže (migrace databáze vám bude nabídnuta po restartování aplikace). + Pokud potřebujete chat používat nyní, klepněte na **Udělat později** níže (migrace databáze vám bude nabídnuta po restartování aplikace). No comment provided by engineer. - + Ignore - Ignorovat + Ignorovat No comment provided by engineer. - + Image will be received when your contact is online, please wait or check later! - Obrázek bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později! + Obrázek bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později! No comment provided by engineer. - + Immune to spam and abuse - Odolná vůči spamu a zneužití + Odolná vůči spamu a zneužití No comment provided by engineer. - + Import - Import + Import No comment provided by engineer. - + Import chat database? - Importovat databázi chatu? + Importovat databázi chatu? No comment provided by engineer. - + Import database - Import databáze + Import databáze No comment provided by engineer. - + Improved privacy and security - Vylepšená ochrana soukromí a zabezpečení + Vylepšená ochrana soukromí a zabezpečení No comment provided by engineer. - + Improved server configuration - Vylepšená konfigurace serveru + Vylepšená konfigurace serveru No comment provided by engineer. - + Incognito - Inkognito + Inkognito No comment provided by engineer. - + Incognito mode - Režim inkognito + Režim inkognito No comment provided by engineer. - + Incognito mode is not supported here - your main profile will be sent to group members - Zde není podporován režim inkognito - členům skupiny bude zaslán váš hlavní profil + Zde není podporován režim inkognito - členům skupiny bude zaslán váš hlavní profil No comment provided by engineer. - + Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. - Režim inkognito chrání soukromí vašeho hlavního profilového jména a obrázku - pro každý nový kontakt je vytvořen nový náhodný profil. + Režim inkognito chrání soukromí vašeho hlavního profilového jména a obrázku - pro každý nový kontakt je vytvořen nový náhodný profil. No comment provided by engineer. - + Incoming audio call - Příchozí zvukový hovor + Příchozí zvukový hovor notification - + Incoming call - Příchozí hovor + Příchozí hovor notification - + Incoming video call - Příchozí videohovor + Příchozí videohovor notification - + Incorrect security code! - Nesprávný bezpečnostní kód! + Nesprávný bezpečnostní kód! No comment provided by engineer. - + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) - Nainstalujte [SimpleX Chat pro terminál](https://github.com/simplex-chat/simplex-chat) + Nainstalujte [SimpleX Chat pro terminál](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. - + Instant push notifications will be hidden! - Okamžitá oznámení budou skryta! + Okamžitá oznámení budou skryta! No comment provided by engineer. - + Instantly - Okamžitě + Okamžitě No comment provided by engineer. - + + Interface + Rozhranní + No comment provided by engineer. + + Invalid connection link - Neplatný odkaz na spojení + Neplatný odkaz na spojení No comment provided by engineer. - + Invalid server address! - Neplatná adresa serveru! + Neplatná adresa serveru! No comment provided by engineer. - + Invitation expired! - Platnost pozvánky vypršela! + Platnost pozvánky vypršela! No comment provided by engineer. - + Invite members - Pozvat členy + Pozvat členy No comment provided by engineer. - + Invite to group - Pozvat do skupiny + Pozvat do skupiny No comment provided by engineer. - + Irreversible message deletion - Nevratné mazání zpráv + Nevratné mazání zpráv No comment provided by engineer. - + Irreversible message deletion is prohibited in this chat. - Nevratné mazání zpráv je v tomto chatu zakázáno. + Nevratné mazání zpráv je v tomto chatu zakázáno. No comment provided by engineer. - + Irreversible message deletion is prohibited in this group. - Nevratné mazání zpráv je v této skupině zakázáno. + Nevratné mazání zpráv je v této skupině zakázáno. No comment provided by engineer. - + It allows having many anonymous connections without any shared data between them in a single chat profile. - Umožňuje mít v jednom profilu chatu mnoho anonymních spojení bez jakýchkoli sdílených údajů mezi nimi. + Umožňuje mít v jednom profilu chatu mnoho anonymních spojení bez jakýchkoli sdílených údajů mezi nimi. No comment provided by engineer. - + It can happen when: 1. The messages expire on the server if they were not received for 30 days, 2. The server you use to receive the messages from this contact was updated and restarted. 3. The connection is compromised. Please connect to the developers via Settings to receive the updates about the servers. We will be adding server redundancy to prevent lost messages. - Může se to stát, když: + Může se to stát, když: 1. Zprávy na serveru vyprší, pokud nebyly přijaty po dobu 30 dnů, 2. Server, který používáte pro příjem zpráv od tohoto kontaktu, byl aktualizován a restartován. 3. Spojení je narušeno. @@ -1943,2595 +2044,2678 @@ Připojte se k vývojářům prostřednictvím Nastavení, abyste mohli dostáva Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. No comment provided by engineer. - + It seems like you are already connected via this link. If it is not the case, there was an error (%@). - Zdá se, že jste již připojeni prostřednictvím tohoto odkazu. Pokud tomu tak není, došlo k chybě (%@). + Zdá se, že jste již připojeni prostřednictvím tohoto odkazu. Pokud tomu tak není, došlo k chybě (%@). No comment provided by engineer. - + + Italian interface + Italské rozhraní + No comment provided by engineer. + + Join - Připojte se na + Připojte se na No comment provided by engineer. - + Join group - Připojit ke skupině + Připojit ke skupině No comment provided by engineer. - + Join incognito - Připojte se inkognito + Připojte se inkognito No comment provided by engineer. - + Joining group - Připojení ke skupině + Připojení ke skupině No comment provided by engineer. - + Keychain error - Chyba klíčenky + Chyba klíčenky No comment provided by engineer. - + LIVE - ŽIVĚ + ŽIVĚ No comment provided by engineer. - + Large file! - Velký soubor! + Velký soubor! No comment provided by engineer. - + Leave - Opustit + Opustit No comment provided by engineer. - + Leave group - Opustit skupinu + Opustit skupinu No comment provided by engineer. - + Leave group? - Opustit skupinu? + Opustit skupinu? No comment provided by engineer. - + Light - Světlo + Světlo No comment provided by engineer. - + Limitations - Omezení + Omezení No comment provided by engineer. - + Live message! - Živé zprávy! + Živé zprávy! No comment provided by engineer. - + Live messages - Živé zprávy + Živé zprávy No comment provided by engineer. - + Local name - Místní název + Místní název No comment provided by engineer. - + Local profile data only - Pouze lokální profilová data + Pouze lokální profilová data No comment provided by engineer. - + Make a private connection - Vytvořte si soukromé připojení + Vytvořte si soukromé připojení No comment provided by engineer. - + + Make profile private! + No comment provided by engineer. + + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). - Ujistěte se, že adresy SMP serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@). + Ujistěte se, že adresy SMP serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@). No comment provided by engineer. - + Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. - Ujistěte se, že adresy serverů WebRTC ICE jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní. + Ujistěte se, že adresy serverů WebRTC ICE jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní. No comment provided by engineer. - + Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* - Mnoho lidí se ptalo: *Pokud SimpleX nemá žádné uživatelské identifikátory, jak může doručovat zprávy?* + Mnoho lidí se ptalo: *Pokud SimpleX nemá žádné uživatelské identifikátory, jak může doručovat zprávy?* No comment provided by engineer. - + Mark deleted for everyone - Označit jako smazané pro všechny + Označit jako smazané pro všechny No comment provided by engineer. - + Mark read - Označit přečtení + Označit přečtení No comment provided by engineer. - + Mark verified - Označit jako ověřený + Označit jako ověřený No comment provided by engineer. - + Markdown in messages - Markdown ve zprávách + Markdown ve zprávách No comment provided by engineer. - + Max 30 seconds, received instantly. - Max 30 vteřin, přijato okamžitě. + Max 30 vteřin, přijato okamžitě. No comment provided by engineer. - + Member - Člen + Člen No comment provided by engineer. - + Member role will be changed to "%@". All group members will be notified. - Role člena se změní na "%@". Všichni členové skupiny budou upozorněni. + Role člena se změní na "%@". Všichni členové skupiny budou upozorněni. No comment provided by engineer. - + Member role will be changed to "%@". The member will receive a new invitation. - Role člena se změní na "%@". Člen obdrží novou pozvánku. + Role člena se změní na "%@". Člen obdrží novou pozvánku. No comment provided by engineer. - + Member will be removed from group - this cannot be undone! - Člen bude odstraněn ze skupiny - toto nelze vzít zpět! + Člen bude odstraněn ze skupiny - toto nelze vzít zpět! No comment provided by engineer. - + Message delivery error - Chyba doručení zprávy + Chyba doručení zprávy No comment provided by engineer. - + + Message draft + Návrh zprávy + No comment provided by engineer. + + Message text - Text zprávy + Text zprávy No comment provided by engineer. - + Messages - Zprávy + Zprávy No comment provided by engineer. - + Migrating database archive... - Přenášení archivu databáze... + Přenášení archivu databáze... No comment provided by engineer. - + Migration error: - Chyba přenášení: + Chyba přenášení: No comment provided by engineer. - + Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). - Migrace se nezdařila. Klepnutím na **Přeskočit** níže pokračujte v používání aktuální databáze. Nahlaste prosím problém vývojářům aplikace prostřednictvím chatu nebo e-mailu [chat@simplex.chat](mailto:chat@simplex.chat). + Migrace se nezdařila. Klepnutím na **Přeskočit** níže pokračujte v používání aktuální databáze. Nahlaste prosím problém vývojářům aplikace prostřednictvím chatu nebo e-mailu [chat@simplex.chat](mailto:chat@simplex.chat). No comment provided by engineer. - + Migration is completed - Přenesení dokončeno + Přenesení dokončeno No comment provided by engineer. - + + Moderate + Moderovat + chat item action + + + More improvements are coming soon! + Další vylepšení se chystají již brzy! + No comment provided by engineer. + + Most likely this contact has deleted the connection with you. - Tento kontakt s největší pravděpodobností smazal spojení s vámi. + Tento kontakt s největší pravděpodobností smazal spojení s vámi. No comment provided by engineer. - + + Multiple chat profiles + Více chatovacích profilů + No comment provided by engineer. + + Mute - Ztlumit + Ztlumit No comment provided by engineer. - + + Muted when inactive! + No comment provided by engineer. + + Name - Jméno + Jméno No comment provided by engineer. - + Network & servers - Síť a servery + Síť a servery No comment provided by engineer. - + Network settings - Nastavení sítě + Nastavení sítě No comment provided by engineer. - + Network status - Stav sítě + Stav sítě No comment provided by engineer. - + New contact request - Žádost o nový kontakt + Žádost o nový kontakt notification - + New contact: - Nový kontakt: + Nový kontakt: notification - + New database archive - Archiv nové databáze + Archiv nové databáze No comment provided by engineer. - + New in %@ - Nový V %@ + Nový V %@ No comment provided by engineer. - + New member role - Nová role člena + Nová role člena No comment provided by engineer. - + New message - Nová zpráva + Nová zpráva notification - + New passphrase… - Nová přístupová fráze… + Nová přístupová fráze… No comment provided by engineer. - + No - Ne + Ne No comment provided by engineer. - + No contacts selected - Nebyl vybrán žádný kontakt + Nebyl vybrán žádný kontakt No comment provided by engineer. - + No contacts to add - Žádné kontakty k přidání + Žádné kontakty k přidání No comment provided by engineer. - + No device token! - Žádný token zařízení! + Žádný token zařízení! No comment provided by engineer. - + Group not found! - Skupina nebyla nalezena! + Skupina nebyla nalezena! No comment provided by engineer. - + No permission to record voice message - Nemáte oprávnění nahrávat hlasové zprávy + Nemáte oprávnění nahrávat hlasové zprávy No comment provided by engineer. - + No received or sent files - Žádné přijaté ani odeslané soubory + Žádné přijaté ani odeslané soubory No comment provided by engineer. - + Notifications - Oznámení + Oznámení No comment provided by engineer. - + Notifications are disabled! - Oznámení jsou zakázána! + Oznámení jsou zakázána! No comment provided by engineer. - + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + + Off (Local) - Vypnuto (místní) + Vypnuto (místní) No comment provided by engineer. - + Ok - Ok + Ok No comment provided by engineer. - + Old database - Stará databáze + Stará databáze No comment provided by engineer. - + Old database archive - Archiv staré databáze + Archiv staré databáze No comment provided by engineer. - + One-time invitation link - Jednorázový zvací odkaz + Jednorázový zvací odkaz No comment provided by engineer. - + Onion hosts will be required for connection. Requires enabling VPN. - Pro připojení budou vyžadováni Onion hostitelé. Vyžaduje povolení sítě VPN. + Pro připojení budou vyžadováni Onion hostitelé. Vyžaduje povolení sítě VPN. No comment provided by engineer. - + Onion hosts will be used when available. Requires enabling VPN. - Onion hostitelé budou použiti, pokud jsou k dispozici. Vyžaduje povolení sítě VPN. + Onion hostitelé budou použiti, pokud jsou k dispozici. Vyžaduje povolení sítě VPN. No comment provided by engineer. - + Onion hosts will not be used. - Onion hostitelé nebudou použiti. + Onion hostitelé nebudou použiti. No comment provided by engineer. - + Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. - Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odeslané s **2vrstvým šifrováním typu end-to-end**. + Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odeslané s **2vrstvým šifrováním typu end-to-end**. No comment provided by engineer. - + Only group owners can change group preferences. - Předvolby skupiny mohou měnit pouze vlastníci skupiny. + Předvolby skupiny mohou měnit pouze vlastníci skupiny. No comment provided by engineer. - + Only group owners can enable voice messages. - Pouze majitelé skupin mohou povolit zasílání hlasových zpráv. + Pouze majitelé skupin mohou povolit zasílání hlasových zpráv. No comment provided by engineer. - + Only you can irreversibly delete messages (your contact can mark them for deletion). - Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání). + Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání). No comment provided by engineer. - + Only you can send disappearing messages. - Mizící zprávy můžete odesílat pouze vy. + Mizící zprávy můžete odesílat pouze vy. No comment provided by engineer. - + Only you can send voice messages. - Hlasové zprávy můžete posílat pouze vy. + Hlasové zprávy můžete posílat pouze vy. No comment provided by engineer. - + Only your contact can irreversibly delete messages (you can mark them for deletion). - Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání). + Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání). No comment provided by engineer. - + Only your contact can send disappearing messages. - Zmizelé zprávy může odesílat pouze váš kontakt. + Zmizelé zprávy může odesílat pouze váš kontakt. No comment provided by engineer. - + Only your contact can send voice messages. - Hlasové zprávy může odesílat pouze váš kontakt. + Hlasové zprávy může odesílat pouze váš kontakt. No comment provided by engineer. - + Open Settings - Otevřít nastavení + Otevřít nastavení No comment provided by engineer. - + Open chat - Otevřete chat + Otevřete chat No comment provided by engineer. - + Open chat console - Otevřete konzolu chatu + Otevřete konzolu chatu authentication reason - + + Open user profiles + Otevřít uživatelské profily + authentication reason + + Open-source protocol and code – anybody can run the servers. - Protokol a kód s otevřeným zdrojovým kódem - servery může provozovat kdokoli. + Protokol a kód s otevřeným zdrojovým kódem - servery může provozovat kdokoli. No comment provided by engineer. - + Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red. - Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené. + Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené. No comment provided by engineer. - + PING count - Počet PING + Počet PING No comment provided by engineer. - + PING interval - Interval PING + Interval PING No comment provided by engineer. - + + Password to show + No comment provided by engineer. + + Paste - Vložit + Vložit No comment provided by engineer. - + Paste image - Vložit obrázek + Vložit obrázek No comment provided by engineer. - + Paste received link - Vložení přijatého odkazu + Vložení přijatého odkazu No comment provided by engineer. - + Paste the link you received into the box below to connect with your contact. - Vložte odkaz, který jste obdrželi, do pole níže a spojte se se svým kontaktem. + Vložte odkaz, který jste obdrželi, do pole níže a spojte se se svým kontaktem. No comment provided by engineer. - + People can connect to you only via the links you share. - Lidé se s vámi mohou spojit pouze prostřednictvím odkazů, které sdílíte. + Lidé se s vámi mohou spojit pouze prostřednictvím odkazů, které sdílíte. No comment provided by engineer. - + Periodically - Pravidelně + Pravidelně No comment provided by engineer. - + Please ask your contact to enable sending voice messages. - Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv. + Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv. No comment provided by engineer. - + Please check that you used the correct link or ask your contact to send you another one. - Zkontrolujte, zda jste použili správný odkaz, nebo požádejte kontakt, aby vám poslal jiný. + Zkontrolujte, zda jste použili správný odkaz, nebo požádejte kontakt, aby vám poslal jiný. No comment provided by engineer. - + Please check your network connection with %@ and try again. - Zkontrolujte síťové připojení pomocí %@ a zkuste to znovu. + Zkontrolujte síťové připojení pomocí %@ a zkuste to znovu. No comment provided by engineer. - + Please check yours and your contact preferences. - Zkontrolujte prosím nastavení své i svého kontaktu. + Zkontrolujte prosím nastavení své i svého kontaktu. No comment provided by engineer. - + + Please contact group admin. + Kontaktujte prosím správce skupiny. + No comment provided by engineer. + + Please enter correct current passphrase. - Zadejte prosím správnou aktuální přístupovou frázi. + Zadejte prosím správnou aktuální přístupovou frázi. No comment provided by engineer. - + Please enter the previous password after restoring database backup. This action can not be undone. - Po obnovení zálohy databáze zadejte předchozí heslo. Tuto akci nelze vrátit zpět. + Po obnovení zálohy databáze zadejte předchozí heslo. Tuto akci nelze vrátit zpět. No comment provided by engineer. - + Please restart the app and migrate the database to enable push notifications. - Restartujte aplikaci a přeneste databázi, abyste povolili doručování oznámení. + Restartujte aplikaci a přeneste databázi, abyste povolili doručování oznámení. No comment provided by engineer. - + Please store passphrase securely, you will NOT be able to access chat if you lose it. - Uložte prosím bezpečně přístupovou frázi, pokud ji ztratíte, NEBUDE možné přistupovat k chatu. + Uložte prosím bezpečně přístupovou frázi, pokud ji ztratíte, NEBUDE možné přistupovat k chatu. No comment provided by engineer. - + Please store passphrase securely, you will NOT be able to change it if you lose it. - Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit. + Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit. No comment provided by engineer. - + Possibly, certificate fingerprint in server address is incorrect - Je možné, že otisk certifikátu v adrese serveru je nesprávný + Je možné, že otisk certifikátu v adrese serveru je nesprávný server test error - + + Preserve the last message draft, with attachments. + Zachování posledního návrhu zprávy s přílohami. + No comment provided by engineer. + + Preset server - Přednastavený server + Přednastavený server No comment provided by engineer. - + Preset server address - Přednastavená adresa serveru + Přednastavená adresa serveru No comment provided by engineer. - + Privacy & security - Ochrana osobních údajů a zabezpečení + Ochrana osobních údajů a zabezpečení No comment provided by engineer. - + Privacy redefined - Nové vymezení soukromí + Nové vymezení soukromí No comment provided by engineer. - + + Private filenames + Soukromé názvy souborů + No comment provided by engineer. + + Profile and server connections - Profil a připojení k serveru + Profil a připojení k serveru No comment provided by engineer. - + Profile image - Profilový obrázek + Profilový obrázek No comment provided by engineer. - + Prohibit irreversible message deletion. - Zakázat nevratné mazání zpráv. + Zakázat nevratné mazání zpráv. No comment provided by engineer. - + Prohibit sending direct messages to members. - Zakázat odesílání přímých zpráv členům. + Zakázat odesílání přímých zpráv členům. No comment provided by engineer. - + Prohibit sending disappearing messages. - Zakázat posílání mizejících zpráv. + Zakázat posílání mizících zpráv. No comment provided by engineer. - + Prohibit sending voice messages. - Zakázat odesílání hlasových zpráv. + Zakázat odesílání hlasových zpráv. No comment provided by engineer. - + Protect app screen - Ochrana obrazovky aplikace + Ochrana obrazovky aplikace No comment provided by engineer. - + + Protect your chat profiles with a password! + No comment provided by engineer. + + Protocol timeout - Časový limit protokolu + Časový limit protokolu No comment provided by engineer. - + Push notifications - Nabízená oznámení + Nabízená oznámení No comment provided by engineer. - + Rate the app - Ohodnoťte aplikaci + Ohodnoťte aplikaci No comment provided by engineer. - + Read - Číst + Číst No comment provided by engineer. - + Read more in our GitHub repository. - Další informace najdete v našem repozitáři GitHub. + Další informace najdete v našem repozitáři GitHub. No comment provided by engineer. - + Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme). - Přečtěte si více v našem [GitHub repozitáři](https://github.com/simplex-chat/simplex-chat#readme). + Přečtěte si více v našem [GitHub repozitáři](https://github.com/simplex-chat/simplex-chat#readme). No comment provided by engineer. - + Received file event - Událost přijatého souboru + Událost přijatého souboru notification - + Receiving via - Příjem přes + Příjem přes No comment provided by engineer. - + Recipients see updates as you type them. - Příjemci uvidí aktualizace během jejich psaní. + Příjemci uvidí aktualizace během jejich psaní. No comment provided by engineer. - + + Reduced battery usage + Snížení spotřeby baterie + No comment provided by engineer. + + Reject - Odmítnout + Odmítnout reject incoming call via notification - + Reject contact (sender NOT notified) - Odmítnout kontakt (odesílatel NEBUDE upozorněn) + Odmítnout kontakt (odesílatel NEBUDE upozorněn) No comment provided by engineer. - + Reject contact request - Odmítnout žádost o kontakt + Odmítnout žádost o kontakt No comment provided by engineer. - + Relay server is only used if necessary. Another party can observe your IP address. - Přenosový server se používá pouze v případě potřeby. Jiná strana může sledovat vaši IP adresu. + Přenosový server se používá pouze v případě potřeby. Jiná strana může sledovat vaši IP adresu. No comment provided by engineer. - + Relay server protects your IP address, but it can observe the duration of the call. - Přenosový server chrání vaši IP adresu, ale může sledovat dobu trvání hovoru. + Přenosový server chrání vaši IP adresu, ale může sledovat dobu trvání hovoru. No comment provided by engineer. - + Remove - Odstranit + Odstranit No comment provided by engineer. - + Remove member - Odstranit člena + Odstranit člena No comment provided by engineer. - + Remove member? - Odebrat člena? + Odebrat člena? No comment provided by engineer. - + Remove passphrase from keychain? - Odstranit přístupovou frázi z klíčenek? + Odstranit přístupovou frázi z klíčenek? No comment provided by engineer. - + Reply - Odpověď + Odpověď chat item action - + Required - Povinné + Povinné No comment provided by engineer. - + Reset - Obnovit + Obnovit No comment provided by engineer. - + Reset colors - Obnovení barev + Obnovení barev No comment provided by engineer. - + Reset to defaults - Obnovení výchozího nastavení + Obnovení výchozího nastavení No comment provided by engineer. - + Restart the app to create a new chat profile - Restartujte aplikaci pro vytvoření nového chat profilu + Restartujte aplikaci pro vytvoření nového chat profilu No comment provided by engineer. - + Restart the app to use imported chat database - Restartujte aplikaci pro použití importované databáze chatu + Restartujte aplikaci pro použití importované databáze chatu No comment provided by engineer. - + Restore - Obnovit + Obnovit No comment provided by engineer. - + Restore database backup - Obnovte zálohu databáze + Obnovte zálohu databáze No comment provided by engineer. - + Restore database backup? - Obnovit zálohu databáze? + Obnovit zálohu databáze? No comment provided by engineer. - + Restore database error - Chyba obnovení databáze + Chyba obnovení databáze No comment provided by engineer. - + Reveal - Odhalit + Odhalit chat item action - + Revert - Vrátit + Vrátit No comment provided by engineer. - + Role - Role + Role No comment provided by engineer. - + Run chat - Spustit chat + Spustit chat No comment provided by engineer. - + SMP servers - SMP servery + SMP servery No comment provided by engineer. - + Save - Uložit + Uložit chat item action - + Save (and notify contacts) - Uložit (a informovat kontakty) + Uložit (a informovat kontakty) No comment provided by engineer. - + Save and notify contact - Uložit a upozornit kontakt + Uložit a upozornit kontakt No comment provided by engineer. - + Save and notify group members - Uložit a upozornit členy skupiny + Uložit a upozornit členy skupiny No comment provided by engineer. - + + Save and update group profile + No comment provided by engineer. + + Save archive - Uložit archiv + Uložit archiv No comment provided by engineer. - + Save group profile - Uložení profilu skupiny + Uložení profilu skupiny No comment provided by engineer. - + Save passphrase and open chat - Uložte heslo a otevřete chat + Uložte heslo a otevřete chat No comment provided by engineer. - + Save passphrase in Keychain - Uložit přístupovou frázi do Klíčenky + Uložit přístupovou frázi do Klíčenky No comment provided by engineer. - + Save preferences? - Uložit předvolby? + Uložit předvolby? No comment provided by engineer. - + + Save profile password + No comment provided by engineer. + + Save servers - Uložit servery + Uložit servery No comment provided by engineer. - + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + + Saved WebRTC ICE servers will be removed - Uložené servery WebRTC ICE budou odstraněny + Uložené servery WebRTC ICE budou odstraněny No comment provided by engineer. - + Scan QR code - Skenovat QR kód + Skenovat QR kód No comment provided by engineer. - + Scan code - Skenovat kód + Skenovat kód No comment provided by engineer. - + Scan security code from your contact's app. - Naskenujte bezpečnostní kód z aplikace vašeho kontaktu. + Naskenujte bezpečnostní kód z aplikace vašeho kontaktu. No comment provided by engineer. - + Scan server QR code - Naskenujte QR kód serveru + Naskenujte QR kód serveru No comment provided by engineer. - + Search - Hledat + Hledat No comment provided by engineer. - + Secure queue - Zabezpečit frontu + Zabezpečit frontu server test step - + Security assessment - Posouzení bezpečnosti + Posouzení bezpečnosti No comment provided by engineer. - + Security code - Bezpečnostní kód + Bezpečnostní kód No comment provided by engineer. - + Send - Poslat + Poslat No comment provided by engineer. - + Send a live message - it will update for the recipient(s) as you type it - Poslat živou zprávu - zpráva se bude aktualizovat pro příjemce během psaní + Poslat živou zprávu - zpráva se bude aktualizovat pro příjemce během psaní No comment provided by engineer. - + Send direct message - Odeslat přímou zprávu + Odeslat přímou zprávu No comment provided by engineer. - + Send link previews - Odesílání náhledů odkazů + Odesílání náhledů odkazů No comment provided by engineer. - + Send live message - Odeslat živou zprávu + Odeslat živou zprávu No comment provided by engineer. - + Send notifications - Odeslat oznámení + Odeslat oznámení No comment provided by engineer. - + Send notifications: - Odeslat oznámení: + Odeslat oznámení: No comment provided by engineer. - + Send questions and ideas - Zasílání otázek a nápadů + Zasílání otázek a nápadů No comment provided by engineer. - + Send them from gallery or custom keyboards. - Odeslat je z galerie nebo vlastní klávesnice. + Odeslat je z galerie nebo vlastní klávesnice. No comment provided by engineer. - + Sender cancelled file transfer. - Odesílatel zrušil přenos souboru. + Odesílatel zrušil přenos souboru. No comment provided by engineer. - + Sender may have deleted the connection request. - Odesílatel možná smazal požadavek připojení. + Odesílatel možná smazal požadavek připojení. No comment provided by engineer. - + Sending via - Odesílání přes + Odesílání přes No comment provided by engineer. - + Sent file event - Odeslaná událost souboru + Odeslaná událost souboru notification - + Sent messages will be deleted after set time. - Odeslané zprávy se po uplynutí nastavené doby odstraní. + Odeslané zprávy se po uplynutí nastavené doby odstraní. No comment provided by engineer. - + Server requires authorization to create queues, check password - Server vyžaduje autorizaci pro vytváření front, zkontrolujte heslo + Server vyžaduje autorizaci pro vytváření front, zkontrolujte heslo server test error - + Server test failed! - Test serveru se nezdařil! + Test serveru se nezdařil! No comment provided by engineer. - + Servers - Servery + Servery No comment provided by engineer. - + Set 1 day - Nastavit 1 den + Nastavit 1 den No comment provided by engineer. - + Set contact name… - Nastavení jména kontaktu… + Nastavení jména kontaktu… No comment provided by engineer. - + Set group preferences - Nastavení skupinových předvoleb + Nastavení skupinových předvoleb No comment provided by engineer. - + Set passphrase to export - Nastavení přístupové fráze pro export + Nastavení přístupové fráze pro export No comment provided by engineer. - + + Set the message shown to new members! + No comment provided by engineer. + + Set timeouts for proxy/VPN - Nastavit časové limity pro proxy/VPN + Nastavit časové limity pro proxy/VPN No comment provided by engineer. - + Settings - Nastavení + Nastavení No comment provided by engineer. - + Share - Sdílet + Sdílet chat item action - + Share invitation link - Sdílet odkaz na pozvánku + Sdílet odkaz na pozvánku No comment provided by engineer. - + Share link - Sdílet odkaz + Sdílet odkaz No comment provided by engineer. - + Share one-time invitation link - Jednorázový zvací odkaz + Jednorázový zvací odkaz No comment provided by engineer. - + Show QR code - Zobrazit QR kód + Zobrazit QR kód No comment provided by engineer. - + + Show calls in phone history + Ukaž hovory v historii telefonu + No comment provided by engineer. + + Show preview - Zobrazení náhledu + Zobrazení náhledu No comment provided by engineer. - + SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). - Zabezpečení SimpleX chatu bylo [auditováno společností Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). + Zabezpečení SimpleX chatu bylo [auditováno společností Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). No comment provided by engineer. - + SimpleX Lock - Zámek SimpleX + Zámek SimpleX No comment provided by engineer. - + SimpleX Lock turned on - Zapnutý zámek SimpleX Lock + Zapnutý zámek SimpleX Lock No comment provided by engineer. - + SimpleX contact address - SimpleX kontaktní adresa + SimpleX kontaktní adresa simplex link type - + SimpleX encrypted message or connection event - SimpleX šifrovaná zpráva nebo událost připojení + SimpleX šifrovaná zpráva nebo událost připojení notification - + SimpleX group link - Skupinový odkaz SimpleX + Skupinový odkaz SimpleX simplex link type - + SimpleX links - Odkazy na SimpleX + Odkazy na SimpleX No comment provided by engineer. - + SimpleX one-time invitation - Jednorázová pozvánka SimpleX + Jednorázová pozvánka SimpleX simplex link type - + Skip - Přeskočit + Přeskočit No comment provided by engineer. - + Skipped messages - Přeskočené zprávy + Přeskočené zprávy No comment provided by engineer. - + Somebody - Někdo + Někdo notification title - + Start a new chat - Začít nový chat + Začít nový chat No comment provided by engineer. - + Start chat - Začít chat + Začít chat No comment provided by engineer. - + Start migration - Zahájit přenesení + Zahájit přenesení No comment provided by engineer. - + Stop - Zastavit + Zastavit No comment provided by engineer. - + Stop SimpleX - Zastavit SimpleX + Zastavit SimpleX authentication reason - + Stop chat to enable database actions - Zastavte chat pro povolení akcí databáze + Zastavte chat pro povolení akcí databáze No comment provided by engineer. - + Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. - Zastavení chatu pro export, import nebo smazání databáze chatu. Během zastavení chatu nebudete moci přijímat a odesílat zprávy. + Zastavení chatu pro export, import nebo smazání databáze chatu. Během zastavení chatu nebudete moci přijímat a odesílat zprávy. No comment provided by engineer. - + Stop chat? - Zastavit chat? + Zastavit chat? No comment provided by engineer. - + Support SimpleX Chat - Podpořte SimpleX Chat + Podpořte SimpleX Chat No comment provided by engineer. - + System - Systém + Systém No comment provided by engineer. - + TCP connection timeout - Časový limit připojení TCP + Časový limit připojení TCP No comment provided by engineer. - + TCP_KEEPCNT - TCP_KEEPCNT + TCP_KEEPCNT No comment provided by engineer. - + TCP_KEEPIDLE - TCP_KEEPIDLE + TCP_KEEPIDLE No comment provided by engineer. - + TCP_KEEPINTVL - TCP_KEEPINTVL + TCP_KEEPINTVL No comment provided by engineer. - + Take picture - Vyfotit + Vyfotit No comment provided by engineer. - + Tap button - Klepněte na tlačítko + Klepněte na tlačítko No comment provided by engineer. - + + Tap to activate profile. + No comment provided by engineer. + + Tap to join - Klepnutím se připojíte + Klepnutím se připojíte No comment provided by engineer. - + Tap to join incognito - Klepnutím se připojíte inkognito + Klepnutím se připojíte inkognito No comment provided by engineer. - + Tap to start a new chat - Klepnutím na zahájíte nový chat + Klepnutím na zahájíte nový chat No comment provided by engineer. - + Test failed at step %@. - Test selhal v kroku %@. + Test selhal v kroku %@. server test failure - + Test server - Testovací server + Testovací server No comment provided by engineer. - + Test servers - Testovací servery + Testovací servery No comment provided by engineer. - + Tests failed! - Testy selhaly! + Testy selhaly! No comment provided by engineer. - + Thank you for installing SimpleX Chat! - Děkujeme, že jste si nainstalovali SimpleX Chat! + Děkujeme, že jste si nainstalovali SimpleX Chat! No comment provided by engineer. - + + Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + Díky uživatelům - [přispějte přes Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + No comment provided by engineer. + + + Thanks to the users – contribute via Weblate! + Díky uživatelům - přispívejte prostřednictvím Weblate! + No comment provided by engineer. + + The 1st platform without any user identifiers – private by design. - 1. Platforma bez identifikátorů uživatelů - soukromá už od záměru. + 1. Platforma bez identifikátorů uživatelů - soukromá už od záměru. No comment provided by engineer. - + The app can notify you when you receive messages or contact requests - please open settings to enable. - Aplikace vás může upozornit na přijaté zprávy nebo žádosti o kontakt - povolte to v nastavení. + Aplikace vás může upozornit na přijaté zprávy nebo žádosti o kontakt - povolte to v nastavení. No comment provided by engineer. - + The attempt to change database passphrase was not completed. - Pokus o změnu přístupové fráze databáze nebyl dokončen. + Pokus o změnu přístupové fráze databáze nebyl dokončen. No comment provided by engineer. - + The connection you accepted will be cancelled! - Připojení, které jste přijali, bude zrušeno! + Připojení, které jste přijali, bude zrušeno! No comment provided by engineer. - + The contact you shared this link with will NOT be able to connect! - Kontakt, se kterým jste tento odkaz sdíleli, se NEBUDE moci připojit! + Kontakt, se kterým jste tento odkaz sdíleli, se NEBUDE moci připojit! No comment provided by engineer. - + The created archive is available via app Settings / Database / Old database archive. - Vytvořený archiv je k dispozici v aplikaci Nastavení / Databáze / Archiv staré databáze. + Vytvořený archiv je k dispozici v aplikaci Nastavení / Databáze / Archiv staré databáze. No comment provided by engineer. - + The group is fully decentralized – it is visible only to the members. - Skupina je plně decentralizovaná - je viditelná pouze pro členy. + Skupina je plně decentralizovaná - je viditelná pouze pro členy. No comment provided by engineer. - - The microphone does not work when the app is in the background. - Mikrofon nefunguje, pokud je aplikace na pozadí. + + The message will be deleted for all members. + Zpráva bude smazána pro všechny členy. No comment provided by engineer. - + + The message will be marked as moderated for all members. + Zpráva bude pro všechny členy označena jako moderovaná. + No comment provided by engineer. + + The next generation of private messaging - Nová generace soukromých zpráv + Nová generace soukromých zpráv No comment provided by engineer. - + The old database was not removed during the migration, it can be deleted. - Stará databáze nebyla během přenášení odstraněna, lze ji smazat. + Stará databáze nebyla během přenášení odstraněna, lze ji smazat. No comment provided by engineer. - + The profile is only shared with your contacts. - Profil je sdílen pouze s vašimi kontakty. + Profil je sdílen pouze s vašimi kontakty. No comment provided by engineer. - + The sender will NOT be notified - Odesílatel NEBUDE informován + Odesílatel NEBUDE informován No comment provided by engineer. - + The servers for new connections of your current chat profile **%@**. - Servery pro nová připojení vašeho aktuálního chat profilu **%@**. + Servery pro nová připojení vašeho aktuálního chat profilu **%@**. No comment provided by engineer. - + Theme - Téma + Téma No comment provided by engineer. - + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. - Tuto akci nelze vrátit zpět - všechny přijaté a odeslané soubory a média budou smazány. Obrázky s nízkým rozlišením zůstanou zachovány. + Tuto akci nelze vrátit zpět - všechny přijaté a odeslané soubory a média budou smazány. Obrázky s nízkým rozlišením zůstanou zachovány. No comment provided by engineer. - + This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. - Tuto akci nelze vzít zpět - zprávy odeslané a přijaté dříve, než bylo zvoleno, budou smazány. Může to trvat několik minut. + Tuto akci nelze vzít zpět - zprávy odeslané a přijaté dříve, než bylo zvoleno, budou smazány. Může to trvat několik minut. No comment provided by engineer. - + This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. - Tuto akci nelze vzít zpět - váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny. + Tuto akci nelze vzít zpět - váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny. No comment provided by engineer. - + This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member). - Tato funkce je experimentální! Bude fungovat pouze v případě, že druhý klient má nainstalovanou verzi 4.2. Po dokončení změny adresy by se měla v konverzaci zobrazit zpráva - zkontrolujte, zda můžete od tohoto kontaktu (nebo člena skupiny) stále přijímat zprávy. + Tato funkce je experimentální! Bude fungovat pouze v případě, že druhý klient má nainstalovanou verzi 4.2. Po dokončení změny adresy by se měla v konverzaci zobrazit zpráva - zkontrolujte, zda můžete od tohoto kontaktu (nebo člena skupiny) stále přijímat zprávy. No comment provided by engineer. - + This group no longer exists. - Tato skupina již neexistuje. + Tato skupina již neexistuje. No comment provided by engineer. - + This setting applies to messages in your current chat profile **%@**. - Toto nastavení platí pro zprávy ve vašem aktuálním chat profilu **%@**. + Toto nastavení platí pro zprávy ve vašem aktuálním chat profilu **%@**. No comment provided by engineer. - + To ask any questions and to receive updates: - Chcete-li položit jakékoli dotazy a dostávat aktuality: + Chcete-li položit jakékoli dotazy a dostávat aktuality: No comment provided by engineer. - + To find the profile used for an incognito connection, tap the contact or group name on top of the chat. - Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části chatu. + Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části chatu. No comment provided by engineer. - + To make a new connection - Vytvoření nového připojení + Vytvoření nového připojení No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - K zabránění přerušení hovoru, povolte režim Nerušit. - No comment provided by engineer. - - + To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. - Pro ochranu soukromí namísto ID uživatelů používaných všemi ostatními platformami má SimpleX identifikátory pro fronty zpráv, oddělené pro každý z vašich kontaktů. + Pro ochranu soukromí namísto ID uživatelů používaných všemi ostatními platformami má SimpleX identifikátory pro fronty zpráv, oddělené pro každý z vašich kontaktů. No comment provided by engineer. - + + To protect timezone, image/voice files use UTC. + K ochraně časového pásma používají obrazové/hlasové soubory UTC. + No comment provided by engineer. + + To protect your information, turn on SimpleX Lock. You will be prompted to complete authentication before this feature is enabled. - Chcete-li chránit své informace, zapněte zámek SimpleX Lock. + Chcete-li chránit své informace, zapněte zámek SimpleX Lock. Před zapnutím této funkce budete vyzváni k dokončení ověření. No comment provided by engineer. - + To record voice message please grant permission to use Microphone. - Chcete-li nahrávat hlasové zprávy, udělte povolení k použití mikrofonu. + Chcete-li nahrávat hlasové zprávy, udělte povolení k použití mikrofonu. No comment provided by engineer. - + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + + To support instant push notifications the chat database has to be migrated. - Pro podporu doručování okamžitých upozornění musí být přenesena chat databáze. + Pro podporu doručování okamžitých upozornění musí být přenesena chat databáze. No comment provided by engineer. - + To verify end-to-end encryption with your contact compare (or scan) the code on your devices. - Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních. + Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních. No comment provided by engineer. - - Transfer images faster - No comment provided by engineer. - - + Transport isolation - Izolace transportu + Izolace transportu No comment provided by engineer. - + Trying to connect to the server used to receive messages from this contact (error: %@). - Pokus o připojení k serveru používanému k přijímání zpráv od tohoto kontaktu (chyba: %@). + Pokus o připojení k serveru používanému k přijímání zpráv od tohoto kontaktu (chyba: %@). No comment provided by engineer. - + Trying to connect to the server used to receive messages from this contact. - Pokus o připojení k serveru používanému pro příjem zpráv od tohoto kontaktu. + Pokus o připojení k serveru používanému pro příjem zpráv od tohoto kontaktu. No comment provided by engineer. - + Turn off - Vypnout + Vypnout No comment provided by engineer. - + Turn off notifications? - Vypnout upozornění? + Vypnout upozornění? No comment provided by engineer. - + Turn on - Zapnout + Zapnout No comment provided by engineer. - + Unable to record voice message - Nelze nahrát hlasovou zprávu + Nelze nahrát hlasovou zprávu No comment provided by engineer. - + Unexpected error: %@ - Neočekávaná chyba: %@ + Neočekávaná chyba: %@ No comment provided by engineer. - + Unexpected migration state - Neočekávaný stav přenášení + Neočekávaný stav přenášení No comment provided by engineer. - + + Unhide + No comment provided by engineer. + + + Unknown caller + Neznámý volající + callkit banner + + Unknown database error: %@ - Neznámá chyba databáze: %@ + Neznámá chyba databáze: %@ No comment provided by engineer. - + Unknown error - Neznámá chyba + Neznámá chyba No comment provided by engineer. - + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + Při nepoužívání rozhraní volání iOS, povolte režim Nerušit, abyste se vyhnuli vyrušování. + No comment provided by engineer. + + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. - Pokud váš kontakt neodstranil připojení nebo tento odkaz již nebyl použit, může se jednat o chybu – nahlaste ji. + Pokud váš kontakt neodstranil připojení nebo tento odkaz již nebyl použit, může se jednat o chybu – nahlaste ji. Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu na připojení a zkontrolujte, zda máte stabilní připojení k síti. No comment provided by engineer. - + Unlock - Odemknout + Odemknout authentication reason - + Unmute - Zrušit ztlumení + Zrušit ztlumení No comment provided by engineer. - + Unread - Nepřečtený + Nepřečtený No comment provided by engineer. - + Update - Aktualizovat + Aktualizovat No comment provided by engineer. - + Update .onion hosts setting? - Aktualizovat nastavení hostitelů .onion? + Aktualizovat nastavení hostitelů .onion? No comment provided by engineer. - + Update database passphrase - Aktualizovat přístupovou frázi databáze + Aktualizovat přístupovou frázi databáze No comment provided by engineer. - + Update network settings? - Aktualizovat nastavení sítě? + Aktualizovat nastavení sítě? No comment provided by engineer. - + Update transport isolation mode? - Aktualizovat režim dopravní izolace? + Aktualizovat režim dopravní izolace? No comment provided by engineer. - + Updating settings will re-connect the client to all servers. - Aktualizací nastavení se klient znovu připojí ke všem serverům. + Aktualizací nastavení se klient znovu připojí ke všem serverům. No comment provided by engineer. - + Updating this setting will re-connect the client to all servers. - Aktualizace tohoto nastavení znovu připojí klienta ke všem serverům. + Aktualizace tohoto nastavení znovu připojí klienta ke všem serverům. No comment provided by engineer. - + Use .onion hosts - Použít hostitele .onion + Použít hostitele .onion No comment provided by engineer. - + Use SimpleX Chat servers? - Používat servery SimpleX Chat? + Používat servery SimpleX Chat? No comment provided by engineer. - + Use chat - Použijte chat + Použijte chat No comment provided by engineer. - + Use for new connections - Použít pro nová připojení + Použít pro nová připojení No comment provided by engineer. - + + Use iOS call interface + Použít rozhraní volání iOS + No comment provided by engineer. + + Use server - Použít server + Použít server No comment provided by engineer. - + User profile - Profil uživatele + Profil uživatele No comment provided by engineer. - + Using .onion hosts requires compatible VPN provider. - Použití hostitelů .onion vyžaduje kompatibilního poskytovatele VPN. + Použití hostitelů .onion vyžaduje kompatibilního poskytovatele VPN. No comment provided by engineer. - + Using SimpleX Chat servers. - Používat servery SimpleX Chat. + Používat servery SimpleX Chat. No comment provided by engineer. - + Verify connection security - Ověření zabezpečení připojení + Ověření zabezpečení připojení No comment provided by engineer. - + Verify security code - Ověření bezpečnostního kódu + Ověření bezpečnostního kódu No comment provided by engineer. - + Via browser - Prostřednictvím prohlížeče + Prostřednictvím prohlížeče No comment provided by engineer. - + Video call - Videohovor + Videohovor No comment provided by engineer. - + View security code - Zobrazení bezpečnostního kódu + Zobrazení bezpečnostního kódu No comment provided by engineer. - + Voice messages - Hlasové zprávy + Hlasové zprávy chat feature - + Voice messages are prohibited in this chat. - Hlasové zprávy jsou v tomto chatu zakázány. + Hlasové zprávy jsou v tomto chatu zakázány. No comment provided by engineer. - + Voice messages are prohibited in this group. - Hlasové zprávy jsou v této skupině zakázány. + Hlasové zprávy jsou v této skupině zakázány. No comment provided by engineer. - + Voice messages prohibited! - Hlasové zprávy jsou zakázány! + Hlasové zprávy jsou zakázány! No comment provided by engineer. - + Voice message… - Hlasová zpráva… + Hlasová zpráva… No comment provided by engineer. - + Waiting for file - Čekání na soubor + Čekání na soubor No comment provided by engineer. - + Waiting for image - Čekání na obrázek + Čekání na obrázek No comment provided by engineer. - + WebRTC ICE servers - WebRTC servery ICE + WebRTC servery ICE No comment provided by engineer. - + Welcome %@! - Vítejte %@! + Vítejte %@! No comment provided by engineer. - + Welcome message - Uvítací zpráva + Uvítací zpráva No comment provided by engineer. - + What's new - Co je nového + Co je nového No comment provided by engineer. - + When available - Když je k dispozici + Když je k dispozici No comment provided by engineer. - + When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. - Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve. + Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve. No comment provided by engineer. - + With optional welcome message. - S volitelnou uvítací zprávou. + S volitelnou uvítací zprávou. No comment provided by engineer. - + Wrong database passphrase - Špatná přístupová fráze k databázi + Špatná přístupová fráze k databázi No comment provided by engineer. - + Wrong passphrase! - Špatná přístupová fráze! + Špatná přístupová fráze! No comment provided by engineer. - + You - Vy + Vy No comment provided by engineer. - + You accepted connection - Přijali jste spojení + Přijali jste spojení No comment provided by engineer. - + You allow - Povolíte + Povolíte No comment provided by engineer. - + + You already have a chat profile with the same display name. Please choose another name. + Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno. + No comment provided by engineer. + + You are already connected to %@. - Již jste připojeni k %@. + Již jste připojeni k %@. No comment provided by engineer. - + You are connected to the server used to receive messages from this contact. - Jste připojeni k serveru, který se používá k přijímání zpráv od tohoto kontaktu. + Jste připojeni k serveru, který se používá k přijímání zpráv od tohoto kontaktu. No comment provided by engineer. - + You are invited to group - Jste pozváni do skupiny + Jste pozváni do skupiny No comment provided by engineer. - + + You can accept calls from lock screen, without device and app authentication. + Můžete přijímat hovory z obrazovky zámku, bez ověření zařízení a aplikace. + No comment provided by engineer. + + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. - Můžete se také připojit kliknutím na odkaz. Pokud se otevře v prohlížeči, klikněte na tlačítko **Otevřít v mobilní aplikaci**. + Můžete se také připojit kliknutím na odkaz. Pokud se otevře v prohlížeči, klikněte na tlačítko **Otevřít v mobilní aplikaci**. No comment provided by engineer. - + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + + You can now send messages to %@ - Nyní můžete posílat zprávy %@ + Nyní můžete posílat zprávy %@ notification body - + You can set lock screen notification preview via settings. - Náhled oznámení na zamykací obrazovce můžete změnit v nastavení. + Náhled oznámení na zamykací obrazovce můžete změnit v nastavení. No comment provided by engineer. - + 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. - Můžete sdílet odkaz nebo QR kód - ke skupině se bude moci připojit kdokoli. O členy skupiny nepřijdete, pokud ji později odstraníte. + Můžete sdílet odkaz nebo QR kód - ke skupině se bude moci připojit kdokoli. O členy skupiny nepřijdete, pokud ji později odstraníte. No comment provided by engineer. - + You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. - Můžete sdílet svou adresu jako odkaz nebo jako QR kód - kdokoli se k vám bude moci připojit. O své kontakty nepřijdete, pokud ji později smažete. + Můžete sdílet svou adresu jako odkaz nebo jako QR kód - kdokoli se k vám bude moci připojit. O své kontakty nepřijdete, pokud ji později smažete. No comment provided by engineer. - + You can start chat via app Settings / Database or by restarting the app - Chat můžete zahájit prostřednictvím aplikace Nastavení / Databáze nebo restartováním aplikace + Chat můžete zahájit prostřednictvím aplikace Nastavení / Databáze nebo restartováním aplikace No comment provided by engineer. - + You can use markdown to format messages: - K formátování zpráv můžete použít markdown: + K formátování zpráv můžete použít markdown: No comment provided by engineer. - + + You can't send messages! + Nemůžete posílat zprávy! + No comment provided by engineer. + + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. - Sami řídíte, přes který server(y) **přijímat** zprávy, své kontakty – servery, které používáte k odesílání zpráv. + Sami řídíte, přes který server(y) **přijímat** zprávy, své kontakty – servery, které používáte k odesílání zpráv. No comment provided by engineer. - + You could not be verified; please try again. - Nemohli jste být ověřeni; Zkuste to prosím znovu. + Nemohli jste být ověřeni; Zkuste to prosím znovu. No comment provided by engineer. - + You have no chats - Nemáte žádné konverzace + Nemáte žádné konverzace No comment provided by engineer. - + You have to enter passphrase every time the app starts - it is not stored on the device. - Musíte zadat přístupovou frázi při každém spuštění aplikace - není uložena v zařízení. + Musíte zadat přístupovou frázi při každém spuštění aplikace - není uložena v zařízení. No comment provided by engineer. - + You invited your contact - Pozvali jste svůj kontakt + Pozvali jste svůj kontakt No comment provided by engineer. - + You joined this group - Připojili jste se k této skupině + Připojili jste se k této skupině No comment provided by engineer. - + You joined this group. Connecting to inviting group member. - Připojili jste se k této skupině. Připojení k pozvání člena skupiny. + Připojili jste se k této skupině. Připojení k pozvání člena skupiny. No comment provided by engineer. - + You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts. - Nejnovější verzi databáze chatu musíte používat POUZE v jednom zařízení, jinak se může stát, že přestanete přijímat zprávy od některých kontaktů. + Nejnovější verzi databáze chatu musíte používat POUZE v jednom zařízení, jinak se může stát, že přestanete přijímat zprávy od některých kontaktů. No comment provided by engineer. - + You need to allow your contact to send voice messages to be able to send them. - Abyste mohli odesílat hlasové zprávy, musíte je povolit svému kontaktu. + Abyste mohli odesílat hlasové zprávy, musíte je povolit svému kontaktu. No comment provided by engineer. - + You rejected group invitation - Odmítli jste pozvánku do skupiny + Odmítli jste pozvánku do skupiny No comment provided by engineer. - + You sent group invitation - Odeslali jste pozvánku do skupiny + Odeslali jste pozvánku do skupiny No comment provided by engineer. - + You will be connected to group when the group host's device is online, please wait or check later! - Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později! + Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později! No comment provided by engineer. - + You will be connected when your connection request is accepted, please wait or check later! - Budete připojeni, jakmile bude vaše žádost o připojení přijata, vyčkejte prosím nebo se podívejte později! + Budete připojeni, jakmile bude vaše žádost o připojení přijata, vyčkejte prosím nebo se podívejte později! No comment provided by engineer. - + You will be connected when your contact's device is online, please wait or check later! - Budete připojeni, až bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později! + Budete připojeni, až bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později! No comment provided by engineer. - + You will be required to authenticate when you start or resume the app after 30 seconds in background. - Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete požádáni o ověření. + Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete požádáni o ověření. No comment provided by engineer. - + You will join a group this link refers to and connect to its group members. - Připojíte se ke skupině, na kterou tento odkaz odkazuje, a spojíte se s jejími členy. + Připojíte se ke skupině, na kterou tento odkaz odkazuje, a spojíte se s jejími členy. No comment provided by engineer. - + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + + You will stop receiving messages from this group. Chat history will be preserved. - Přestanete dostávat zprávy z této skupiny. Historie chatu bude zachována. + Přestanete dostávat zprávy z této skupiny. Historie chatu bude zachována. No comment provided by engineer. - + You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile - Snažíte se pozvat kontakt, se kterým jste sdíleli inkognito profil, do skupiny, ve které používáte svůj hlavní profil + Snažíte se pozvat kontakt, se kterým jste sdíleli inkognito profil, do skupiny, ve které používáte svůj hlavní profil No comment provided by engineer. - + You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed - Pro tuto skupinu používáte inkognito profil - abyste zabránili sdílení svého hlavního profilu, není pozvání kontaktů povoleno + Pro tuto skupinu používáte inkognito profil - abyste zabránili sdílení svého hlavního profilu, není pozvání kontaktů povoleno No comment provided by engineer. - + Your ICE servers - Vaše servery ICE + Vaše servery ICE No comment provided by engineer. - + Your SMP servers - Vaše servery SMP + Vaše servery SMP No comment provided by engineer. - + Your SimpleX contact address - Vaše kontaktní adresa SimpleX + Vaše kontaktní adresa SimpleX No comment provided by engineer. - + Your calls - Vaše hovory + Vaše hovory No comment provided by engineer. - + Your chat database - Vaše chatovací databáze + Vaše chatovací databáze No comment provided by engineer. - + Your chat database is not encrypted - set passphrase to encrypt it. - Vaše chat databáze není šifrována – nastavte přístupovou frázi pro její šifrování. + Vaše chat databáze není šifrována – nastavte přístupovou frázi pro její šifrování. No comment provided by engineer. - - Your chat profile - No comment provided by engineer. - - + Your chat profile will be sent to group members - Váš profil v chatu bude zaslán členům skupiny + Váš chat profil bude zaslán členům skupiny No comment provided by engineer. - + Your chat profile will be sent to your contact - Váš profil v chatu bude odeslán vašemu kontaktu + Váš chat profil bude odeslán vašemu kontaktu No comment provided by engineer. - + Your chat profiles - Vaše profily v chatu + Vaše chat profily No comment provided by engineer. - - Your chat profiles are stored locally, only on your device. - Vaše profily v chatu jsou uloženy lokálně, pouze ve vašem zařízení. - No comment provided by engineer. - - + Your chats - Vaše konverzace + Vaše konverzace No comment provided by engineer. - + Your contact address - Vaše kontaktní adresa + Vaše adresa No comment provided by engineer. - + Your contact can scan it from the app. - Váš kontakt jej může naskenovat z aplikace. + Váš kontakt jej může naskenovat z aplikace. No comment provided by engineer. - + Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link). - Aby se připojení dokončilo, musí být váš kontakt online. + K dokončení připojení, musí být váš kontakt online. Toto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem). No comment provided by engineer. - + Your contact sent a file that is larger than currently supported maximum size (%@). - Kontakt odeslal soubor, který je větší než aktuálně podporovaná maximální velikost (%@). + Kontakt odeslal soubor, který je větší než aktuálně podporovaná maximální velikost (%@). No comment provided by engineer. - + Your contacts can allow full message deletion. - Vaše kontakty mohou povolit úplné vymazání zpráv. + Vaše kontakty mohou povolit úplné mazání zpráv. No comment provided by engineer. - + Your current chat database will be DELETED and REPLACED with the imported one. - Vaše aktuální chat databáze bude ODSTRANĚNA a NAHRAZENA importovanou. + Vaše aktuální chat databáze bude ODSTRANĚNA a NAHRAZENA importovanou. No comment provided by engineer. - + Your current profile - Váš současný profil + Váš současný profil No comment provided by engineer. - + Your preferences - Vaše preference + Vaše preference No comment provided by engineer. - + Your privacy - Vaše soukromí + Vaše soukromí No comment provided by engineer. - + Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile. - Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty. + Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty. Servery SimpleX nevidí váš profil. No comment provided by engineer. - + Your profile will be sent to the contact that you received this link from - Váš profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz + Váš profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz No comment provided by engineer. - + Your profile, contacts and delivered messages are stored on your device. - Váš profil, kontakty a doručené zprávy jsou uloženy ve vašem zařízení. + Váš profil, kontakty a doručené zprávy jsou uloženy ve vašem zařízení. No comment provided by engineer. - + Your random profile - Váš náhodný profil + Váš náhodný profil No comment provided by engineer. - + Your server - Váš server + Váš server No comment provided by engineer. - + Your server address - Adresa vašeho serveru + Adresa vašeho serveru No comment provided by engineer. - + Your settings - Vaše nastavení + Vaše nastavení No comment provided by engineer. - + [Contribute](https://github.com/simplex-chat/simplex-chat#contribute) - [Přispějte](https://github.com/simplex-chat/simplex-chat#contribute) + [Přispějte](https://github.com/simplex-chat/simplex-chat#contribute) No comment provided by engineer. - + [Send us email](mailto:chat@simplex.chat) - [Pošlete nám e-mail](mailto:chat@simplex.chat) + [Pošlete nám e-mail](mailto:chat@simplex.chat) No comment provided by engineer. - + [Star on GitHub](https://github.com/simplex-chat/simplex-chat) - [Hvězda na GitHubu](https://github.com/simplex-chat/simplex-chat) + [Hvězda na GitHubu](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. - + \_italic_ - \_kurzíva_ + \_kurzíva_ No comment provided by engineer. - + \`a + b` - \`a + b` + \`a + b` No comment provided by engineer. - + above, then choose: - výše, pak vyberte: + výše, pak vyberte: No comment provided by engineer. - + accepted call - přijatý hovor + přijatý hovor call status - + admin - správce + správce member role - + always - vždy + vždy pref value - + audio call (not e2e encrypted) - zvukový hovor (nešifrovaný e2e) + zvukový hovor (nešifrovaný e2e) No comment provided by engineer. - + bad message ID - špatné ID zprávy + špatné ID zprávy integrity error chat item - + bad message hash - špatný hash zprávy + špatný hash zprávy integrity error chat item - + bold - tučně + tučně No comment provided by engineer. - + call error - chyba volání + chyba volání call status - + call in progress - probíhající hovor + probíhající hovor call status - + calling… - volání… + volání… call status - + cancelled %@ - zrušeno %@ + zrušeno %@ feature offered item - + changed address for you - změnila se vaše adresa + změnila se vaše adresa chat item text - + changed role of %1$@ to %2$@ - Role %1$@ byla změněna na %2$ @ + Role %1$@ byla změněna na %2$ @ rcv group event chat item - + changed your role to %@ - změnil vaši roli na %@ + změnil vaši roli na %@ rcv group event chat item - + changing address for %@... - změna adresy pro %@... + změna adresy pro %@... chat item text - + changing address... - změna adresy... + změna adresy... chat item text - + colored - barevné + barevné No comment provided by engineer. - + complete - kompletní + kompletní No comment provided by engineer. - + connect to SimpleX Chat developers. - připojit se k vývojářům SimpleX Chat. + připojit se k vývojářům SimpleX Chat. No comment provided by engineer. - + connected - připojeno + připojeno No comment provided by engineer. - + connecting - připojování + připojování No comment provided by engineer. - + connecting (accepted) - připojení (přijato) + připojení (přijato) No comment provided by engineer. - + connecting (announced) - připojení (oznámeno) + připojení (oznámeno) No comment provided by engineer. - + connecting (introduced) - připojující (zavedený) + připojující (zavedený) No comment provided by engineer. - + connecting (introduction invitation) - připojení (pozvánka na představení) + připojení (pozvánka na představení) No comment provided by engineer. - + connecting call… - spojovací hovor… + spojovací hovor… call status - + connecting… - připojení… + připojení… chat list item title - + connection established - spojení navázáno + spojení navázáno chat list item title (it should not be shown - + connection:%@ - připojení:%@ + připojení:%@ connection information - + contact has e2e encryption - kontakt má šifrování e2e + kontakt má šifrování e2e No comment provided by engineer. - + contact has no e2e encryption - kontakt nemá šifrování e2e + kontakt nemá šifrování e2e No comment provided by engineer. - + creator - tvůrce + tvůrce No comment provided by engineer. - + default (%@) - výchozí (%@) + výchozí (%@) pref value - + deleted - smazáno + smazáno deleted chat item - + deleted group - odstraněna skupina + odstraněna skupina rcv group event chat item - + direct - přímo + přímo connection level description - + duplicate message - duplicitní zpráva + duplicitní zpráva integrity error chat item - + e2e encrypted - e2e šifrované + e2e šifrované No comment provided by engineer. - + enabled - povoleno + povoleno enabled status - + enabled for contact - povoleno pro kontakt + povoleno pro kontakt enabled status - + enabled for you - povoleno pro vás + povoleno pro vás enabled status - + ended - ukončeno + ukončeno No comment provided by engineer. - + ended call %@ - ukončený hovor %@ + ukončený hovor %@ call status - + error - chyba + chyba No comment provided by engineer. - + group deleted - skupina smazána + skupina smazána No comment provided by engineer. - + group profile updated - profil skupiny aktualizován + profil skupiny aktualizován snd group event chat item - + iOS Keychain is used to securely store passphrase - it allows receiving push notifications. - iOS klíčenka slouží k bezpečnému ukládání přístupové fráze – umožňuje přijímat push notifikace. + iOS klíčenka slouží k bezpečnému ukládání přístupové fráze – umožňuje přijímat push notifikace. No comment provided by engineer. - + iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications. - Klíčenka pro iOS bude použita k bezpečnému uložení přístupové fráze po restartování aplikace nebo změně přístupové fráze – umožní příjem oznámení push. + Klíčenka pro iOS bude použita k bezpečnému uložení přístupové fráze po restartování aplikace nebo změně přístupové fráze – umožní příjem oznámení push. No comment provided by engineer. - + incognito via contact address link - inkognito přes odkaz na kontaktní adresu + inkognito přes odkaz na kontaktní adresu chat list item description - + incognito via group link - inkognito přes skupinový odkaz + inkognito přes skupinový odkaz chat list item description - + incognito via one-time link - inkognito přes jednorázový odkaz + inkognito přes jednorázový odkaz chat list item description - + indirect (%d) - nepřímé (%d) + nepřímé (%d) connection level description - + invalid chat - neplatný chat + neplatný chat invalid chat data - + invalid chat data - neplatná chat data + neplatná chat data No comment provided by engineer. - + invalid data - neplatné údaje + neplatné údaje invalid chat item - + invitation to group %@ - pozvánka do skupiny %@ + pozvánka do skupiny %@ group name - + invited - pozvánka + pozvánka No comment provided by engineer. - + invited %@ - pozván %@ + pozván %@ rcv group event chat item - + invited to connect - pozvánka k připojení + pozvánka k připojení chat list item title - + invited via your group link - pozváni prostřednictvím odkazu na vaši skupinu + pozváni prostřednictvím odkazu na vaši skupinu rcv group event chat item - + italic - kurzíva + kurzíva No comment provided by engineer. - + join as %@ - připojit se jako %@ + připojit se jako %@ No comment provided by engineer. - + left - opustil + opustil rcv group event chat item - + marked deleted - označeno jako smazáno + označeno jako smazáno marked deleted chat item preview text - + member - člen + člen member role - + connected - připojeno + připojeno rcv group event chat item - + message received - zpráva přijata + zpráva přijata notification - + missed call - zmeškané volání + zmeškané volání call status - - never - nikdy + + moderated + moderované + moderated chat item + + + moderated by %@ + moderovaný %@ No comment provided by engineer. - + + never + nikdy + No comment provided by engineer. + + new message - nová zpráva + nová zpráva notification - + no - ne + ne pref value - + no e2e encryption - bez šifrování e2e + bez šifrování e2e No comment provided by engineer. - + + observer + pozorovatel + member role + + off - vypnuto + vypnuto enabled status group pref value - + offered %@ - nabídl %@ + nabídl %@ feature offered item - + offered %1$@: %2$@ - nabídl %1$@: %2$@ + nabídl %1$@: %2$@ feature offered item - + on - zapnuto + zapnuto group pref value - + or chat with the developers - nebo chat s vývojáři + nebo chat s vývojáři No comment provided by engineer. - + owner - vlastník + vlastník member role - + peer-to-peer - peer-to-peer + peer-to-peer No comment provided by engineer. - + received answer… - obdržel odpověď… + obdržel odpověď… No comment provided by engineer. - + received confirmation… - obdržel potvrzení… + obdržel potvrzení… No comment provided by engineer. - + rejected call - odmítnutý hovor + odmítnutý hovor call status - + removed - odstraněno + odstraněno No comment provided by engineer. - + removed %@ - odstraněno %@ + odstraněno %@ rcv group event chat item - + removed you - odstranil vás + odstranil vás rcv group event chat item - + sec - sek + sek network option - + secret - tajný + tajný No comment provided by engineer. - + starting… - začíná… + začíná… No comment provided by engineer. - + strike - stávka + stávka No comment provided by engineer. - + this contact - tento kontakt + tento kontakt notification title - + unknown - neznámý + neznámý connection info - + updated group profile - aktualizoval profil skupiny + aktualizoval profil skupiny rcv group event chat item - + v%@ (%@) - v%@ (%@) + v%@ (%@) No comment provided by engineer. - + via contact address link - prostřednictvím odkazu na kontaktní adresu + prostřednictvím odkazu na kontaktní adresu chat list item description - + via group link - prostřednictvím skupinového odkazu + prostřednictvím skupinového odkazu chat list item description - + via one-time link - prostřednictvím jednorázového odkazu + jednorázovým odkazem chat list item description - + via relay - přes relé + přes relé No comment provided by engineer. - + video call (not e2e encrypted) - videohovoru (nešifrovaného e2e) + videohovoru (nešifrovaného e2e) No comment provided by engineer. - + waiting for answer… - čeká na odpověď… + čeká na odpověď… No comment provided by engineer. - + waiting for confirmation… - čekání na potvrzení… + čekání na potvrzení… No comment provided by engineer. - + wants to connect to you! - chce se s vámi spojit! + chce se s vámi spojit! No comment provided by engineer. - + yes - ano + ano pref value - + you are invited to group - jste pozváni do skupiny + jste pozváni do skupiny No comment provided by engineer. - + + you are observer + jste pozorovatel + No comment provided by engineer. + + you changed address - změnili jste adresu + změnili jste adresu chat item text - + you changed address for %@ - Adresa pro %@ změněna + Adresa pro %@ změněna chat item text - + you changed role for yourself to %@ - Změnili jste si roli na %@ + Změnili jste si roli na %@ snd group event chat item - + you changed role of %1$@ to %2$@ - změnili jste roli z %1$@ na %2$@ + změnili jste roli z %1$@ na %2$@ snd group event chat item - + you left - odešli jste + odešli jste snd group event chat item - + you removed %@ - Odebrali jste %@ + Odebrali jste %@ snd group event chat item - + you shared one-time link - sdíleli jste jednorázový odkaz + sdíleli jste jednorázový odkaz chat list item description - + you shared one-time link incognito - sdíleli jste jednorázový odkaz inkognito + sdíleli jste jednorázový odkaz inkognito chat list item description - + you: - vy: + vy: No comment provided by engineer. - + \~strike~ - \~stávka~ + \~stávka~ No comment provided by engineer. - - Different names, avatars and transport isolation. - Různá jména, avatary a dopravní izolace. - No comment provided by engineer. - - - Duplicate display name! - Duplicitní zobrazované jméno! - No comment provided by engineer. - - - Error creating profile! - Chyba při vytváření profilu! - No comment provided by engineer. - - - Error switching profile! - Chyba při přepínání profilu! - No comment provided by engineer. - - - French interface - Francouzské rozhraní - No comment provided by engineer. - - - Message draft - Návrh zprávy - No comment provided by engineer. - - - More improvements are coming soon! - Další vylepšení se chystají již brzy! - No comment provided by engineer. - - - Multiple chat profiles - Více chatovacích profilů - No comment provided by engineer. - - - Preserve the last message draft, with attachments. - Zachování posledního návrhu zprávy s přílohami. - No comment provided by engineer. - - - Private filenames - Soukromé názvy souborů - No comment provided by engineer. - - - Reduced battery usage - Snížení spotřeby baterie - No comment provided by engineer. - - - Thanks to the users – contribute via Weblate! - Díky uživatelům - přispívejte prostřednictvím Weblate! - No comment provided by engineer. - - - To protect timezone, image/voice files use UTC. - K ochraně časového pásma používají obrazové/hlasové soubory UTC. - No comment provided by engineer. - - - Italian interface - Italské rozhraní - No comment provided by engineer. - - - You already have a chat profile with the same display name. Please choose another name. - Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno. - No comment provided by engineer. - - - moderated - moderované - moderated chat item - - - Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! - Díky uživatelům - [přispějte přes Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! - No comment provided by engineer. - - - By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). - Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). - No comment provided by engineer. - - - Open user profiles - Otevřít uživatelské profily - authentication reason -
- +
- + SimpleX - SimpleX + SimpleX Bundle name - + SimpleX needs camera access to scan QR codes to connect to other users and for video calls. - SimpleX potřebuje přístup k fotoaparátu, aby mohl skenovat QR kódy pro připojení k ostatním uživatelům a pro videohovory. + SimpleX potřebuje přístup k fotoaparátu, aby mohl skenovat QR kódy pro připojení k ostatním uživatelům a pro videohovory. Privacy - Camera Usage Description - + SimpleX uses Face ID for local authentication - SimpleX používá Face ID pro místní ověřování + SimpleX používá Face ID pro místní ověřování Privacy - Face ID Usage Description - + SimpleX needs microphone access for audio and video calls, and to record voice messages. - SimpleX potřebuje přístup k mikrofonu pro audio a video hovory a pro nahrávání hlasových zpráv. + SimpleX potřebuje přístup k mikrofonu pro audio a video hovory a pro nahrávání hlasových zpráv. Privacy - Microphone Usage Description - + SimpleX needs access to Photo Library for saving captured and received media - SimpleX potřebuje přístup do knihovny fotografií pro ukládání zachycených a přijatých médií + SimpleX potřebuje přístup do knihovny fotografií pro ukládání zachycených a přijatých médií Privacy - Photo Library Additions Usage Description
- +
- + SimpleX NSE - SimpleX NSE + SimpleX NSE Bundle display name - + SimpleX NSE - SimpleX NSE + SimpleX NSE Bundle name - + Copyright © 2022 SimpleX Chat. All rights reserved. - Autorská práva © 2022 SimpleX Chat. Všechna práva vyhrazena. + Autorská práva © 2022 SimpleX Chat. Všechna práva vyhrazena. Copyright (human-readable) diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/contents.json b/apps/ios/SimpleX Localizations/cs.xcloc/contents.json index 84aa6fa4e..72530b589 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/cs.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "cs", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index e089b70ad..90c6260ec 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -2,7 +2,7 @@
- +
@@ -385,6 +385,10 @@ Einem anderen Gerät hinzufügen No comment provided by engineer. + + Add welcome message + No comment provided by engineer. + Admins can create the links to join groups. Administratoren können Links für den Beitritt zu Gruppen erzeugen. @@ -480,6 +484,11 @@ Sind Sie bereits verbunden? No comment provided by engineer. + + Always use relay + Über ein Relais verbinden + No comment provided by engineer. + Answer call Anruf annehmen @@ -520,11 +529,20 @@ Audio- & Videoanrufe No comment provided by engineer. + + Audio and video calls + No comment provided by engineer. + Authentication failed Authentifizierung fehlgeschlagen No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + Bevor der Anruf verbunden wird, ist eine Authentifizierung erforderlich, aber Sie könnten Anrufe verpassen. + No comment provided by engineer. + Authentication unavailable Authentifizierung nicht verfügbar @@ -580,6 +598,10 @@ Anrufe No comment provided by engineer. + + Can't delete user profile! + No comment provided by engineer. + Can't invite contact! Kontakt kann nicht eingeladen werden! @@ -685,6 +707,10 @@ Überprüfen Sie die Serveradresse und versuchen Sie es nochmal. No comment provided by engineer. + + Chinese and Spanish interface + No comment provided by engineer. + Choose file Datei auswählen @@ -740,6 +766,10 @@ Neues Passwort bestätigen… No comment provided by engineer. + + Confirm password + No comment provided by engineer. + Connect Verbinden @@ -770,11 +800,6 @@ Über einen Einmal-Link verbinden? No comment provided by engineer. - - Connect via relay - Über ein Relais verbinden - No comment provided by engineer. - Connecting to server… Mit dem Server verbinden… @@ -1133,6 +1158,11 @@ Link löschen? No comment provided by engineer. + + Delete member message? + Nachricht des Mitglieds löschen? + No comment provided by engineer. + Delete message? Die Nachricht löschen? @@ -1268,6 +1298,10 @@ Später wiederholen No comment provided by engineer. + + Don't show again + No comment provided by engineer. + Duplicate display name! Doppelter Anzeigename! @@ -1368,6 +1402,10 @@ Passwort eingeben… No comment provided by engineer. + + Enter password above to show! + No comment provided by engineer. + Enter server manually Geben Sie den Server manuell ein @@ -1523,6 +1561,10 @@ Fehler beim Speichern des Passworts in den Schlüsselbund No comment provided by engineer. + + Error saving user password + No comment provided by engineer. + Error sending message Fehler beim Senden der Nachricht @@ -1543,6 +1585,11 @@ Fehler beim Umschalten des Profils! No comment provided by engineer. + + Error updating group link + Fehler beim Aktualisieren des Gruppen-Links + No comment provided by engineer. + Error updating message Fehler beim Aktualisieren der Nachricht @@ -1553,6 +1600,10 @@ Fehler beim Aktualisieren der Einstellungen No comment provided by engineer. + + Error updating user privacy + No comment provided by engineer. + Error: %@ Fehler: %@ @@ -1638,6 +1689,14 @@ Vollständiger Name: No comment provided by engineer. + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + GIFs and stickers GIFs und Sticker @@ -1713,6 +1772,10 @@ Grppennachricht: notification + + Group moderation + No comment provided by engineer. + Group preferences Gruppenpräferenzen @@ -1728,6 +1791,10 @@ Das Gruppenprofil wird nur auf den Mitglieds-Systemen gespeichert und nicht auf den Servern. No comment provided by engineer. + + Group welcome message + No comment provided by engineer. + Group will be deleted for all members - this cannot be undone! Die Gruppe wird für alle Mitglieder gelöscht - dies kann nicht rückgängig gemacht werden! @@ -1748,6 +1815,14 @@ Verborgen No comment provided by engineer. + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + Hide Verbergen @@ -1758,6 +1833,10 @@ App-Bildschirm in aktuellen Anwendungen verbergen. No comment provided by engineer. + + Hide profile + No comment provided by engineer. + How SimpleX works Wie SimpleX funktioniert @@ -1788,11 +1867,6 @@ ICE-Server (einer pro Zeile) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - Wenn der Videoanruf nicht funktioniert, wechseln Sie die Kamera, um das Problem zu lösen. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. Wenn Sie sich nicht persönlich treffen können, kann der **QR-Code während eines Videoanrufs angezeigt werden**, oder der Einladungslink über einen anderen Kanal mit Ihrem Kontakt geteilt werden. @@ -1905,6 +1979,11 @@ Sofort No comment provided by engineer. + + Interface + Schnittstelle + No comment provided by engineer. + Invalid connection link Ungültiger Verbindungslink @@ -2060,6 +2139,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Stellen Sie eine private Verbindung her No comment provided by engineer. + + Make profile private! + No comment provided by engineer. + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). Stellen Sie sicher, dass die SMP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@). @@ -2160,6 +2243,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Die Migration wurde abgeschlossen No comment provided by engineer. + + Moderate + Moderieren + chat item action + More improvements are coming soon! Weitere Verbesserungen sind bald verfügbar! @@ -2180,6 +2268,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Stummschalten No comment provided by engineer. + + Muted when inactive! + No comment provided by engineer. + Name Name @@ -2280,6 +2372,12 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Benachrichtigungen sind deaktiviert! No comment provided by engineer. + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + Off (Local) Aus (Lokal) @@ -2405,6 +2503,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v PING-Intervall No comment provided by engineer. + + Password to show + No comment provided by engineer. + Paste Einfügen @@ -2455,6 +2557,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Bitte überprüfen sie sowohl Ihre, als auch die Präferenzen Ihres Kontakts. No comment provided by engineer. + + Please contact group admin. + Bitte kontaktieren Sie den Gruppen-Administrator. + No comment provided by engineer. + Please enter correct current passphrase. Bitte geben Sie das korrekte, aktuelle Passwort ein. @@ -2550,6 +2657,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v App-Bildschirm schützen No comment provided by engineer. + + Protect your chat profiles with a password! + No comment provided by engineer. + Protocol timeout Protokollzeitüberschreitung @@ -2745,6 +2856,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Speichern und Gruppenmitglieder benachrichtigen No comment provided by engineer. + + Save and update group profile + No comment provided by engineer. + Save archive Archiv speichern @@ -2770,11 +2885,23 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Präferenzen speichern? No comment provided by engineer. + + Save profile password + No comment provided by engineer. + Save servers Alle Server speichern No comment provided by engineer. + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + Saved WebRTC ICE servers will be removed Gespeicherte WebRTC ICE-Server werden entfernt @@ -2925,6 +3052,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Passwort für den Export festlegen No comment provided by engineer. + + Set the message shown to new members! + No comment provided by engineer. + Set timeouts for proxy/VPN Zeitüberschreitungen für Proxy/VPN einstellen @@ -2960,6 +3091,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v QR-Code anzeigen No comment provided by engineer. + + Show calls in phone history + Anrufliste zeigen + No comment provided by engineer. + Show preview Vorschau anzeigen @@ -3100,6 +3236,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Schaltfläche antippen No comment provided by engineer. + + Tap to activate profile. + No comment provided by engineer. + Tap to join Zum Beitreten tippen @@ -3185,9 +3325,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Die Gruppe ist vollständig dezentralisiert – sie ist nur für Mitglieder sichtbar. No comment provided by engineer. - - The microphone does not work when the app is in the background. - Das Mikrofon wird nicht funktionieren, wenn sich die App im Hintergrund befindet. + + The message will be deleted for all members. + Diese Nachricht wird für alle Gruppenmitglieder gelöscht. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet. No comment provided by engineer. @@ -3220,6 +3365,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Design No comment provided by engineer. + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. Diese Aktion kann nicht rückgängig gemacht werden! Alle empfangenen und gesendeten Dateien und Medien werden gelöscht. Bilder mit niedriger Auflösung bleiben erhalten. @@ -3265,11 +3418,6 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Um eine Verbindung mit einem neuen Kontakt zu erstellen No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - Aktivieren Sie den "Nicht stören" Modus, um Anruf-Unterbrechungen zu vermeiden. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. Zum Schutz Ihrer Privatsphäre verwendet SimpleX an Stelle von Benutzerkennungen, die von allen anderen Plattformen verwendet werden, Kennungen für Nachrichtenwarteschlangen, die für jeden Ihrer Kontakte individuell sind. @@ -3292,6 +3440,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können. No comment provided by engineer. + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + To support instant push notifications the chat database has to be migrated. Um sofortige Push-Benachrichtigungen zu unterstützen, muss die Chat-Datenbank migriert werden. @@ -3347,6 +3499,15 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Unerwarteter Migrationsstatus No comment provided by engineer. + + Unhide + No comment provided by engineer. + + + Unknown caller + Anrufer unbekannt + callkit banner + Unknown database error: %@ Unbekannter Datenbankfehler: %@ @@ -3357,6 +3518,11 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Unbekannter Fehler No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + Aktivieren Sie den Modus "Bitte nicht stören", um Unterbrechungen zu vermeiden, es sei denn, Sie verwenden die iOS Anrufschnittstelle. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -3434,6 +3600,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Für neue Verbindungen nutzen No comment provided by engineer. + + Use iOS call interface + Benutzen Sie die iOS Anrufschnittstelle + No comment provided by engineer. + Use server Server nutzen @@ -3594,11 +3765,21 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Sie sind zu der Gruppe eingeladen No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + Sie können Anrufe ohne Geräte- und App-Authentifizierung vom Sperrbildschirm aus annehmen. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. Sie können sich auch verbinden, indem Sie auf den Link klicken. Wenn er im Browser geöffnet wird, klicken Sie auf die Schaltfläche **In mobiler App öffnen**. No comment provided by engineer. + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + You can now send messages to %@ Sie können nun Nachrichten an %@ versenden @@ -3629,6 +3810,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Um Nachrichteninhalte zu formatieren, können Sie Markdowns verwenden: No comment provided by engineer. + + You can't send messages! + Sie können keine Nachrichten versenden! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. Sie können selbst festlegen, über welche Server Sie Ihre Nachrichten **empfangen** und an Ihre Kontakte **senden** wollen. @@ -3709,6 +3895,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Sie werden der Gruppe beitreten, auf die sich dieser Link bezieht und sich mit deren Gruppenmitgliedern verbinden. No comment provided by engineer. + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten. @@ -3769,11 +3959,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Meine Chat-Profile No comment provided by engineer. - - Your chat profiles are stored locally, only on your device. - Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert. - No comment provided by engineer. - Your chats Meine Chats @@ -3945,7 +4130,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. cancelled %@ - Beende %@ + abgebrochen %@ feature offered item @@ -4238,6 +4423,11 @@ SimpleX-Server können Ihr Profil nicht einsehen. Moderiert moderated chat item + + moderated by %@ + von %@ moderiert + No comment provided by engineer. + never nie @@ -4258,6 +4448,11 @@ SimpleX-Server können Ihr Profil nicht einsehen. Keine E2E-Verschlüsselung No comment provided by engineer. + + observer + Beobachter + member role + off Aus @@ -4266,12 +4461,12 @@ SimpleX-Server können Ihr Profil nicht einsehen. offered %@ - Beginne %@ + angeboten %@ feature offered item offered %1$@: %2$@ - Beginne %1$@: %2$@ + angeboten %1$@: %2$@ feature offered item @@ -4414,6 +4609,11 @@ SimpleX-Server können Ihr Profil nicht einsehen. Sie sind zur Gruppe eingeladen No comment provided by engineer. + + you are observer + Sie sind Beobachter + No comment provided by engineer. + you changed address Sie haben die Adresse gewechselt @@ -4468,7 +4668,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.
- +
@@ -4500,7 +4700,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.
- +
diff --git a/apps/ios/SimpleX Localizations/de.xcloc/contents.json b/apps/ios/SimpleX Localizations/de.xcloc/contents.json index 0e04fa98d..f87e296de 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/de.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "de", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 95d7f642c..2f3829d10 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -2,7 +2,7 @@
- +
@@ -385,6 +385,11 @@ Add to another device No comment provided by engineer. + + Add welcome message + Add welcome message + No comment provided by engineer. + Admins can create the links to join groups. Admins can create the links to join groups. @@ -480,6 +485,11 @@ Already connected? No comment provided by engineer. + + Always use relay + Always use relay + No comment provided by engineer. + Answer call Answer call @@ -520,11 +530,21 @@ Audio & video calls No comment provided by engineer. + + Audio and video calls + Audio and video calls + No comment provided by engineer. + Authentication failed Authentication failed No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + Authentication is required before the call is connected, but you may miss calls. + No comment provided by engineer. + Authentication unavailable Authentication unavailable @@ -580,6 +600,11 @@ Calls No comment provided by engineer. + + Can't delete user profile! + Can't delete user profile! + No comment provided by engineer. + Can't invite contact! Can't invite contact! @@ -685,6 +710,11 @@ Check server address and try again. No comment provided by engineer. + + Chinese and Spanish interface + Chinese and Spanish interface + No comment provided by engineer. + Choose file Choose file @@ -740,6 +770,11 @@ Confirm new passphrase… No comment provided by engineer. + + Confirm password + Confirm password + No comment provided by engineer. + Connect Connect @@ -770,11 +805,6 @@ Connect via one-time link? No comment provided by engineer. - - Connect via relay - Connect via relay - No comment provided by engineer. - Connecting to server… Connecting to server… @@ -1133,6 +1163,11 @@ Delete link? No comment provided by engineer. + + Delete member message? + Delete member message? + No comment provided by engineer. + Delete message? Delete message? @@ -1268,6 +1303,11 @@ Do it later No comment provided by engineer. + + Don't show again + Don't show again + No comment provided by engineer. + Duplicate display name! Duplicate display name! @@ -1368,6 +1408,11 @@ Enter passphrase… No comment provided by engineer. + + Enter password above to show! + Enter password above to show! + No comment provided by engineer. + Enter server manually Enter server manually @@ -1523,6 +1568,11 @@ Error saving passphrase to keychain No comment provided by engineer. + + Error saving user password + Error saving user password + No comment provided by engineer. + Error sending message Error sending message @@ -1543,6 +1593,11 @@ Error switching profile! No comment provided by engineer. + + Error updating group link + Error updating group link + No comment provided by engineer. + Error updating message Error updating message @@ -1553,6 +1608,11 @@ Error updating settings No comment provided by engineer. + + Error updating user privacy + Error updating user privacy + No comment provided by engineer. + Error: %@ Error: %@ @@ -1638,6 +1698,16 @@ Full name: No comment provided by engineer. + + Fully re-implemented - work in background! + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + Further reduced battery usage + No comment provided by engineer. + GIFs and stickers GIFs and stickers @@ -1713,6 +1783,11 @@ Group message: notification + + Group moderation + Group moderation + No comment provided by engineer. + Group preferences Group preferences @@ -1728,6 +1803,11 @@ Group profile is stored on members' devices, not on the servers. No comment provided by engineer. + + Group welcome message + Group welcome message + No comment provided by engineer. + Group will be deleted for all members - this cannot be undone! Group will be deleted for all members - this cannot be undone! @@ -1748,6 +1828,16 @@ Hidden No comment provided by engineer. + + Hidden chat profiles + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + Hidden profile password + No comment provided by engineer. + Hide Hide @@ -1758,6 +1848,11 @@ Hide app screen in the recent apps. No comment provided by engineer. + + Hide profile + Hide profile + No comment provided by engineer. + How SimpleX works How SimpleX works @@ -1788,11 +1883,6 @@ ICE servers (one per line) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - If the video fails to connect, flip the camera to resolve it. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. If you can't meet in person, **show QR code in the video call**, or share the link. @@ -1905,6 +1995,11 @@ Instantly No comment provided by engineer. + + Interface + Interface + No comment provided by engineer. + Invalid connection link Invalid connection link @@ -2060,6 +2155,11 @@ We will be adding server redundancy to prevent lost messages. Make a private connection No comment provided by engineer. + + Make profile private! + Make profile private! + No comment provided by engineer. + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). @@ -2160,6 +2260,11 @@ We will be adding server redundancy to prevent lost messages. Migration is completed No comment provided by engineer. + + Moderate + Moderate + chat item action + More improvements are coming soon! More improvements are coming soon! @@ -2180,6 +2285,11 @@ We will be adding server redundancy to prevent lost messages. Mute No comment provided by engineer. + + Muted when inactive! + Muted when inactive! + No comment provided by engineer. + Name Name @@ -2280,6 +2390,15 @@ We will be adding server redundancy to prevent lost messages. Notifications are disabled! No comment provided by engineer. + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + Off (Local) Off (Local) @@ -2405,6 +2524,11 @@ We will be adding server redundancy to prevent lost messages. PING interval No comment provided by engineer. + + Password to show + Password to show + No comment provided by engineer. + Paste Paste @@ -2455,6 +2579,11 @@ We will be adding server redundancy to prevent lost messages. Please check yours and your contact preferences. No comment provided by engineer. + + Please contact group admin. + Please contact group admin. + No comment provided by engineer. + Please enter correct current passphrase. Please enter correct current passphrase. @@ -2550,6 +2679,11 @@ We will be adding server redundancy to prevent lost messages. Protect app screen No comment provided by engineer. + + Protect your chat profiles with a password! + Protect your chat profiles with a password! + No comment provided by engineer. + Protocol timeout Protocol timeout @@ -2745,6 +2879,11 @@ We will be adding server redundancy to prevent lost messages. Save and notify group members No comment provided by engineer. + + Save and update group profile + Save and update group profile + No comment provided by engineer. + Save archive Save archive @@ -2770,11 +2909,26 @@ We will be adding server redundancy to prevent lost messages. Save preferences? No comment provided by engineer. + + Save profile password + Save profile password + No comment provided by engineer. + Save servers Save servers No comment provided by engineer. + + Save servers? + Save servers? + No comment provided by engineer. + + + Save welcome message? + Save welcome message? + No comment provided by engineer. + Saved WebRTC ICE servers will be removed Saved WebRTC ICE servers will be removed @@ -2925,6 +3079,11 @@ We will be adding server redundancy to prevent lost messages. Set passphrase to export No comment provided by engineer. + + Set the message shown to new members! + Set the message shown to new members! + No comment provided by engineer. + Set timeouts for proxy/VPN Set timeouts for proxy/VPN @@ -2960,6 +3119,11 @@ We will be adding server redundancy to prevent lost messages. Show QR code No comment provided by engineer. + + Show calls in phone history + Show calls in phone history + No comment provided by engineer. + Show preview Show preview @@ -3100,6 +3264,11 @@ We will be adding server redundancy to prevent lost messages. Tap button No comment provided by engineer. + + Tap to activate profile. + Tap to activate profile. + No comment provided by engineer. + Tap to join Tap to join @@ -3185,9 +3354,14 @@ We will be adding server redundancy to prevent lost messages. The group is fully decentralized – it is visible only to the members. No comment provided by engineer. - - The microphone does not work when the app is in the background. - The microphone does not work when the app is in the background. + + The message will be deleted for all members. + The message will be deleted for all members. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + The message will be marked as moderated for all members. No comment provided by engineer. @@ -3220,6 +3394,16 @@ We will be adding server redundancy to prevent lost messages. Theme No comment provided by engineer. + + There should be at least one user profile. + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + There should be at least one visible user profile. + No comment provided by engineer. + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. @@ -3265,11 +3449,6 @@ We will be adding server redundancy to prevent lost messages. To make a new connection No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - To prevent the call interruption, enable Do Not Disturb mode. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. @@ -3292,6 +3471,11 @@ You will be prompted to complete authentication before this feature is enabled.< To record voice message please grant permission to use Microphone. No comment provided by engineer. + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + To support instant push notifications the chat database has to be migrated. To support instant push notifications the chat database has to be migrated. @@ -3347,6 +3531,16 @@ You will be prompted to complete authentication before this feature is enabled.< Unexpected migration state No comment provided by engineer. + + Unhide + Unhide + No comment provided by engineer. + + + Unknown caller + Unknown caller + callkit banner + Unknown database error: %@ Unknown database error: %@ @@ -3357,6 +3551,11 @@ You will be prompted to complete authentication before this feature is enabled.< Unknown error No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -3434,6 +3633,11 @@ To connect, please ask your contact to create another connection link and check Use for new connections No comment provided by engineer. + + Use iOS call interface + Use iOS call interface + No comment provided by engineer. + Use server Use server @@ -3594,11 +3798,23 @@ To connect, please ask your contact to create another connection link and check You are invited to group No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + You can accept calls from lock screen, without device and app authentication. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. No comment provided by engineer. + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + You can now send messages to %@ You can now send messages to %@ @@ -3629,6 +3845,11 @@ To connect, please ask your contact to create another connection link and check You can use markdown to format messages: No comment provided by engineer. + + You can't send messages! + You can't send messages! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. @@ -3709,6 +3930,11 @@ To connect, please ask your contact to create another connection link and check You will join a group this link refers to and connect to its group members. No comment provided by engineer. + + You will still receive calls and notifications from muted profiles when they are active. + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. You will stop receiving messages from this group. Chat history will be preserved. @@ -3769,11 +3995,6 @@ To connect, please ask your contact to create another connection link and check Your chat profiles No comment provided by engineer. - - Your chat profiles are stored locally, only on your device. - Your chat profiles are stored locally, only on your device. - No comment provided by engineer. - Your chats Your chats @@ -4238,6 +4459,11 @@ SimpleX servers cannot see your profile. moderated moderated chat item + + moderated by %@ + moderated by %@ + No comment provided by engineer. + never never @@ -4258,6 +4484,11 @@ SimpleX servers cannot see your profile. no e2e encryption No comment provided by engineer. + + observer + observer + member role + off off @@ -4414,6 +4645,11 @@ SimpleX servers cannot see your profile. you are invited to group No comment provided by engineer. + + you are observer + you are observer + No comment provided by engineer. + you changed address you changed address @@ -4468,7 +4704,7 @@ SimpleX servers cannot see your profile.
- +
@@ -4500,7 +4736,7 @@ SimpleX servers cannot see your profile.
- +
diff --git a/apps/ios/SimpleX Localizations/en.xcloc/contents.json b/apps/ios/SimpleX Localizations/en.xcloc/contents.json index f363d76c7..03d7d9f75 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/en.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "en", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..70dd72f3e --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,15 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "locale" : "es" + } + ], + "properties" : { + "localizable" : true + }, + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index f31f4a59d..7727cecc1 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -2,1543 +2,2031 @@
- +
+ + No comment provided by engineer. + No comment provided by engineer. + No comment provided by engineer. + No comment provided by engineer. ( + ( No comment provided by engineer. (can be copied) + (puede copiarse) No comment provided by engineer. !1 colored! + !1 coloreado! No comment provided by engineer. #secret# + #secreto# No comment provided by engineer. %@ + %@ No comment provided by engineer. %@ %@ + %@ %@ No comment provided by engineer. %@ / %@ + %@ / %@ No comment provided by engineer. %@ is connected! + %@ ¡está conectado! notification title %@ is not verified + %@ no está verificado No comment provided by engineer. %@ is verified + %@ está verificado No comment provided by engineer. %@ wants to connect! + %@ ¡quiere conectar! notification title %d days + %d días message ttl %d hours + %d horas message ttl %d min + %d minutos message ttl %d months + %d meses message ttl %d sec + %d segundos message ttl %d skipped message(s) + %d mensaje(s) saltado(s integrity error chat item %lld + %lld No comment provided by engineer. %lld %@ + %lld %@ No comment provided by engineer. %lld contact(s) selected + %lld contacto(s) seleccionado(s) No comment provided by engineer. %lld file(s) with total size of %@ + %lld archivo(s) con un tamaño total de %@ No comment provided by engineer. %lld members + %lld miembros No comment provided by engineer. %lld second(s) + %lld segundo(s) No comment provided by engineer. %lldd + %lldd No comment provided by engineer. %lldh + %lldh No comment provided by engineer. %lldk + %lldk No comment provided by engineer. %lldm + %lldm No comment provided by engineer. %lldmth + %lldmth No comment provided by engineer. %llds + %llds No comment provided by engineer. %lldw + %lldw No comment provided by engineer. ( + ( No comment provided by engineer. ) + ) No comment provided by engineer. **Add new contact**: to create your one-time QR Code or link for your contact. + **Añadir nuevo contacto**: para crear tu código QR único o un enlace para tu contacto. No comment provided by engineer. **Create link / QR code** for your contact to use. + **Crea enlace / código QR** para que tu contacto lo use. No comment provided by engineer. **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. + **Más privado**: comprueba los mensajes nuevos cada 20 minutos. El token del dispositivo se comparte con el servidor de SimpleX Chat, pero no cuántos contactos o mensajes tienes. No comment provided by engineer. **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). + **Más privado**: no se usa el servidor de notificaciones de SimpleX Chat, los mensajes se comprueban periódicamente en segundo plano (dependiendo de la frecuencia con la que utilices la aplicación). No comment provided by engineer. **Paste received link** or open it in the browser and tap **Open in mobile app**. + **Pega el enlace recibido** o ábrelo en el navegador y pulsa **Abrir en aplicación móvil**. No comment provided by engineer. **Please note**: you will NOT be able to recover or change passphrase if you lose it. + **Importante**: NO podrás recuperar o cambiar la contraseña si la pierdes. No comment provided by engineer. **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. + **Recomendado**: el token del dispositivo y las notificaciones se envían al servidor de notificaciones de SimpleX Chat, pero no el contenido del mensaje, su tamaño o su procedencia. No comment provided by engineer. **Scan QR code**: to connect to your contact in person or via video call. + **Escanea el código QR**: en persona para conectar con tu contacto o mediante videollamada. No comment provided by engineer. **Warning**: Instant push notifications require passphrase saved in Keychain. + **Advertencia**: Las notificaciones automáticas instantáneas requieren una contraseña guardada en Keychain. No comment provided by engineer. **e2e encrypted** audio call + **Cifrado e2e ** en llamada No comment provided by engineer. **e2e encrypted** video call + **Cifrado e2e** en videollamada No comment provided by engineer. \*bold* + \*bold* No comment provided by engineer. , + , No comment provided by engineer. . + . No comment provided by engineer. 1 day + un dia message ttl 1 hour + una hora message ttl 1 month + un mes message ttl 1 week + una semana message ttl 2 weeks + dos semanas message ttl 6 + 6 No comment provided by engineer. : + : No comment provided by engineer. A new contact + Contacto nuevo notification title A random profile will be sent to the contact that you received this link from + Se enviará un perfil aleatorio al contacto del que recibió este enlace No comment provided by engineer. A random profile will be sent to your contact + Se enviará un perfil aleatorio a tu contacto No comment provided by engineer. A separate TCP connection will be used **for each chat profile you have in the app**. + Se utilizará una conexión TCP distinta **para cada perfil que tengas en la aplicación**. No comment provided by engineer. A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. + Se utilizará una conexión TCP independiente **para cada contacto y miembro de grupo**. +**Ten en cuenta**: si tienes muchas conexiones, tu consumo de batería y tráfico puede ser sustancialmente mayor y algunas conexiones pueden fallar. No comment provided by engineer. About SimpleX + Acerca de SimpleX No comment provided by engineer. About SimpleX Chat + Acerca de SimpleX Chat No comment provided by engineer. Accent color + Acentuar el color No comment provided by engineer. Accept + Aceptar accept contact request via notification accept incoming call via notification Accept contact + Aceptar contacto No comment provided by engineer. Accept contact request from %@? + ¿Aceptar solicitud de contacto de %@? notification body Accept incognito + Aceptar incógnito No comment provided by engineer. Accept requests + Aceptar solicitudes No comment provided by engineer. Add preset servers + Añadir servidores predefinidos No comment provided by engineer. Add profile + Añadir perfil No comment provided by engineer. Add servers by scanning QR codes. + Añadir servidores escaneando códigos QR. No comment provided by engineer. Add server… + Añadir servidor… No comment provided by engineer. Add to another device + Añadir a otro dispositivo + No comment provided by engineer. + + + Add welcome message No comment provided by engineer. Admins can create the links to join groups. + Los administradores pueden crear los enlaces para unirse a los grupos. No comment provided by engineer. Advanced network settings + Configuración de red avanzada No comment provided by engineer. All chats and messages will be deleted - this cannot be undone! + Se eliminarán todos los chats y mensajes. ¡No puede deshacerse! No comment provided by engineer. All group members will remain connected. + Todos los miembros del grupo permanecerán conectados. No comment provided by engineer. All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. + Se eliminarán todos los mensajes SOLO para tí. ¡No puede deshacerse! No comment provided by engineer. All your contacts will remain connected + Todos tus contactos permanecerán conectados No comment provided by engineer. Allow + Permitir No comment provided by engineer. Allow disappearing messages only if your contact allows it to you. + Permitir mensajes temporales sólo si tu contacto también los permite para tí. No comment provided by engineer. Allow irreversible message deletion only if your contact allows it to you. + Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí. No comment provided by engineer. Allow sending direct messages to members. + Permitir el envío de mensajes directos a los miembros. No comment provided by engineer. Allow sending disappearing messages. + Permitir el envío de mensajes temporales. No comment provided by engineer. Allow to irreversibly delete sent messages. + Permitir la eliminación irreversible de los mensajes enviados. No comment provided by engineer. Allow to send voice messages. + Permitir enviar mensajes de voz. No comment provided by engineer. Allow voice messages only if your contact allows them. + Permitir mensajes de voz sólo si tu contacto los permite. No comment provided by engineer. Allow voice messages? + ¿Permitir mensajes de voz? No comment provided by engineer. Allow your contacts to irreversibly delete sent messages. + Permitir a tus contactos eliminar irreversiblemente los mensajes enviados. No comment provided by engineer. Allow your contacts to send disappearing messages. + Permitir a tus contactos enviar mensajes que desaparecen. No comment provided by engineer. Allow your contacts to send voice messages. + Permitir a tus contactos enviar mensajes de voz. No comment provided by engineer. Already connected? + ¿Ya está conectado? + No comment provided by engineer. + + + Always use relay + Siempre usa relay No comment provided by engineer. Answer call + Responder llamada No comment provided by engineer. App build: %@ + Compilación app: %@ No comment provided by engineer. App icon + Icono app No comment provided by engineer. App version + Versión de la aplicación No comment provided by engineer. App version: v%@ + Versión: v%@ No comment provided by engineer. Appearance + Apariencia No comment provided by engineer. Attach + Adjuntar No comment provided by engineer. Audio & video calls + Llamadas de audio y vídeo + No comment provided by engineer. + + + Audio and video calls No comment provided by engineer. Authentication failed + Autenticación fallida + No comment provided by engineer. + + + Authentication is required before the call is connected, but you may miss calls. + La autenticación es necesaria antes de establecer la llamada, pero podrías perder llamadas. No comment provided by engineer. Authentication unavailable + Autenticación no disponible No comment provided by engineer. Auto-accept contact requests + Aceptar automáticamente solicitudes del contacto No comment provided by engineer. Auto-accept images + Aceptar automáticamente imágenes No comment provided by engineer. Automatically + Automáticamente No comment provided by engineer. Back + Volver No comment provided by engineer. Both you and your contact can irreversibly delete sent messages. + Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados. No comment provided by engineer. Both you and your contact can send disappearing messages. + Tanto tú como tu contacto podéis enviar mensajes temporales. No comment provided by engineer. Both you and your contact can send voice messages. + Tanto tú como tu contacto podéis enviar mensajes de voz. + No comment provided by engineer. + + + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). + Por perfil de Chat (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. Call already ended! + ¡La llamada ha terminado! No comment provided by engineer. Calls + Llamadas + No comment provided by engineer. + + + Can't delete user profile! No comment provided by engineer. Can't invite contact! + ¡No se puede invitar el contacto! No comment provided by engineer. Can't invite contacts! + ¡No se puede invitar a los contactos! No comment provided by engineer. Cancel + Cancelar No comment provided by engineer. Cannot access keychain to save database password + Keychain inaccesible para guardar la contraseña de la base de datos No comment provided by engineer. Cannot receive file + No se puede recibir el archivo No comment provided by engineer. Change + Cambiar No comment provided by engineer. Change database passphrase? + ¿Cambiar contraseña de la base de datos? No comment provided by engineer. Change member role? + ¿Cambiar el rol del miembro? No comment provided by engineer. Change receiving address + Cambiar la dirección de recepción No comment provided by engineer. Change receiving address? + ¿Cambiar la dirección de recepción? No comment provided by engineer. Change role + Cambiar rol No comment provided by engineer. Chat archive + Archivo del chat No comment provided by engineer. Chat console + Consola del chat No comment provided by engineer. Chat database + Base de datos del chat No comment provided by engineer. Chat database deleted + Base de datos eliminada No comment provided by engineer. Chat database imported + Base de datos importada No comment provided by engineer. Chat is running + El chat está en ejecución No comment provided by engineer. Chat is stopped + El chat está detenido No comment provided by engineer. Chat preferences + Preferencias de chat No comment provided by engineer. Chats + Chats No comment provided by engineer. Check server address and try again. + Comprueba la dirección del servidor e inténtalo de nuevo. + No comment provided by engineer. + + + Chinese and Spanish interface No comment provided by engineer. Choose file + Elije archivo No comment provided by engineer. Choose from library + Elige de la biblioteca No comment provided by engineer. Clear + Eliminar No comment provided by engineer. Clear conversation + Eliminar conversación No comment provided by engineer. Clear conversation? + ¿Eliminar conversación? No comment provided by engineer. Clear verification + Eliminar verificación No comment provided by engineer. Colors + Colores No comment provided by engineer. Compare security codes with your contacts. + Compare los códigos de seguridad con sus contactos. No comment provided by engineer. Configure ICE servers + Configure servidores ICE No comment provided by engineer. Confirm + Confirmar No comment provided by engineer. Confirm new passphrase… + Confirme nueva contraseña… + No comment provided by engineer. + + + Confirm password No comment provided by engineer. Connect + Conectar server test step Connect via contact link? + ¿Conectar mediante enlace de contacto? No comment provided by engineer. Connect via group link? + ¿Conectar mediante enlace de grupo? No comment provided by engineer. Connect via link + Conectar mediante enlace No comment provided by engineer. Connect via link / QR code + Conectar mediante enlace / Código QR No comment provided by engineer. Connect via one-time link? - No comment provided by engineer. - - - Connect via relay + ¿Conectar mediante enlace único? No comment provided by engineer. Connecting to server… + Conectando con el servidor… No comment provided by engineer. Connecting to server… (error: %@) + Conectando con el servidor... (error: %@) No comment provided by engineer. Connection + Conexión No comment provided by engineer. Connection error + Error de conexión No comment provided by engineer. Connection error (AUTH) + Error de conexión (Autenticación) No comment provided by engineer. Connection request + Solicitud de conexión No comment provided by engineer. Connection request sent! + ¡Solicitud de conexión enviada! No comment provided by engineer. Connection timeout + Tiempo de conexión expirado No comment provided by engineer. Contact allows + El contacto permite No comment provided by engineer. Contact already exists + El contácto ya existe No comment provided by engineer. Contact and all messages will be deleted - this cannot be undone! + El contacto y todos los mensajes serán eliminados. ¡No puede deshacerse! No comment provided by engineer. Contact hidden: + Contacto oculto: notification Contact is connected + El contacto está en línea notification Contact is not connected yet! + ¡El contacto aun no se ha conectado! No comment provided by engineer. Contact name + Nombre del contacto No comment provided by engineer. Contact preferences + Preferencias de contacto No comment provided by engineer. Contact requests + Solicitud del contacto No comment provided by engineer. Contacts can mark messages for deletion; you will be able to view them. + El contacto puede marcar los mensajes para eliminar; tu podrás verlos. No comment provided by engineer. Copy + Copiar chat item action Core built at: %@ + Core compilado en: %@ No comment provided by engineer. Core version: v%@ + Versión Core: v%@ No comment provided by engineer. Create + Crear No comment provided by engineer. Create address + Crear dirección No comment provided by engineer. Create group link + Crear enlace de grupo No comment provided by engineer. Create link + Crear enlace No comment provided by engineer. Create one-time invitation link + Crear enlace único de invitación No comment provided by engineer. Create queue + Crear cola server test step Create secret group + Crear grupo secreto No comment provided by engineer. Create your profile + Crear tu perfil No comment provided by engineer. Created on %@ + Creado en %@ No comment provided by engineer. Current passphrase… + Contraseña actual… No comment provided by engineer. Currently maximum supported file size is %@. + El tamaño máximo de archivo admitido es %@. No comment provided by engineer. Dark - No comment provided by engineer. - - - Data + Oscuro No comment provided by engineer. Database ID + ID de la base de datos No comment provided by engineer. Database encrypted! + ¡Base de datos cifrada! No comment provided by engineer. Database encryption passphrase will be updated and stored in the keychain. + La contraseña de cifrado de la base de datos será actualizada y almacenada en Keychain. + No comment provided by engineer. Database encryption passphrase will be updated. + La contraseña de cifrado de la base de datos será actualizada. + No comment provided by engineer. Database error + Error de la base de datos No comment provided by engineer. Database is encrypted using a random passphrase, you can change it. + La base de datos está cifrada con una contraseña aleatoria, puedes cambiarla. No comment provided by engineer. Database is encrypted using a random passphrase. Please change it before exporting. + La base de datos está cifrada con una contraseña aleatoria. Cámbiala antes de exportar. No comment provided by engineer. Database passphrase + Contraseña de la base de datos No comment provided by engineer. Database passphrase & export + Contraseña y exportar la base de datos No comment provided by engineer. Database passphrase is different from saved in the keychain. + La contraseña es distinta a la almacenada en Keychain. No comment provided by engineer. Database passphrase is required to open chat. + Para abrir la aplicación se requiere la contraseña de la base de datos. No comment provided by engineer. Database will be encrypted and the passphrase stored in the keychain. + La base de datos será cifrada y la contraseña se guardará en Keychain. + No comment provided by engineer. Database will be encrypted. + La base de datos será cifrada. + No comment provided by engineer. Database will be migrated when the app restarts + La base de datos migrará cuando se reinicie la aplicación No comment provided by engineer. Decentralized + Descentralizado No comment provided by engineer. Delete + Eliminar chat item action Delete Contact + Eliminar contacto No comment provided by engineer. Delete address + Eliminar dirección No comment provided by engineer. Delete address? + ¿Eliminar la dirección? No comment provided by engineer. Delete after + Eliminar después No comment provided by engineer. Delete all files + Eliminar todos los archivos No comment provided by engineer. Delete archive + Eliminar archivo No comment provided by engineer. Delete chat archive? + ¿Eliminar archivo del chat? No comment provided by engineer. Delete chat profile? + ¿Eliminar el perfil de chat? No comment provided by engineer. Delete connection + Eliminar conexión No comment provided by engineer. Delete contact + Eliminar contacto No comment provided by engineer. Delete contact? + Eliminar contacto? No comment provided by engineer. Delete database - No comment provided by engineer. - - - Delete files & media + Eliminar base de datos No comment provided by engineer. Delete files and media? + Eliminar archivos y multimedia? No comment provided by engineer. Delete files for all chat profiles + Eliminar archivos para todos los perfiles de chat No comment provided by engineer. Delete for everyone + Eliminar para todos chat feature Delete for me + Eliminar para mí No comment provided by engineer. Delete group + Eliminar grupo No comment provided by engineer. Delete group? + ¿Eliminar grupo? No comment provided by engineer. Delete invitation + Eliminar invitación No comment provided by engineer. Delete link + Eliminar enlace No comment provided by engineer. Delete link? + ¿Eliminar enlace? + No comment provided by engineer. + + + Delete member message? + ¿Eliminar el mensaje de miembro? No comment provided by engineer. Delete message? + ¿Eliminar mensaje? No comment provided by engineer. Delete messages + Eliminar mensaje No comment provided by engineer. Delete messages after + Eliminar mensaje después No comment provided by engineer. Delete old database + Eliminar base de datos antigua No comment provided by engineer. Delete old database? + ¿Eliminar base de datos antígua? No comment provided by engineer. Delete pending connection + Eliminar conexión pendiente No comment provided by engineer. Delete pending connection? + ¿Eliminar conexion pendiente? No comment provided by engineer. Delete queue + Eliminar cola server test step Delete user profile? + ¿Eliminar perfil de usuario? No comment provided by engineer. Description + Descripción No comment provided by engineer. Develop + Desarrollo No comment provided by engineer. Developer tools + Herramientas desarrollo No comment provided by engineer. Device + Dispositivo No comment provided by engineer. Device authentication is disabled. Turning off SimpleX Lock. + Autenticación de dispositivo desactivada. SimpleX Lock deshabilitado. No comment provided by engineer. Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. + Autenticación de dispositivo desactivada. Puedes habilitar SimpleX Lock en Configuración, después de activar la autenticación de dispositivo. + No comment provided by engineer. + + + Different names, avatars and transport isolation. + Nombre y avatar diferentes, aislamiento de transporte. No comment provided by engineer. Direct messages + Mensajes directos chat feature Direct messages between members are prohibited in this group. + Los mensajes directos entre miembros del grupo están prohibidos. No comment provided by engineer. Disable SimpleX Lock + Desactivar SimpleX Lock authentication reason Disappearing messages + Mensajes temporales chat feature Disappearing messages are prohibited in this chat. + Los mensajes temporales están prohibidos en este chat. No comment provided by engineer. Disappearing messages are prohibited in this group. + Los mensajes temporales están prohibidos en este grupo. No comment provided by engineer. Disconnect + Desconectar server test step Display name + Nombre mostrado No comment provided by engineer. Display name: + Nombre mostrado: No comment provided by engineer. Do NOT use SimpleX for emergency calls. + NO uses SimpleX para llamadas de emergencia. No comment provided by engineer. Do it later + Hacer más tarde + No comment provided by engineer. + + + Don't show again + No comment provided by engineer. + + + Duplicate display name! + ¡Nombre mostrado duplicado! No comment provided by engineer. Edit + Editar chat item action Edit group profile + Editar perfil de grupo No comment provided by engineer. Enable + Activar No comment provided by engineer. Enable SimpleX Lock + Activar SimpleX Lock authentication reason Enable TCP keep-alive + Activar TCP keep-alive No comment provided by engineer. Enable automatic message deletion? + ¿Activar eliminación automática de mensajes? No comment provided by engineer. Enable instant notifications? + ¿Activar notificación instantánea? No comment provided by engineer. Enable notifications + Activar notificaciones No comment provided by engineer. Enable periodic notifications? + ¿Activar notificaciones periódicas? No comment provided by engineer. Encrypt + Cifrar No comment provided by engineer. Encrypt database? + ¿Cifrar base de datos? No comment provided by engineer. Encrypted database + Base de datos cifrada No comment provided by engineer. Encrypted message or another event + Mensaje cifrado u otro evento notification Encrypted message: database error + Mensaje cifrado: error en base de datos notification Encrypted message: keychain error + Mensaje cifrado: error en Keychain notification Encrypted message: no passphrase + Mensaje cifrado: sin contraseña notification Encrypted message: unexpected error + Mensaje cifrado: error inesperado notification Enter correct passphrase. + Introduce la contraseña correcta. No comment provided by engineer. Enter passphrase… + Introduce la contraseña… + No comment provided by engineer. + + + Enter password above to show! No comment provided by engineer. Enter server manually + Introduce el servidor manualmente No comment provided by engineer. Error + Error No comment provided by engineer. Error accepting contact request + Error aceptando la solicitud del contacto No comment provided by engineer. Error accessing database file + Error de acceso al archivo de base de datos No comment provided by engineer. Error adding member(s) + Error al añadir miembro(s) No comment provided by engineer. Error changing address + Error cambiando la dirección No comment provided by engineer. Error changing role + Error cambiando rol No comment provided by engineer. Error changing setting + Error cambiando configuración No comment provided by engineer. Error creating address + Error creando dirección No comment provided by engineer. Error creating group + Error creando grupo No comment provided by engineer. Error creating group link + Error al crear enlace de grupo + No comment provided by engineer. + + + Error creating profile! + Error creando perfil! No comment provided by engineer. Error deleting chat database + Error eliminando la base de datos No comment provided by engineer. Error deleting chat! + ¡Error eliminando chat! No comment provided by engineer. Error deleting connection + Error eliminando conexión No comment provided by engineer. Error deleting contact + Error eliminando contacto No comment provided by engineer. Error deleting database + Error eliminando base de datos No comment provided by engineer. Error deleting old database + Error eliminando base de datos antígua No comment provided by engineer. Error deleting token + Error eliminando token No comment provided by engineer. Error deleting user profile + Error eliminando perfil de usuario No comment provided by engineer. Error enabling notifications + Error activando notificaciones No comment provided by engineer. Error encrypting database + Error cifrando la base de datos No comment provided by engineer. Error exporting chat database + Error exportando la base de datos No comment provided by engineer. Error importing chat database + Error importando la base de datos No comment provided by engineer. Error joining group + Error uniéndose al grupo No comment provided by engineer. Error receiving file + Error recibiendo archivo No comment provided by engineer. Error removing member + Error eliminando miembro No comment provided by engineer. Error saving ICE servers + Error guardando servidores ICE No comment provided by engineer. Error saving SMP servers + Error guardando servidores SMP No comment provided by engineer. Error saving group profile + Error guardando perfil de grupo No comment provided by engineer. Error saving passphrase to keychain + Error guardando contraseña en Keychain + No comment provided by engineer. + + + Error saving user password No comment provided by engineer. Error sending message + Error enviando mensaje No comment provided by engineer. Error starting chat + Error iniciando chat No comment provided by engineer. Error stopping chat + Error deteniendo el chat + No comment provided by engineer. + + + Error switching profile! + ¡Error cambiando perfil! + No comment provided by engineer. + + + Error updating group link + Error actualizando el enlace de grupo No comment provided by engineer. Error updating message + Error actualizando mensaje No comment provided by engineer. Error updating settings + Error actualizando configuración + No comment provided by engineer. + + + Error updating user privacy No comment provided by engineer. Error: %@ + Error: %@ No comment provided by engineer. Error: URL is invalid + Error: la URL no es válida No comment provided by engineer. Error: no database file + Error: sin archivo de base de datos No comment provided by engineer. Exit without saving + Salir sin guardar No comment provided by engineer. Export database + Exportar base de datos No comment provided by engineer. Export error: + Error exportando: No comment provided by engineer. Exported database archive. + Archivo de base de datos exportado. No comment provided by engineer. Exporting database archive... + Exportando archivo de base de datos... No comment provided by engineer. Failed to remove passphrase + Error eliminando la contraseña No comment provided by engineer. File will be received when your contact is online, please wait or check later! + El archivo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde. No comment provided by engineer. File: %@ + Archivo: %@ No comment provided by engineer. Files & media + Archivo y multimedia No comment provided by engineer. For console + Para consola + No comment provided by engineer. + + + French interface + Interfaz en francés No comment provided by engineer. Full link + Enlace completo No comment provided by engineer. Full name (optional) + Nombre completo (opcional) No comment provided by engineer. Full name: + Nombre completo: + No comment provided by engineer. + + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage No comment provided by engineer. GIFs and stickers + GIFs y stickers No comment provided by engineer. Group + Grupo No comment provided by engineer. Group display name + Nombre mostrado del grupo No comment provided by engineer. Group full name (optional) + Nombre completo del grupo (opcional) No comment provided by engineer. Group image + Imágen del grupo No comment provided by engineer. Group invitation + Invitación de grupo No comment provided by engineer. Group invitation expired + Invitación de grupo caducada No comment provided by engineer. Group invitation is no longer valid, it was removed by sender. + La invitación al grupo ya no es válida, ha sido eliminada por el remitente. No comment provided by engineer. Group link + Enlace de grupo No comment provided by engineer. Group links + Enlaces de grupo No comment provided by engineer. Group members can irreversibly delete sent messages. + Los miembros del grupo pueden eliminar mensajes de forma irreversible. No comment provided by engineer. Group members can send direct messages. + Los miembros del grupo pueden enviar mensajes directos. No comment provided by engineer. Group members can send disappearing messages. + Los miembros del grupo pueden enviar mensajes temporales. No comment provided by engineer. Group members can send voice messages. + Los miembros del grupo pueden mandar mensajes de voz. No comment provided by engineer. Group message: + Mensaje de grupo: notification + + Group moderation + No comment provided by engineer. + Group preferences + Preferencias del grupo No comment provided by engineer. Group profile + Perfil de grupo No comment provided by engineer. Group profile is stored on members' devices, not on the servers. + El perfil de grupo se almacena en los dispositivos, no en los servidores. + No comment provided by engineer. + + + Group welcome message No comment provided by engineer. Group will be deleted for all members - this cannot be undone! + El grupo se eliminará para todos los miembros. ¡No puede deshacerse! No comment provided by engineer. Group will be deleted for you - this cannot be undone! + El grupo se eliminará para tí. ¡No puede deshacerse! No comment provided by engineer. Help + Ayuda No comment provided by engineer. Hidden + Oculto + No comment provided by engineer. + + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password No comment provided by engineer. Hide + Ocultar chat item action Hide app screen in the recent apps. + Ocultar pantalla de aplicaciones en aplicaciones recientes. + No comment provided by engineer. + + + Hide profile No comment provided by engineer. How SimpleX works + Cómo funciona SimpleX No comment provided by engineer. How it works + Cómo funciona No comment provided by engineer. How to + Cómo No comment provided by engineer. How to use it + Cómo usar No comment provided by engineer. How to use your servers + Cómo usar tus servidores No comment provided by engineer. ICE servers (one per line) - No comment provided by engineer. - - - If the video fails to connect, flip the camera to resolve it. + Servidores ICE (uno por línea) No comment provided by engineer. If you can't meet in person, **show QR code in the video call**, or share the link. + Si no puedes reunirte en persona, **muestra el código QR por videollamada**, o comparte el enlace. No comment provided by engineer. If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link. + Si no puedes reunirte en persona, puedes **escanear el código QR por videollamada**, o tu contacto puede compartir un enlace de invitación. No comment provided by engineer. If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app). + Si necesitas usar el chat ahora pulsa **Hacerlo más tarde** más abajo (se ofrecerá migrar la base de datos cuando se reinicie la aplicación). No comment provided by engineer. Ignore + Ignorar No comment provided by engineer. Image will be received when your contact is online, please wait or check later! + La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde. No comment provided by engineer. Immune to spam and abuse + Inmune a spam y abuso No comment provided by engineer. Import + Importar No comment provided by engineer. Import chat database? + ¿Importar base de datos? No comment provided by engineer. Import database + Importar base de datos No comment provided by engineer. Improved privacy and security + Seguridad y privacidad mejoradas No comment provided by engineer. Improved server configuration + Configuración del servidor mejorada No comment provided by engineer. Incognito + Incógnito No comment provided by engineer. Incognito mode + Modo incógnito No comment provided by engineer. Incognito mode is not supported here - your main profile will be sent to group members + El modo incógnito no se admite aquí, tu perfil principal aparecerá en miembros del grupo No comment provided by engineer. Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. + El modo incógnito protege la identidad del perfil principal, por cada contacto nuevo se genera un perfil nuevo aleatorio. No comment provided by engineer. Incoming audio call + Llamada entrante notification Incoming call + Llamada entrante notification Incoming video call + Videollamada entrante notification Incorrect security code! + ¡Código de seguridad incorrecto! No comment provided by engineer. Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) + Instalar [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. Instant push notifications will be hidden! + ¡Las notificaciones automáticas estarán ocultas! + No comment provided by engineer. Instantly + Al instante + No comment provided by engineer. + + + Interface + Interfaz No comment provided by engineer. Invalid connection link + Enlace de conexión no válido No comment provided by engineer. Invalid server address! + ¡Dirección de servidor no válida! No comment provided by engineer. Invitation expired! + ¡Invitación caducada! No comment provided by engineer. Invite members + Invitar miembros No comment provided by engineer. Invite to group + Invitar al grupo No comment provided by engineer. Irreversible message deletion + Eliminación del mensaje irreversible No comment provided by engineer. Irreversible message deletion is prohibited in this chat. + La eliminación irreversible de mensajes está prohibida en este chat. No comment provided by engineer. Irreversible message deletion is prohibited in this group. + La eliminación irreversible de mensajes está prohibida en este grupo. No comment provided by engineer. It allows having many anonymous connections without any shared data between them in a single chat profile. + Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat. No comment provided by engineer. @@ -1548,2005 +2036,2687 @@ 3. The connection is compromised. Please connect to the developers via Settings to receive the updates about the servers. We will be adding server redundancy to prevent lost messages. + Esto puede suceder cuando: +1. Los mensajes caducan en el servidor si no se han recibido durante 30 días. +2. El servidor que utiliza para recibir los mensajes de este contacto fue actualizado y reiniciado. +3. La conexión está comprometida. +Por favor, contacta con los desarrolladores a través del menú Configuración para recibir actualizaciones sobre los servidores. +Añadiremos redundancia de servidores para evitar la pérdida de mensajes. No comment provided by engineer. It seems like you are already connected via this link. If it is not the case, there was an error (%@). + Parece que ya está conectado mediante este enlace. Si no es así ha habido un error (%@). + No comment provided by engineer. + + + Italian interface + Interfaz en italiano No comment provided by engineer. Join + Únete No comment provided by engineer. Join group + Únete al grupo No comment provided by engineer. Join incognito + Únete en modo incógnito No comment provided by engineer. Joining group + Únete al grupo No comment provided by engineer. Keychain error + Error en Keychain No comment provided by engineer. LIVE + EN VIVO No comment provided by engineer. Large file! + ¡Archivo grande! No comment provided by engineer. Leave + Salir No comment provided by engineer. Leave group + Salir del grupo No comment provided by engineer. Leave group? + ¿Salir del grupo? No comment provided by engineer. Light + Claro No comment provided by engineer. Limitations + Limitaciones No comment provided by engineer. Live message! + ¡Mensaje en vivo! No comment provided by engineer. Live messages + Mensajes en vivo No comment provided by engineer. Local name + Nombre local No comment provided by engineer. Local profile data only + Sólo datos del perfil local No comment provided by engineer. Make a private connection + Establecer una conexión privada + No comment provided by engineer. + + + Make profile private! No comment provided by engineer. Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). + Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas (%@). No comment provided by engineer. Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. + Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas. No comment provided by engineer. Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* + Muchos se preguntarán: *si SimpleX no tiene identificadores de usuario, ¿cómo puede entregar los mensajes?* No comment provided by engineer. Mark deleted for everyone + Marcar como eliminado para todos No comment provided by engineer. Mark read + Marcar como leído No comment provided by engineer. Mark verified + Marcar como verificado No comment provided by engineer. Markdown in messages + Marcadores en mensajes No comment provided by engineer. Max 30 seconds, received instantly. + Máximo 30 segundos, recibido al instante. No comment provided by engineer. Member + Miembro No comment provided by engineer. Member role will be changed to "%@". All group members will be notified. + El rol de miembro cambiará a "%@". Todos los miembros del grupo serán notificados. No comment provided by engineer. Member role will be changed to "%@". The member will receive a new invitation. + El rol del miembro cambiará a "%@". El miembro recibirá una invitación nueva. No comment provided by engineer. Member will be removed from group - this cannot be undone! + El miembro será eliminado del grupo. ¡No puede deshacerse! No comment provided by engineer. Message delivery error + Error en la entrega del mensaje + No comment provided by engineer. + + + Message draft + Borrador de mensaje No comment provided by engineer. Message text + Texto del mensaje No comment provided by engineer. Messages + Mensajes No comment provided by engineer. Migrating database archive... + Migrando la base de datos... No comment provided by engineer. Migration error: + Error de migración: No comment provided by engineer. Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). + Error de migración. A continuación pulsa **Omitir** para seguir usando la base de datos actual. Informa del problema a los desarrolladores de la aplicación a través de SimpleX o por correo electrónico a [chat@simplex.chat](mailto:chat@simplex.chat). No comment provided by engineer. Migration is completed + Migración completada + No comment provided by engineer. + + + Moderate + Moderar + chat item action + + + More improvements are coming soon! + ¡Pronto habrá más mejoras! No comment provided by engineer. Most likely this contact has deleted the connection with you. + Lo más probable es que este contacto haya eliminado la conexión contigo. + No comment provided by engineer. + + + Multiple chat profiles + Múltiples perfiles de chat No comment provided by engineer. Mute + Silenciar + No comment provided by engineer. + + + Muted when inactive! No comment provided by engineer. Name + Nombre No comment provided by engineer. Network & servers + Redes y servidores No comment provided by engineer. Network settings + Configuración de red No comment provided by engineer. Network status + Estado de la red No comment provided by engineer. New contact request + Nueva solicitud de contacto notification New contact: + Contacto nuevo: notification New database archive + Nuevo archivo de bases de datos No comment provided by engineer. New in %@ + Nuevo en %@ No comment provided by engineer. New member role + Nuevo rol de miembro No comment provided by engineer. New message + mensaje nuevo notification New passphrase… + Contraseña nueva… No comment provided by engineer. No + No No comment provided by engineer. No contacts selected + Ningún contacto seleccionado No comment provided by engineer. No contacts to add + Sin contactos que añadir No comment provided by engineer. No device token! + ¡Sin dispositivo token! No comment provided by engineer. Group not found! + ¡Grupo no encontrado! No comment provided by engineer. No permission to record voice message + Sin permiso para grabar mensajes de voz No comment provided by engineer. No received or sent files + Sin archivos recibidos o enviados No comment provided by engineer. Notifications + Notificaciones No comment provided by engineer. Notifications are disabled! + ¡Las notificaciones están desactivadas! + No comment provided by engineer. + + + Now admins can: +- delete members' messages. +- disable members ("observer" role) No comment provided by engineer. Off (Local) + Apagado (Local) No comment provided by engineer. Ok + Ok No comment provided by engineer. Old database + Base de datos antígua No comment provided by engineer. Old database archive + Archivo de base de datos antiguo No comment provided by engineer. One-time invitation link + Enlace único de invitación No comment provided by engineer. Onion hosts will be required for connection. Requires enabling VPN. + Se requieren hosts .onion para la conexión. Requiere activación de la VPN. No comment provided by engineer. Onion hosts will be used when available. Requires enabling VPN. + Se usarán hosts .onion cuando estén disponibles. Requiere activación de la VPN. No comment provided by engineer. Onion hosts will not be used. + No se usarán hosts .onion. No comment provided by engineer. Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. + Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con **cifrado de extremo a extremo de 2 capas**. No comment provided by engineer. Only group owners can change group preferences. + Sólo los propietarios del grupo pueden cambiar las preferencias de grupo. No comment provided by engineer. Only group owners can enable voice messages. + Sólo los propietarios del grupo pueden activar los mensajes de voz. No comment provided by engineer. Only you can irreversibly delete messages (your contact can mark them for deletion). + Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcar para eliminar). No comment provided by engineer. Only you can send disappearing messages. + Sólo tú puedes enviar mensajes temporales. No comment provided by engineer. Only you can send voice messages. + Sólo tú puedes enviar mensajes de voz. No comment provided by engineer. Only your contact can irreversibly delete messages (you can mark them for deletion). + Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcar para eliminar). No comment provided by engineer. Only your contact can send disappearing messages. + Sólo tu contacto puede enviar mensajes temporales. No comment provided by engineer. Only your contact can send voice messages. + Sólo tu contacto puede enviar mensajes de voz. No comment provided by engineer. Open Settings + Abrir Configuración No comment provided by engineer. Open chat + Abrir chat No comment provided by engineer. Open chat console + Abrir la consola de chat + authentication reason + + + Open user profiles + Abrir perfil de usuario authentication reason Open-source protocol and code – anybody can run the servers. + Protocolo y código abiertos: cualquiera puede usar los servidores. No comment provided by engineer. Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red. + Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo. No comment provided by engineer. PING count + Contador PING No comment provided by engineer. PING interval + Intervalo PING + No comment provided by engineer. + + + Password to show No comment provided by engineer. Paste + Pegar No comment provided by engineer. Paste image + Pegar imagen No comment provided by engineer. Paste received link + Pegar enlace recibido No comment provided by engineer. Paste the link you received into the box below to connect with your contact. + Pega el enlace que has recibido en el recuadro para conectar con tu contacto. No comment provided by engineer. People can connect to you only via the links you share. + Las personas pueden conectarse contigo solo mediante los enlaces que compartes. No comment provided by engineer. Periodically + Periódico No comment provided by engineer. Please ask your contact to enable sending voice messages. + Solicita que tu contacto habilite el envío de mensajes de voz. No comment provided by engineer. Please check that you used the correct link or ask your contact to send you another one. + Comprueba que has usado el enlace correcto o pide a tu contacto que te envíe otro. No comment provided by engineer. Please check your network connection with %@ and try again. + Comprueba tu conexión de red con %@ e inténtalo de nuevo. No comment provided by engineer. Please check yours and your contact preferences. + Comprueba tus preferencias y las de tu contacto. + No comment provided by engineer. + + + Please contact group admin. + Póngase en contacto con el administrador del grupo. No comment provided by engineer. Please enter correct current passphrase. + Introduce la contraseña actual correcta. No comment provided by engineer. Please enter the previous password after restoring database backup. This action can not be undone. + Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer. No comment provided by engineer. Please restart the app and migrate the database to enable push notifications. + Reinicia la aplicación y migra la base de datos para activar las notificaciones automáticas. No comment provided by engineer. Please store passphrase securely, you will NOT be able to access chat if you lose it. + Guarda la contraseña de forma segura, NO podrás acceder al chat si la pierdes. No comment provided by engineer. Please store passphrase securely, you will NOT be able to change it if you lose it. + Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes. No comment provided by engineer. Possibly, certificate fingerprint in server address is incorrect + Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta server test error + + Preserve the last message draft, with attachments. + Conserva el último borrador del mensaje con los datos adjuntos. + No comment provided by engineer. + Preset server + Servidor predefinido No comment provided by engineer. Preset server address + Dirección del servidor predefinida No comment provided by engineer. Privacy & security + Privacidad y seguridad No comment provided by engineer. Privacy redefined + Privacidad redefinida + No comment provided by engineer. + + + Private filenames + Nombres de archivos privados No comment provided by engineer. Profile and server connections + Perfil y conexiones de servidor No comment provided by engineer. Profile image + Imagen del perfil No comment provided by engineer. Prohibit irreversible message deletion. + Prohibir la eliminación irreversible de mensajes. No comment provided by engineer. Prohibit sending direct messages to members. + Prohibir el envío de mensajes directos a los miembros. No comment provided by engineer. Prohibit sending disappearing messages. + Prohibir el envío de mensajes temporales. No comment provided by engineer. Prohibit sending voice messages. + Prohibir el envío de mensajes de voz. No comment provided by engineer. Protect app screen + Proteger la pantalla de la aplicación + No comment provided by engineer. + + + Protect your chat profiles with a password! No comment provided by engineer. Protocol timeout + Tiempo de espera del protocolo No comment provided by engineer. Push notifications + Notificaciones automáticas No comment provided by engineer. Rate the app + Valora la aplicación No comment provided by engineer. Read + Leer No comment provided by engineer. Read more in our GitHub repository. + Más información en nuestro repositorio GitHub. No comment provided by engineer. Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme). + Más información en nuestro [repositorio GitHub](https://github.com/simplex-chat/simplex-chat#readme). No comment provided by engineer. Received file event + Evento de archivo recibido notification Receiving via + Recibiendo mediante No comment provided by engineer. Recipients see updates as you type them. + Los destinatarios ven la actualizacion mientras escribes. + No comment provided by engineer. + + + Reduced battery usage + Reducción del uso de la batería No comment provided by engineer. Reject + Rechazar reject incoming call via notification Reject contact (sender NOT notified) + Rechazar contacto (NO se notifica al remitente) No comment provided by engineer. Reject contact request + Rechazar solicitud de contacto No comment provided by engineer. Relay server is only used if necessary. Another party can observe your IP address. + El servidor de retransmisión sólo se utiliza en caso necesario. Una tercera persona puede observar tu dirección IP. No comment provided by engineer. Relay server protects your IP address, but it can observe the duration of the call. + El servidor de retransmisión protege tu IP pero puede observar la duración de la llamada. No comment provided by engineer. Remove + Eliminar No comment provided by engineer. Remove member + Eliminar miembro No comment provided by engineer. Remove member? + ¿Eliminar miembro? No comment provided by engineer. Remove passphrase from keychain? + ¿Eliminar contraseña de Keychain? No comment provided by engineer. Reply + Responder chat item action Required + Obligatorio No comment provided by engineer. Reset + Restablecer No comment provided by engineer. Reset colors + Restablecer colores No comment provided by engineer. Reset to defaults + Restablecer valores por defecto No comment provided by engineer. Restart the app to create a new chat profile + Reinicia la aplicación para crear un perfil nuevo No comment provided by engineer. Restart the app to use imported chat database + Reinicia la aplicación para utilizar la base de datos importada No comment provided by engineer. Restore + Restaurar No comment provided by engineer. Restore database backup + Restaurar copia de seguridad de la base de datos No comment provided by engineer. Restore database backup? + ¿Restaurar copia de seguridad de la base de datos? No comment provided by engineer. Restore database error + Error al restaurar la base de datos No comment provided by engineer. Reveal + Revelar chat item action Revert + Revertir No comment provided by engineer. Role + Rol No comment provided by engineer. Run chat + Ejecutar Chat No comment provided by engineer. SMP servers + Servidores SMP No comment provided by engineer. Save + Guardar chat item action Save (and notify contacts) + Guardar (y notificar contactos) No comment provided by engineer. Save and notify contact + Guardar y notificar contacto No comment provided by engineer. Save and notify group members + Guardar y notificar a los miembros del grupo + No comment provided by engineer. + + + Save and update group profile No comment provided by engineer. Save archive + Guardar archivo No comment provided by engineer. Save group profile + Guardar perfil de grupo No comment provided by engineer. Save passphrase and open chat + Guardar contraseña y abrir el chat No comment provided by engineer. Save passphrase in Keychain + Guardar la contraseña en Keychain No comment provided by engineer. Save preferences? + ¿Guardar preferencias? + No comment provided by engineer. + + + Save profile password No comment provided by engineer. Save servers + Guardar servidores + No comment provided by engineer. + + + Save servers? + No comment provided by engineer. + + + Save welcome message? No comment provided by engineer. Saved WebRTC ICE servers will be removed + Los servidores WebRTC ICE guardados serán eliminados No comment provided by engineer. Scan QR code + Escanear código QR No comment provided by engineer. Scan code + Escanear código No comment provided by engineer. Scan security code from your contact's app. + Escanea el código de seguridad desde la aplicación de tu contacto. No comment provided by engineer. Scan server QR code + Escanear código QR del servidor No comment provided by engineer. Search + Buscar No comment provided by engineer. Secure queue + Cola segura server test step Security assessment + Evaluación de la seguridad No comment provided by engineer. Security code + Código de seguridad No comment provided by engineer. Send + Enviar No comment provided by engineer. Send a live message - it will update for the recipient(s) as you type it + Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe No comment provided by engineer. Send direct message + Enviar mensaje directo No comment provided by engineer. Send link previews + Enviar previsualizaciones de enlaces No comment provided by engineer. Send live message + Enviar mensaje en vivo No comment provided by engineer. Send notifications + Enviar notificaciones No comment provided by engineer. Send notifications: + Enviar notificaciones: No comment provided by engineer. Send questions and ideas + Envía preguntas e ideas No comment provided by engineer. Send them from gallery or custom keyboards. + Envíalos desde la galería o desde teclados personalizados. No comment provided by engineer. Sender cancelled file transfer. + El remitente ha cancelado la transferencia de archivos. No comment provided by engineer. Sender may have deleted the connection request. + El remitente puede haber eliminado la solicitud de conexión. No comment provided by engineer. Sending via + Envando mediante No comment provided by engineer. Sent file event + Evento de archivo enviado notification Sent messages will be deleted after set time. + Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido. No comment provided by engineer. Server requires authorization to create queues, check password + El servidor requiere autorización para crear colas, comprueba la contraseña server test error Server test failed! + ¡Error en prueba del servidor! No comment provided by engineer. Servers + Servidores No comment provided by engineer. Set 1 day + Establecer 1 día No comment provided by engineer. Set contact name… + Introduce el nombre del contacto… No comment provided by engineer. Set group preferences + Establecer preferencias de grupo No comment provided by engineer. Set passphrase to export + Seleccióna contraseña para exportar + No comment provided by engineer. + + + Set the message shown to new members! No comment provided by engineer. Set timeouts for proxy/VPN + Establecer tiempos de espera para proxy/VPN No comment provided by engineer. Settings + Configuración No comment provided by engineer. Share + Compartir chat item action Share invitation link + Compartir enlace de invitación No comment provided by engineer. Share link + Compartir enlace No comment provided by engineer. Share one-time invitation link + Compartir enlace único de invitación No comment provided by engineer. Show QR code + Mostrar código QR + No comment provided by engineer. + + + Show calls in phone history + Mostrar llamadas en el historial del teléfono No comment provided by engineer. Show preview + Mostrar vista previa No comment provided by engineer. SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). + La seguridad de SimpleX Chat fue [auditada por Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). No comment provided by engineer. SimpleX Lock + Bloqueo SimpleX No comment provided by engineer. SimpleX Lock turned on + Bloqueo SimpleX activado No comment provided by engineer. SimpleX contact address + Dirección de contacto SimpleX simplex link type SimpleX encrypted message or connection event + Mensaje cifrado SimpleX o evento de conexión notification SimpleX group link + Enlace de grupo SimpleX simplex link type SimpleX links + Enlaces SimpleX No comment provided by engineer. SimpleX one-time invitation + Invitación única SimpleX simplex link type Skip + Omitir No comment provided by engineer. Skipped messages + Mensajes omitidos No comment provided by engineer. Somebody + Alguien notification title Start a new chat + Iniciar chat nuevo No comment provided by engineer. Start chat + Iniciar chat No comment provided by engineer. Start migration + Iniciar migración No comment provided by engineer. Stop + Detener No comment provided by engineer. Stop SimpleX + Detener SimpleX authentication reason Stop chat to enable database actions + Detener Chat para habilitar acciones sobre la base de datos No comment provided by engineer. Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. + Detener Chat para exportar, importar o eliminar la base de datos del chat. No podrá recibir ni enviar mensajes mientras el chat esté detenido. No comment provided by engineer. Stop chat? + ¿Detener Chat? No comment provided by engineer. Support SimpleX Chat + Soporte SimpleX Chat No comment provided by engineer. System + Sistema No comment provided by engineer. TCP connection timeout + Tiempo de espera de la conexión TCP agotado No comment provided by engineer. TCP_KEEPCNT + TCP_KEEPCNT No comment provided by engineer. TCP_KEEPIDLE + TCP_KEEPIDLE No comment provided by engineer. TCP_KEEPINTVL + TCP_KEEPINTVL No comment provided by engineer. Take picture + Tomar foto No comment provided by engineer. Tap button + Pulsa el botón + No comment provided by engineer. + + + Tap to activate profile. No comment provided by engineer. Tap to join + Pulsa para unirse No comment provided by engineer. Tap to join incognito + Pulsa para unirte en modo incógnito No comment provided by engineer. Tap to start a new chat + Pulsa para iniciar chat nuevo No comment provided by engineer. Test failed at step %@. + La prueba ha fallado en el paso %@. server test failure Test server + Probar servidor No comment provided by engineer. Test servers + Probar servidores No comment provided by engineer. Tests failed! + ¡Pruebas fallidas! No comment provided by engineer. Thank you for installing SimpleX Chat! + ¡Gracias por instalar SimpleX Chat! + No comment provided by engineer. + + + Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + Gracias a los usuarios: [contribuye vía Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#traducir-el-aplicaciones)! + No comment provided by engineer. + + + Thanks to the users – contribute via Weblate! + Gracias a los usuarios: ¡contribuye a través de Weblate! No comment provided by engineer. The 1st platform without any user identifiers – private by design. + La primera plataforma sin identificadores de usuario: diseñada para la privacidad. No comment provided by engineer. The app can notify you when you receive messages or contact requests - please open settings to enable. + La aplicación puede notificarte cuando recibas mensajes o solicitudes de contacto: abre la configuración para habilitar. No comment provided by engineer. The attempt to change database passphrase was not completed. + El intento de cambiar la contraseña de la base de datos no se ha completado. No comment provided by engineer. The connection you accepted will be cancelled! + ¡La conexión que has aceptado se cancelará! No comment provided by engineer. The contact you shared this link with will NOT be able to connect! + ¡El contacto con el que has compartido este enlace NO podrá conectarse! No comment provided by engineer. The created archive is available via app Settings / Database / Old database archive. + El archivo creado está disponible a través de Configuración / Base de datos / Archivo de base de datos antigua. No comment provided by engineer. The group is fully decentralized – it is visible only to the members. + El grupo está totalmente descentralizado: sólo es visible para los miembros. No comment provided by engineer. - - The microphone does not work when the app is in the background. + + The message will be deleted for all members. + El mensaje se eliminará para todos los miembros. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + El mensaje será marcado como moderado para todos los miembros. No comment provided by engineer. The next generation of private messaging + La próxima generación de mensajería privada No comment provided by engineer. The old database was not removed during the migration, it can be deleted. + La base de datos antigua no se eliminó durante la migración, puede eliminarse. No comment provided by engineer. The profile is only shared with your contacts. + El perfil sólo se comparte con tus contactos. No comment provided by engineer. The sender will NOT be notified + El remitente NO será notificado No comment provided by engineer. The servers for new connections of your current chat profile **%@**. + Los servidores para nuevas conexiones de tu perfil de Chat actual **%@**. No comment provided by engineer. Theme + Tema + No comment provided by engineer. + + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. No comment provided by engineer. This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. + 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. No comment provided by engineer. This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. + Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos. No comment provided by engineer. This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. + Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente. No comment provided by engineer. This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member). + ¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo). No comment provided by engineer. This group no longer exists. + Este grupo ya no existe. No comment provided by engineer. This setting applies to messages in your current chat profile **%@**. + Esta configuración se aplica a los mensajes en su perfil actual de Chat **%@**. No comment provided by engineer. To ask any questions and to receive updates: + Para consultar cualquier duda y recibir actualizaciones: No comment provided by engineer. To find the profile used for an incognito connection, tap the contact or group name on top of the chat. + 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. No comment provided by engineer. To make a new connection - No comment provided by engineer. - - - To prevent the call interruption, enable Do Not Disturb mode. + Para hacer una conexión nueva No comment provided by engineer. To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. + Para proteger la privacidad, en lugar de los identificadores de usuario que utilizan el resto de plataformas, SimpleX dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos. + No comment provided by engineer. + + + To protect timezone, image/voice files use UTC. + Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC. No comment provided by engineer. 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. +Se te pedirá que completes la autenticación antes de activar esta función. No comment provided by engineer. To record voice message please grant permission to use Microphone. + Para grabar el mensaje de voz concede permiso para usar el micrófono. + No comment provided by engineer. + + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. No comment provided by engineer. To support instant push notifications the chat database has to be migrated. + Para permitir las notificaciones automáticas instantáneas, la base de datos se debe migrar. No comment provided by engineer. To verify end-to-end encryption with your contact compare (or scan) the code on your devices. - No comment provided by engineer. - - - Transfer images faster + Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos. No comment provided by engineer. Transport isolation + Aislamiento de transporte No comment provided by engineer. Trying to connect to the server used to receive messages from this contact (error: %@). + Intentando conectar con el servidor usado para recibir mensajes de este contacto (error: %@). No comment provided by engineer. Trying to connect to the server used to receive messages from this contact. + Intentando conectar con el servidor utilizado para recibir mensajes de este contacto. No comment provided by engineer. Turn off + Desactivar No comment provided by engineer. Turn off notifications? + ¿Desactivar notificaciones? No comment provided by engineer. Turn on + Activar No comment provided by engineer. Unable to record voice message + No se puede grabar mensaje de voz No comment provided by engineer. Unexpected error: %@ + Error inesperado: %@ No comment provided by engineer. Unexpected migration state + Estado de migración inesperado No comment provided by engineer. + + Unhide + No comment provided by engineer. + + + Unknown caller + Llamada desconocida + callkit banner + Unknown database error: %@ + Error desconocido en base de datos: %@ No comment provided by engineer. Unknown error + Error desconocido + No comment provided by engineer. + + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + A menos que utilices la interfaz de llamadas de iOS, activa el modo No molestar para evitar interrupciones. No comment provided by engineer. Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. + 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. +Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueba que tienes buena conexión de red. No comment provided by engineer. Unlock + Desbloquear authentication reason Unmute + Activar audio No comment provided by engineer. Unread + No leído No comment provided by engineer. Update + Actualizar No comment provided by engineer. Update .onion hosts setting? + ¿Actualizar la configuración de los hosts .onion? No comment provided by engineer. Update database passphrase + Actualizar contraseña de la base de datos No comment provided by engineer. Update network settings? + ¿Actualizar la configuración de red? No comment provided by engineer. Update transport isolation mode? + ¿Actualizar el modo de aislamiento de transporte? No comment provided by engineer. Updating settings will re-connect the client to all servers. + Al actualizar la configuración el cliente se reconectará a todos los servidores. No comment provided by engineer. Updating this setting will re-connect the client to all servers. + Al actualizar esta configuración el cliente se reconectará a todos los servidores. No comment provided by engineer. Use .onion hosts + Usar hosts .onion No comment provided by engineer. Use SimpleX Chat servers? + ¿Usar servidores SimpleX Chat? No comment provided by engineer. Use chat + Usar Chat No comment provided by engineer. Use for new connections + Usar para conexiones nuevas + No comment provided by engineer. + + + Use iOS call interface + Usar interfaz de llamada de iOS No comment provided by engineer. Use server + Usar servidor No comment provided by engineer. User profile + Perfil de usuario No comment provided by engineer. Using .onion hosts requires compatible VPN provider. + Utilizar hosts .onion requiere un proveedor VPN compatible. No comment provided by engineer. Using SimpleX Chat servers. + Usar servidores SimpleX Chat. No comment provided by engineer. Verify connection security + Comprobar la seguridad de la conexión No comment provided by engineer. Verify security code + Comprobar código de seguridad No comment provided by engineer. Via browser + Mediante navegador No comment provided by engineer. Video call + Videollamada No comment provided by engineer. View security code + Ver código de seguridad No comment provided by engineer. Voice messages + Mensajes de voz chat feature Voice messages are prohibited in this chat. + Los mensajes de voz están prohibidos en este chat. No comment provided by engineer. Voice messages are prohibited in this group. + Los mensajes de voz están prohibidos en este grupo. No comment provided by engineer. Voice messages prohibited! + ¡Mensajes de voz prohibidos! No comment provided by engineer. Voice message… + Mensaje de voz… No comment provided by engineer. Waiting for file + Esperando archivo No comment provided by engineer. Waiting for image + Esperando imagen No comment provided by engineer. WebRTC ICE servers + Servidores WebRTC ICE No comment provided by engineer. Welcome %@! + ¡Bienvenido %@! No comment provided by engineer. Welcome message + Mensaje de bienvenida No comment provided by engineer. What's new + Novedades No comment provided by engineer. When available + Cuando esté disponible No comment provided by engineer. When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. + Cuando compartes un perfil incógnito con alguien, este perfil se usará para los grupos a los que te inviten. No comment provided by engineer. With optional welcome message. + Con mensaje de bienvenida opcional. No comment provided by engineer. Wrong database passphrase + Contraseña de base de datos incorrecta No comment provided by engineer. Wrong passphrase! + ¡Contraseña incorrecta! No comment provided by engineer. You + No comment provided by engineer. You accepted connection + Has aceptado la conexión No comment provided by engineer. You allow + Permites + No comment provided by engineer. + + + You already have a chat profile with the same display name. Please choose another name. + Tienes un perfil de chat con el mismo nombre mostrado. Debes elegir otro nombre. No comment provided by engineer. You are already connected to %@. + Ya estás conectado a %@. No comment provided by engineer. You are connected to the server used to receive messages from this contact. + Estás conectado al servidor utilizado para recibir mensajes de este contacto. No comment provided by engineer. You are invited to group + Has sido invitado al grupo + No comment provided by engineer. + + + You can accept calls from lock screen, without device and app authentication. + Puede aceptar llamadas desde la pantalla de bloqueo, sin autenticación de dispositivos y aplicaciones. No comment provided by engineer. You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. + También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en el botón **Abrir en aplicación móvil**. + No comment provided by engineer. + + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. No comment provided by engineer. You can now send messages to %@ + Ya puedes enviar mensajes a %@ notification body You can set lock screen notification preview via settings. + Puedes configurar las notificaciones de la pantalla de bloqueo desde Configuración. No comment provided by engineer. 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. + 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. No comment provided by engineer. You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. + 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. No comment provided by engineer. You can start chat via app Settings / Database or by restarting the app + Puede iniciar Chat a través de la Configuración / base de datos de la aplicación o reiniciando la aplicación No comment provided by engineer. You can use markdown to format messages: + Puedes usar marcadores para dar formato a los mensajes: + No comment provided by engineer. + + + You can't send messages! + ¡No puedes enviar mensajes! No comment provided by engineer. You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. + Tú controlas a través de qué servidor(es) **recibes** los mensajes. Tus contactos controlan a través de qué servidor(es) **envías** tus mensajes. No comment provided by engineer. You could not be verified; please try again. + No has podido ser verificado. Inténtelo de nuevo. No comment provided by engineer. You have no chats + No tienes chats No comment provided by engineer. You have to enter passphrase every time the app starts - it is not stored on the device. + La contraseña no se almacena en el dispositivo, tienes que introducirla cada vez que inicies la aplicación. No comment provided by engineer. You invited your contact + Has invitado a tu contacto No comment provided by engineer. You joined this group + Te has unido a este grupo No comment provided by engineer. You joined this group. Connecting to inviting group member. + Te has unido a este grupo. Conectando con miembro del grupo invitado. No comment provided by engineer. You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts. + 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. No comment provided by engineer. You need to allow your contact to send voice messages to be able to send them. + Para poder enviar mensajes de voz debes permitir que tu contacto pueda enviarlos. No comment provided by engineer. You rejected group invitation + Has rechazado la invitación del grupo No comment provided by engineer. You sent group invitation + Has enviado una invitación de grupo No comment provided by engineer. You will be connected to group when the group host's device is online, please wait or check later! + Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde. No comment provided by engineer. You will be connected when your connection request is accepted, please wait or check later! + Te conectarás cuando se acepte tu solicitud de conexión, por favor espere o compruébalo más tarde. No comment provided by engineer. You will be connected when your contact's device is online, please wait or check later! + Te conectarás cuando el dispositivo de tu contacto esté en línea, por favor espera o compruébalo más tarde. No comment provided by engineer. You will be required to authenticate when you start or resume the app after 30 seconds in background. + Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano. No comment provided by engineer. You will join a group this link refers to and connect to its group members. + Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros. + No comment provided by engineer. + + + You will still receive calls and notifications from muted profiles when they are active. No comment provided by engineer. 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á. No comment provided by engineer. You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile + 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 No comment provided by engineer. You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed + Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido No comment provided by engineer. Your ICE servers + Tus servidores ICE No comment provided by engineer. Your SMP servers + Tus servidores SMP No comment provided by engineer. Your SimpleX contact address + Tu dirección de contacto SimpleX No comment provided by engineer. Your calls + Tus llamadas No comment provided by engineer. Your chat database + Base de datos No comment provided by engineer. Your chat database is not encrypted - set passphrase to encrypt it. - No comment provided by engineer. - - - Your chat profile + La base de datos no está cifrada - establece una contraseña para cifrarla. No comment provided by engineer. Your chat profile will be sent to group members + Tu perfil de chat se enviará a los miembros del grupo No comment provided by engineer. Your chat profile will be sent to your contact + Tu perfil de chat se enviará a tu contacto No comment provided by engineer. Your chat profiles - No comment provided by engineer. - - - Your chat profiles are stored locally, only on your device. + Tus perfiles de chat No comment provided by engineer. Your chats + Tus chats No comment provided by engineer. Your contact address + Tu dirección de contacto No comment provided by engineer. Your contact can scan it from the app. + Tu contacto puede escanearlo desde la aplicación. No comment provided by engineer. Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link). + Tu contacto debe estar en línea para que se complete la conexión. +Puedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo). No comment provided by engineer. Your contact sent a file that is larger than currently supported maximum size (%@). + El contacto ha enviado un archivo mayor al máximo admitido (%@). No comment provided by engineer. Your contacts can allow full message deletion. + Tus contactos pueden permitir la eliminación completa de mensajes. No comment provided by engineer. 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. No comment provided by engineer. Your current profile + Tu perfil actual No comment provided by engineer. Your preferences + Tus preferencias No comment provided by engineer. Your privacy + Tu privacidad No comment provided by engineer. Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile. + Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos. +Los servidores de SimpleX no pueden ver tu perfil. No comment provided by engineer. Your profile will be sent to the contact that you received this link from + Tu perfil se enviará al contacto del que has recibido este enlace No comment provided by engineer. Your profile, contacts and delivered messages are stored on your device. + Tu perfil, contactos y mensajes entregados se almacenan en tu dispositivo. No comment provided by engineer. Your random profile + Tu perfil aleatorio No comment provided by engineer. Your server + Tu servidor No comment provided by engineer. Your server address + Dirección de tu servidor No comment provided by engineer. Your settings + Tu configuración No comment provided by engineer. [Contribute](https://github.com/simplex-chat/simplex-chat#contribute) + [Contribuye](https://github.com/simplex-chat/simplex-chat#contribute) No comment provided by engineer. [Send us email](mailto:chat@simplex.chat) + [Contacta por email](mailto:chat@simplex.chat) No comment provided by engineer. [Star on GitHub](https://github.com/simplex-chat/simplex-chat) + [Comienza en GitHub] (https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. \_italic_ + \_italic_ No comment provided by engineer. \`a + b` + \`a + b` No comment provided by engineer. above, then choose: + arriba, luego elige: No comment provided by engineer. accepted call + llamada aceptada call status admin + administrador member role always + siempre pref value audio call (not e2e encrypted) + llamada de audio (sin cifrado e2e) No comment provided by engineer. bad message ID + ID de mensaje erróneo integrity error chat item bad message hash + hash de mensaje erróneo integrity error chat item bold + negrita No comment provided by engineer. call error + error en la llamada call status call in progress + llamada en curso call status calling… + llamando… call status cancelled %@ + cancelado %@ feature offered item changed address for you + su dirección ha cambiado para tí chat item text changed role of %1$@ to %2$@ + rol cambiado de %1$@ a %2$@ rcv group event chat item changed your role to %@ + ha cambiado tu rol a %@ rcv group event chat item changing address for %@... + la dirección ha cambiado para %@... chat item text changing address... + cambiando la dirección... chat item text colored + coloreado No comment provided by engineer. complete + completado No comment provided by engineer. connect to SimpleX Chat developers. + contacta con los desarrolladores de SimpleX Chat. No comment provided by engineer. connected + conectado No comment provided by engineer. connecting + conectando No comment provided by engineer. connecting (accepted) + conectando (aceptado) No comment provided by engineer. connecting (announced) + conectando (anunciado) No comment provided by engineer. connecting (introduced) + conectando (presentado) No comment provided by engineer. connecting (introduction invitation) + conectando (invitación de presentación ) No comment provided by engineer. connecting call… + conectando llamada… call status connecting… + conectando… chat list item title connection established + conexión establecida chat list item title (it should not be shown connection:%@ + conexión: % @ connection information contact has e2e encryption + El contacto dispone de cifrado e2e No comment provided by engineer. contact has no e2e encryption + El contacto no dispone de cifrado e2e No comment provided by engineer. creator + creador No comment provided by engineer. default (%@) + por defecto (%@) pref value deleted + eliminado deleted chat item deleted group + grupo eliminado rcv group event chat item direct + directo connection level description duplicate message + mensaje duplicado integrity error chat item e2e encrypted + Cifrado e2e No comment provided by engineer. enabled + activado enabled status enabled for contact + activado para el contacto enabled status enabled for you + activado para tí enabled status ended + finalizado No comment provided by engineer. ended call %@ + llamada finalizada %@ call status error + error No comment provided by engineer. group deleted + grupo eliminado No comment provided by engineer. group profile updated + perfil de grupo actualizado snd group event chat item iOS Keychain is used to securely store passphrase - it allows receiving push notifications. + iOS Keychain se usa para almacenar la contraseña de forma segura. Esto permite recibir notificaciones automáticas. No comment provided by engineer. iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications. + iOS Keychain se usará para almacenar la contraseña de forma segura después de reiniciar la aplicación o cambiar la contraseña. Esto permitirá recibir notificaciones automáticas. No comment provided by engineer. incognito via contact address link + Incógnito mediante enlace de dirección del contacto chat list item description incognito via group link + Incógnito mediante enlace de grupo chat list item description incognito via one-time link + Incógnito mediante enlace único chat list item description indirect (%d) + indirecto (%d) connection level description invalid chat + chat no válido invalid chat data invalid chat data + datos Chat no válidos No comment provided by engineer. invalid data + datos no válidos invalid chat item invitation to group %@ + invitación al grupo %@ group name invited + invitado No comment provided by engineer. invited %@ + invitado %@ rcv group event chat item invited to connect + invitado a conectarse chat list item title invited via your group link + Invitado mediante tu enlace de grupo rcv group event chat item italic + cursiva No comment provided by engineer. join as %@ + unirte como %@ No comment provided by engineer. left + ha salido rcv group event chat item marked deleted + marcado eliminado marked deleted chat item preview text member + miembro member role connected + conectado rcv group event chat item message received + mensaje recibido notification missed call + llamada perdida call status + + moderated + moderado + moderated chat item + + + moderated by %@ + moderado por %@ + No comment provided by engineer. + never + nunca No comment provided by engineer. new message + mensaje nuevo notification no + no pref value no e2e encryption + sin cifrado e2e No comment provided by engineer. + + observer + observador + member role + off + apagado enabled status group pref value offered %@ + ofrecido %@ feature offered item offered %1$@: %2$@ + ofrecido %1$@: %2$@ feature offered item on + Activado group pref value or chat with the developers + o habla con los desarrolladores No comment provided by engineer. owner + propietario member role peer-to-peer + entre particulares No comment provided by engineer. received answer… + respuesta recibida… No comment provided by engineer. received confirmation… + confirmación recibida… No comment provided by engineer. rejected call + llamada rechazada call status removed + eliminado No comment provided by engineer. removed %@ + eliminado %@ rcv group event chat item removed you + te ha eliminado rcv group event chat item sec + seg network option secret + secreto No comment provided by engineer. starting… + inicializando… No comment provided by engineer. strike + tachado No comment provided by engineer. this contact + este contacto notification title unknown + desconocido connection info updated group profile + perfil de grupo actualizado rcv group event chat item v%@ (%@) + v%@ (%@) No comment provided by engineer. via contact address link + mediante enlace de dirección de contacto chat list item description via group link + mediante enlace de grupo chat list item description via one-time link + mediante enlace único chat list item description via relay + mediante servidor de retransmisión No comment provided by engineer. video call (not e2e encrypted) + videollamada (sin cifrado e2e) No comment provided by engineer. waiting for answer… + esperando respuesta… No comment provided by engineer. waiting for confirmation… + esperando confirmación… No comment provided by engineer. wants to connect to you! + ¡quiere contactar contigo! No comment provided by engineer. yes + pref value you are invited to group + has sido invitado al grupo + No comment provided by engineer. + + + you are observer + Tu rol es observador No comment provided by engineer. you changed address + has cambiado la dirección chat item text you changed address for %@ + has cambiado la dirección por %@ chat item text you changed role for yourself to %@ + has cambiado tu rol a %@ snd group event chat item you changed role of %1$@ to %2$@ + has cambiado el rol de %1$@ a %2$@ snd group event chat item you left + has salido snd group event chat item you removed %@ + has eliminado %@ snd group event chat item you shared one-time link + has compartido un enlace único chat list item description you shared one-time link incognito + has compartido un enlace único en módo incógnito chat list item description you: + tú: No comment provided by engineer. \~strike~ + \~strike~ No comment provided by engineer.
- +
SimpleX + SimpleX Bundle name SimpleX needs camera access to scan QR codes to connect to other users and for video calls. + SimpleX necesita acceso a la cámara para escanear códigos QR para conectarse con otros usuarios y para las videollamadas. Privacy - Camera Usage Description SimpleX uses Face ID for local authentication + SimpleX usa reconocimiento facial para la autenticación local Privacy - Face ID Usage Description SimpleX needs microphone access for audio and video calls, and to record voice messages. + SimpleX necesita acceso al micrófono para las llamadas de audio, vídeo y para grabar mensajes de voz. Privacy - Microphone Usage Description SimpleX needs access to Photo Library for saving captured and received media + SimpleX necesita acceso a la galería de fotos para guardar los medios capturados y recibidos Privacy - Photo Library Additions Usage Description
- +
SimpleX NSE + SimpleX NSE Bundle display name SimpleX NSE + SimpleX NSE Bundle name Copyright © 2022 SimpleX Chat. All rights reserved. + Copyright © 2022 SimpleX Chat. Todos los derechos reservados. Copyright (human-readable) diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..aaa7f79bc --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.000", + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.533" + } + }, + "idiom" : "universal" + } + ], + "properties" : { + "localizable" : true + }, + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..124ddbcc3 --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "SimpleX NSE"; +/* Bundle name */ +"CFBundleName" = "SimpleX NSE"; +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. All rights reserved."; diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings @@ -0,0 +1 @@ + diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/en.lproj/Localizable.strings b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/en.lproj/Localizable.strings new file mode 100644 index 000000000..cf485752e --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/en.lproj/Localizable.strings @@ -0,0 +1,30 @@ +/* No comment provided by engineer. */ +"_italic_" = "\\_italic_"; + +/* No comment provided by engineer. */ +"**Add new contact**: to create your one-time QR Code for your contact." = "**Add new contact**: to create your one-time QR Code or link for your contact."; + +/* No comment provided by engineer. */ +"*bold*" = "\\*bold*"; + +/* No comment provided by engineer. */ +"`a + b`" = "\\`a + b`"; + +/* No comment provided by engineer. */ +"~strike~" = "\\~strike~"; + +/* call status */ +"connecting call" = "connecting call…"; + +/* No comment provided by engineer. */ +"Connecting server…" = "Connecting to server…"; + +/* No comment provided by engineer. */ +"Connecting server… (error: %@)" = "Connecting to server… (error: %@)"; + +/* rcv group event chat item */ +"member connected" = "connected"; + +/* No comment provided by engineer. */ +"No group!" = "Group not found!"; + diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings new file mode 100644 index 000000000..3af673b19 --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings @@ -0,0 +1,10 @@ +/* Bundle name */ +"CFBundleName" = "SimpleX"; +/* Privacy - Camera Usage Description */ +"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; +/* Privacy - Face ID Usage Description */ +"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; +/* Privacy - Photo Library Additions Usage Description */ +"NSPhotoLibraryAddUsageDescription" = "SimpleX needs access to Photo Library for saving captured and received media"; diff --git a/apps/ios/SimpleX Localizations/es.xcloc/contents.json b/apps/ios/SimpleX Localizations/es.xcloc/contents.json new file mode 100644 index 000000000..076eff398 --- /dev/null +++ b/apps/ios/SimpleX Localizations/es.xcloc/contents.json @@ -0,0 +1,12 @@ +{ + "developmentRegion" : "en", + "project" : "SimpleX.xcodeproj", + "targetLocale" : "es", + "toolInfo" : { + "toolBuildNumber" : "14C18", + "toolID" : "com.apple.dt.xcode", + "toolName" : "Xcode", + "toolVersion" : "14.2" + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 5b832992e..099327af4 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -2,7 +2,7 @@
- +
@@ -385,6 +385,10 @@ Ajouter à un autre appareil No comment provided by engineer. + + Add welcome message + No comment provided by engineer. + Admins can create the links to join groups. Les admins peuvent créer les liens qui permettent de rejoindre les groupes. @@ -480,6 +484,11 @@ Déjà connecté ? No comment provided by engineer. + + Always use relay + Se connecter via relais + No comment provided by engineer. + Answer call Répondre à l'appel @@ -520,11 +529,20 @@ Appels audio et vidéo No comment provided by engineer. + + Audio and video calls + No comment provided by engineer. + Authentication failed Échec de l'authentification No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + L'authentification est requise avant que l'appel ne soit connecté, mais vous risquez de manquer des appels. + No comment provided by engineer. + Authentication unavailable Authentification indisponible @@ -580,6 +598,10 @@ Appels No comment provided by engineer. + + Can't delete user profile! + No comment provided by engineer. + Can't invite contact! Impossible d'inviter le contact ! @@ -685,6 +707,10 @@ Vérifiez l'adresse du serveur et réessayez. No comment provided by engineer. + + Chinese and Spanish interface + No comment provided by engineer. + Choose file Choisir le fichier @@ -740,6 +766,10 @@ Confirmer la nouvelle phrase secrète… No comment provided by engineer. + + Confirm password + No comment provided by engineer. + Connect Se connecter @@ -770,11 +800,6 @@ Se connecter via un lien unique ? No comment provided by engineer. - - Connect via relay - Se connecter via relais - No comment provided by engineer. - Connecting to server… Connexion au serveur… @@ -1133,6 +1158,11 @@ Supprimer le lien ? No comment provided by engineer. + + Delete member message? + Supprimer le message de ce membre ? + No comment provided by engineer. + Delete message? Supprimer le message ? @@ -1268,6 +1298,10 @@ Faites-le plus tard No comment provided by engineer. + + Don't show again + No comment provided by engineer. + Duplicate display name! Nom d'affichage en double ! @@ -1368,6 +1402,10 @@ Entrez la phrase secrète… No comment provided by engineer. + + Enter password above to show! + No comment provided by engineer. + Enter server manually Entrer un serveur manuellement @@ -1523,6 +1561,10 @@ Erreur lors de l'enregistrement de la phrase de passe dans la keychain No comment provided by engineer. + + Error saving user password + No comment provided by engineer. + Error sending message Erreur lors de l'envoi du message @@ -1543,6 +1585,11 @@ Erreur lors du changement de profil ! No comment provided by engineer. + + Error updating group link + Erreur lors de la mise à jour du lien de groupe + No comment provided by engineer. + Error updating message Erreur lors de la mise à jour du message @@ -1553,6 +1600,10 @@ Erreur lors de la mise à jour des paramètres No comment provided by engineer. + + Error updating user privacy + No comment provided by engineer. + Error: %@ Erreur : %@ @@ -1638,6 +1689,14 @@ Nom complet : No comment provided by engineer. + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + GIFs and stickers GIFs et stickers @@ -1713,6 +1772,10 @@ Message du groupe : notification + + Group moderation + No comment provided by engineer. + Group preferences Préférences du groupe @@ -1728,6 +1791,10 @@ Le profil du groupe est stocké sur les appareils des membres, pas sur les serveurs. No comment provided by engineer. + + Group welcome message + No comment provided by engineer. + Group will be deleted for all members - this cannot be undone! Le groupe va être supprimé pour tout les membres - impossible de revenir en arrière ! @@ -1748,6 +1815,14 @@ Caché No comment provided by engineer. + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + Hide Cacher @@ -1758,6 +1833,10 @@ Masquer l'écran de l'app dans les apps récentes. No comment provided by engineer. + + Hide profile + No comment provided by engineer. + How SimpleX works Comment SimpleX fonctionne @@ -1788,11 +1867,6 @@ Serveurs ICE (un par ligne) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - Si la vidéo ne se connecte pas, retournez la caméra. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. Si vous ne pouvez pas voir la personne, **montrez lui le code QR dans un appel vidéo**, ou partagez lui le lien. @@ -1905,6 +1979,11 @@ Instantané No comment provided by engineer. + + Interface + Interface + No comment provided by engineer. + Invalid connection link Lien de connection invalide @@ -2060,6 +2139,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Établir une connexion privée No comment provided by engineer. + + Make profile private! + No comment provided by engineer. + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). Assurez-vous que les adresses des serveurs SMP sont au bon format et ne sont pas dupliquées, un par ligne. @@ -2160,6 +2243,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message La migration est terminée No comment provided by engineer. + + Moderate + Modéré + chat item action + More improvements are coming soon! Plus d'améliorations à venir ! @@ -2180,6 +2268,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Muet No comment provided by engineer. + + Muted when inactive! + No comment provided by engineer. + Name Nom @@ -2280,6 +2372,12 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Les notifications sont désactivées ! No comment provided by engineer. + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + Off (Local) Off (Local) @@ -2405,6 +2503,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Intervalle de PING No comment provided by engineer. + + Password to show + No comment provided by engineer. + Paste Coller @@ -2455,6 +2557,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Veuillez vérifier vos préférences ainsi que celles de votre contact. No comment provided by engineer. + + Please contact group admin. + Veuillez contacter l'administrateur du groupe. + No comment provided by engineer. + Please enter correct current passphrase. Veuillez entrer la phrase secrète actuelle correcte. @@ -2550,6 +2657,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Protéger l'écran de l'app No comment provided by engineer. + + Protect your chat profiles with a password! + No comment provided by engineer. + Protocol timeout Délai du protocole @@ -2745,6 +2856,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Sauvegarder et en informer les membres du groupe No comment provided by engineer. + + Save and update group profile + No comment provided by engineer. + Save archive Sauvegarder l'archive @@ -2770,11 +2885,23 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Sauvegarder les préférences ? No comment provided by engineer. + + Save profile password + No comment provided by engineer. + Save servers Sauvegarder les serveurs No comment provided by engineer. + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + Saved WebRTC ICE servers will be removed Les serveurs WebRTC ICE sauvegardés seront supprimés @@ -2925,6 +3052,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Définir la phrase secrète pour l'export No comment provided by engineer. + + Set the message shown to new members! + No comment provided by engineer. + Set timeouts for proxy/VPN Définir les délais pour le proxy/VPN @@ -2960,6 +3091,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Afficher le code QR No comment provided by engineer. + + Show calls in phone history + Afficher les appels dans l'historique du téléphone + No comment provided by engineer. + Show preview Montrer l'aperçu @@ -3100,6 +3236,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Appuyez sur le bouton No comment provided by engineer. + + Tap to activate profile. + No comment provided by engineer. + Tap to join Appuyez pour rejoindre @@ -3185,9 +3325,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Le groupe est entièrement décentralisé – il n'est visible que par ses membres. No comment provided by engineer. - - The microphone does not work when the app is in the background. - Le microphone ne fonctionne pas lorsque l'application est en arrière-plan. + + The message will be deleted for all members. + Le message sera supprimé pour tous les membres. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + Le message sera marqué comme modéré pour tous les membres. No comment provided by engineer. @@ -3220,6 +3365,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Thème No comment provided by engineer. + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. Cette action ne peut être annulée - tous les fichiers et médias reçus et envoyés seront supprimés. Les photos à faible résolution seront conservées. @@ -3265,11 +3418,6 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Pour établir une nouvelle connexion No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - Pour éviter l'interruption des appels, activez le mode Ne pas déranger. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. Pour protéger votre vie privée, au lieu d’IDs utilisés par toutes les autres plateformes, SimpleX a des IDs pour les queues de messages, distinctes pour chacun de vos contacts. @@ -3292,6 +3440,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Pour enregistrer un message vocal, veuillez accorder la permission d'utiliser le microphone. No comment provided by engineer. + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + To support instant push notifications the chat database has to be migrated. Pour prendre en charge les notifications push instantanées, la base de données du chat doit être migrée. @@ -3347,6 +3499,15 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s État de la migration inattendu No comment provided by engineer. + + Unhide + No comment provided by engineer. + + + Unknown caller + Appel inconnu + callkit banner + Unknown database error: %@ Erreur inconnue de la base de données : %@ @@ -3357,6 +3518,11 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Erreur inconnue No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + À moins que vous utilisiez l'interface d'appel d'iOS, activez le mode "Ne pas déranger" pour éviter les interruptions. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -3434,6 +3600,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Utiliser pour les nouvelles connexions No comment provided by engineer. + + Use iOS call interface + Utiliser l'interface d'appel d'iOS + No comment provided by engineer. + Use server Utiliser ce serveur @@ -3594,11 +3765,21 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Vous êtes invité·e au groupe No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + Vous pouvez accepter des appels à partir de l'écran de verrouillage, sans authentification de l'appareil ou de l'application. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. Vous pouvez également vous connecter en cliquant sur le lien. S'il s'ouvre dans le navigateur, cliquez sur le bouton **Open in mobile app**. No comment provided by engineer. + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + You can now send messages to %@ Vous pouvez maintenant envoyer des messages à %@ @@ -3629,6 +3810,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Vous pouvez utiliser le format markdown pour mettre en forme les messages : No comment provided by engineer. + + You can't send messages! + Vous ne pouvez pas envoyer de messages ! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. Vous contrôlez par quel·s serveur·s vous pouvez **transmettre** ainsi que par quel·s serveur·s vous pouvez **recevoir** les messages de vos contacts. @@ -3709,6 +3895,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Vous allez rejoindre le groupe correspondant à ce lien et être mis en relation avec les autres membres du groupe. No comment provided by engineer. + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Vous ne recevrez plus de messages de ce groupe. L'historique du chat sera conservé. @@ -3769,11 +3959,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Vos profils de chat No comment provided by engineer. - - Your chat profiles are stored locally, only on your device. - Vos profils de chat sont stockés localement, uniquement sur votre appareil. - No comment provided by engineer. - Your chats Vos chats @@ -4238,6 +4423,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. modéré moderated chat item + + moderated by %@ + modéré par %@ + No comment provided by engineer. + never jamais @@ -4258,6 +4448,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. sans chiffrement de bout en bout No comment provided by engineer. + + observer + observateur + member role + off off @@ -4414,6 +4609,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. vous êtes invité·e au groupe No comment provided by engineer. + + you are observer + vous êtes observateur + No comment provided by engineer. + you changed address vous avez changé d'adresse @@ -4468,7 +4668,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
- +
@@ -4500,7 +4700,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
- +
diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/contents.json b/apps/ios/SimpleX Localizations/fr.xcloc/contents.json index 60fff4871..e1067e8a2 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/fr.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "fr", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index df5d33d1a..9f8ba15fc 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -2,7 +2,7 @@
- +
@@ -385,6 +385,10 @@ Aggiungi ad un altro dispositivo No comment provided by engineer. + + Add welcome message + No comment provided by engineer. + Admins can create the links to join groups. Gli amministratori possono creare i link per entrare nei gruppi. @@ -480,6 +484,11 @@ Già connesso? No comment provided by engineer. + + Always use relay + Connetti via relay + No comment provided by engineer. + Answer call Rispondi alla chiamata @@ -520,11 +529,20 @@ Chiamate audio e video No comment provided by engineer. + + Audio and video calls + No comment provided by engineer. + Authentication failed Autenticazione fallita No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + L'autenticazione è necessaria prima che la chiamata sia connessa, ma potresti perdere le chiamate. + No comment provided by engineer. + Authentication unavailable Autenticazione non disponibile @@ -580,6 +598,10 @@ Chiamate No comment provided by engineer. + + Can't delete user profile! + No comment provided by engineer. + Can't invite contact! Impossibile invitare il contatto! @@ -685,6 +707,10 @@ Controlla l'indirizzo del server e riprova. No comment provided by engineer. + + Chinese and Spanish interface + No comment provided by engineer. + Choose file Scegli file @@ -740,6 +766,10 @@ Conferma password nuova… No comment provided by engineer. + + Confirm password + No comment provided by engineer. + Connect Connetti @@ -770,11 +800,6 @@ Connettere via link una tantum? No comment provided by engineer. - - Connect via relay - Connetti via relay - No comment provided by engineer. - Connecting to server… Connessione al server… @@ -1133,6 +1158,11 @@ Eliminare il link? No comment provided by engineer. + + Delete member message? + Eliminare il messaggio del membro? + No comment provided by engineer. + Delete message? Eliminare il messaggio? @@ -1268,6 +1298,10 @@ Fallo dopo No comment provided by engineer. + + Don't show again + No comment provided by engineer. + Duplicate display name! Nome da mostrare doppio! @@ -1368,6 +1402,10 @@ Inserisci la password… No comment provided by engineer. + + Enter password above to show! + No comment provided by engineer. + Enter server manually Inserisci il server a mano @@ -1523,6 +1561,10 @@ Errore nel salvataggio della password nel portachiavi No comment provided by engineer. + + Error saving user password + No comment provided by engineer. + Error sending message Errore nell'invio del messaggio @@ -1543,6 +1585,11 @@ Errore nel cambio di profilo! No comment provided by engineer. + + Error updating group link + Errore nell'aggiornamento del link del gruppo + No comment provided by engineer. + Error updating message Errore nell'aggiornamento del messaggio @@ -1553,6 +1600,10 @@ Errore nell'aggiornamento delle impostazioni No comment provided by engineer. + + Error updating user privacy + No comment provided by engineer. + Error: %@ Errore: %@ @@ -1638,6 +1689,14 @@ Nome completo: No comment provided by engineer. + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + GIFs and stickers GIF e adesivi @@ -1713,6 +1772,10 @@ Messaggio del gruppo: notification + + Group moderation + No comment provided by engineer. + Group preferences Preferenze del gruppo @@ -1728,6 +1791,10 @@ Il profilo del gruppo è memorizzato sui dispositivi dei membri, non sui server. No comment provided by engineer. + + Group welcome message + No comment provided by engineer. + Group will be deleted for all members - this cannot be undone! Il gruppo verrà eliminato per tutti i membri. Non è reversibile! @@ -1748,6 +1815,14 @@ Nascosta No comment provided by engineer. + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + Hide Nascondi @@ -1758,6 +1833,10 @@ Nascondi la schermata dell'app nelle app recenti. No comment provided by engineer. + + Hide profile + No comment provided by engineer. + How SimpleX works Come funziona SimpleX @@ -1788,11 +1867,6 @@ Server ICE (uno per riga) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - Se il video non riesce a connettersi, cambia la fotocamera (frontale/posteriore) per risolvere. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. Se non potete incontrarvi di persona, **mostra il codice QR durante la videochiamata** o condividi il link. @@ -1905,6 +1979,11 @@ Istantaneamente No comment provided by engineer. + + Interface + Interfaccia + No comment provided by engineer. + Invalid connection link Link di connessione non valido @@ -2060,6 +2139,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Crea una connessione privata No comment provided by engineer. + + Make profile private! + No comment provided by engineer. + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). Assicurati che gli indirizzi dei server SMP siano nel formato corretto, uno per riga e non doppi (%@). @@ -2160,6 +2243,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.La migrazione è completata No comment provided by engineer. + + Moderate + Modera + chat item action + More improvements are coming soon! Altri miglioramenti sono in arrivo! @@ -2180,6 +2268,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Silenzia No comment provided by engineer. + + Muted when inactive! + No comment provided by engineer. + Name Nome @@ -2280,6 +2372,12 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Le notifiche sono disattivate! No comment provided by engineer. + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + Off (Local) Off (Locale) @@ -2405,6 +2503,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Intervallo PING No comment provided by engineer. + + Password to show + No comment provided by engineer. + Paste Incolla @@ -2455,6 +2557,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Controlla le preferenze tue e del tuo contatto. No comment provided by engineer. + + Please contact group admin. + Contatta l'amministratore del gruppo. + No comment provided by engineer. + Please enter correct current passphrase. Inserisci la password attuale corretta. @@ -2550,6 +2657,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Proteggi la schermata dell'app No comment provided by engineer. + + Protect your chat profiles with a password! + No comment provided by engineer. + Protocol timeout Scadenza del protocollo @@ -2745,6 +2856,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Salva e avvisa i membri del gruppo No comment provided by engineer. + + Save and update group profile + No comment provided by engineer. + Save archive Salva archivio @@ -2770,11 +2885,23 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Salvare le preferenze? No comment provided by engineer. + + Save profile password + No comment provided by engineer. + Save servers Salva i server No comment provided by engineer. + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + Saved WebRTC ICE servers will be removed I server WebRTC ICE salvati verranno rimossi @@ -2925,6 +3052,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Imposta la password per esportare No comment provided by engineer. + + Set the message shown to new members! + No comment provided by engineer. + Set timeouts for proxy/VPN Imposta scadenze per proxy/VPN @@ -2960,6 +3091,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Mostra codice QR No comment provided by engineer. + + Show calls in phone history + Mostra le chiamate nella cronologia del telefono + No comment provided by engineer. + Show preview Mostra anteprima @@ -3100,6 +3236,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Tocca il pulsante No comment provided by engineer. + + Tap to activate profile. + No comment provided by engineer. + Tap to join Tocca per entrare @@ -3185,9 +3325,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Il gruppo è completamente decentralizzato: è visibile solo ai membri. No comment provided by engineer. - - The microphone does not work when the app is in the background. - Il microfono non funziona quando l'app è in secondo piano. + + The message will be deleted for all members. + Il messaggio verrà eliminato per tutti i membri. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + Il messaggio sarà segnato come moderato per tutti i membri. No comment provided by engineer. @@ -3220,6 +3365,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Tema No comment provided by engineer. + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. Questa azione non può essere annullata: tutti i file e i media ricevuti e inviati verranno eliminati. Rimarranno le immagini a bassa risoluzione. @@ -3265,11 +3418,6 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Per creare una nuova connessione No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - Per evitare l'interruzione della chiamata, attiva la modalità Non disturbare. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. Per proteggere la privacy, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX ha identificatori per le code di messaggi, separati per ciascuno dei tuoi contatti. @@ -3292,6 +3440,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Per registrare un messaggio vocale, concedi l'autorizzazione all'uso del microfono. No comment provided by engineer. + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + To support instant push notifications the chat database has to be migrated. Per supportare le notifiche push istantanee, il database della chat deve essere migrato. @@ -3347,6 +3499,15 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Stato di migrazione imprevisto No comment provided by engineer. + + Unhide + No comment provided by engineer. + + + Unknown caller + Chiamante sconosciuto + callkit banner + Unknown database error: %@ Errore del database sconosciuto: %@ @@ -3357,6 +3518,11 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Errore sconosciuto No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + A meno che non utilizzi l'interfaccia di chiamata iOS, attiva la modalità Non disturbare per evitare interruzioni. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -3434,6 +3600,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Usa per connessioni nuove No comment provided by engineer. + + Use iOS call interface + Usa interfaccia di chiamata iOS + No comment provided by engineer. + Use server Usa il server @@ -3594,11 +3765,21 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Sei stato/a invitato/a al gruppo No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + Puoi accettare chiamate dalla schermata di blocco, senza l'autenticazione del dispositivo e dell'app. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. Puoi anche connetterti cliccando il link. Se si apre nel browser, clicca il pulsante **Apri nell'app mobile**. No comment provided by engineer. + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + You can now send messages to %@ Ora puoi inviare messaggi a %@ @@ -3629,6 +3810,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Puoi usare il markdown per formattare i messaggi: No comment provided by engineer. + + You can't send messages! + Non puoi inviare messaggi! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. Puoi controllare attraverso quale/i server **ricevere** i messaggi, i tuoi contatti – i server che usi per inviare loro i messaggi. @@ -3709,6 +3895,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Entrerai in un gruppo a cui si riferisce questo link e ti connetterai ai suoi membri. No comment provided by engineer. + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Non riceverai più messaggi da questo gruppo. La cronologia della chat verrà conservata. @@ -3769,11 +3959,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e I tuoi profili di chat No comment provided by engineer. - - Your chat profiles are stored locally, only on your device. - I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo. - No comment provided by engineer. - Your chats Le tue chat @@ -4238,6 +4423,11 @@ I server di SimpleX non possono vedere il tuo profilo. moderato moderated chat item + + moderated by %@ + moderato da %@ + No comment provided by engineer. + never mai @@ -4258,6 +4448,11 @@ I server di SimpleX non possono vedere il tuo profilo. nessuna crittografia e2e No comment provided by engineer. + + observer + osservatore + member role + off off @@ -4414,6 +4609,11 @@ I server di SimpleX non possono vedere il tuo profilo. sei stato/a invitato/a al gruppo No comment provided by engineer. + + you are observer + sei un osservatore + No comment provided by engineer. + you changed address hai cambiato indirizzo @@ -4468,7 +4668,7 @@ I server di SimpleX non possono vedere il tuo profilo.
- +
@@ -4500,7 +4700,7 @@ I server di SimpleX non possono vedere il tuo profilo.
- +
diff --git a/apps/ios/SimpleX Localizations/it.xcloc/contents.json b/apps/ios/SimpleX Localizations/it.xcloc/contents.json index 2f5551c96..9eddbec41 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/it.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "it", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/nb-NO.xcloc/Localized Contents/nb-NO.xliff b/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff similarity index 97% rename from apps/ios/SimpleX Localizations/nb-NO.xcloc/Localized Contents/nb-NO.xliff rename to apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff index 1f03d8f14..f576e2e2f 100644 --- a/apps/ios/SimpleX Localizations/nb-NO.xcloc/Localized Contents/nb-NO.xliff +++ b/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff @@ -1,33 +1,40 @@ - +
- +
- + + + No comment provided by engineer. - + + No comment provided by engineer. - + + No comment provided by engineer. - + + No comment provided by engineer. - + ( + ( No comment provided by engineer. - + (can be copied) + (galima nukopijuoti) No comment provided by engineer. @@ -38,16 +45,19 @@ #secret# No comment provided by engineer. - + %@ + %@ No comment provided by engineer. - + %@ %@ + %@ %@ No comment provided by engineer. - + %@ / %@ + %@ / %@ No comment provided by engineer. @@ -384,6 +394,10 @@ Already connected? No comment provided by engineer. + + Always use relay + No comment provided by engineer. + Answer call No comment provided by engineer. @@ -420,6 +434,10 @@ Authentication failed No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + No comment provided by engineer. + Authentication unavailable No comment provided by engineer. @@ -616,10 +634,6 @@ Connect via one-time link? No comment provided by engineer. - - Connect via relay - No comment provided by engineer. - Connecting to server… No comment provided by engineer. @@ -904,6 +918,10 @@ Delete link? No comment provided by engineer. + + Delete member message? + No comment provided by engineer. + Delete message? No comment provided by engineer. @@ -1232,6 +1250,10 @@ Error switching profile! No comment provided by engineer. + + Error updating group link + No comment provided by engineer. + Error updating message No comment provided by engineer. @@ -1428,10 +1450,6 @@ ICE servers (one per line) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. No comment provided by engineer. @@ -1521,6 +1539,10 @@ Instantly No comment provided by engineer. + + Interface + No comment provided by engineer. + Invalid connection link No comment provided by engineer. @@ -1722,6 +1744,10 @@ We will be adding server redundancy to prevent lost messages. Migration is completed No comment provided by engineer. + + Moderate + chat item action + More improvements are coming soon! No comment provided by engineer. @@ -1898,6 +1924,10 @@ We will be adding server redundancy to prevent lost messages. Open chat console authentication reason + + Open user profiles + authentication reason + Open-source protocol and code – anybody can run the servers. No comment provided by engineer. @@ -1954,6 +1984,10 @@ We will be adding server redundancy to prevent lost messages. Please check yours and your contact preferences. No comment provided by engineer. + + Please contact group admin. + No comment provided by engineer. + Please enter correct current passphrase. No comment provided by engineer. @@ -2358,6 +2392,10 @@ We will be adding server redundancy to prevent lost messages. Show QR code No comment provided by engineer. + + Show calls in phone history + No comment provided by engineer. + Show preview No comment provided by engineer. @@ -2538,8 +2576,12 @@ We will be adding server redundancy to prevent lost messages. The group is fully decentralized – it is visible only to the members. No comment provided by engineer. - - The microphone does not work when the app is in the background. + + The message will be deleted for all members. + No comment provided by engineer. + + + The message will be marked as moderated for all members. No comment provided by engineer. @@ -2602,10 +2644,6 @@ We will be adding server redundancy to prevent lost messages. To make a new connection No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. No comment provided by engineer. @@ -2667,6 +2705,10 @@ You will be prompted to complete authentication before this feature is enabled.< Unexpected migration state No comment provided by engineer. + + Unknown caller + callkit banner + Unknown database error: %@ No comment provided by engineer. @@ -2675,6 +2717,10 @@ You will be prompted to complete authentication before this feature is enabled.< Unknown error No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -2736,6 +2782,10 @@ To connect, please ask your contact to create another connection link and check Use for new connections No comment provided by engineer. + + Use iOS call interface + No comment provided by engineer. + Use server No comment provided by engineer. @@ -2864,6 +2914,10 @@ To connect, please ask your contact to create another connection link and check You are invited to group No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. No comment provided by engineer. @@ -2892,6 +2946,10 @@ To connect, please ask your contact to create another connection link and check You can use markdown to format messages: No comment provided by engineer. + + You can't send messages! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. No comment provided by engineer. @@ -3374,6 +3432,14 @@ SimpleX servers cannot see your profile. missed call call status + + moderated + moderated chat item + + + moderated by %@ + No comment provided by engineer. + never No comment provided by engineer. @@ -3390,6 +3456,10 @@ SimpleX servers cannot see your profile. no e2e encryption No comment provided by engineer. + + observer + member role + off enabled status @@ -3515,6 +3585,10 @@ SimpleX servers cannot see your profile. you are invited to group No comment provided by engineer. + + you are observer + No comment provided by engineer. + you changed address chat item text @@ -3557,9 +3631,9 @@ SimpleX servers cannot see your profile.
- +
- +
@@ -3584,9 +3658,9 @@ SimpleX servers cannot see your profile.
- +
- +
diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 02e58cb08..483d8395e 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -2,7 +2,7 @@
- +
@@ -385,6 +385,10 @@ Toevoegen aan een ander apparaat No comment provided by engineer. + + Add welcome message + No comment provided by engineer. + Admins can create the links to join groups. Beheerders kunnen de uitnodiging links naar groepen aanmaken. @@ -397,7 +401,7 @@ All chats and messages will be deleted - this cannot be undone! - Alle chats en berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! + Alle chats en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! No comment provided by engineer. @@ -407,7 +411,7 @@ All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. - Alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd. + Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd. No comment provided by engineer. @@ -480,6 +484,11 @@ Al verbonden? No comment provided by engineer. + + Always use relay + Verbinden via relais + No comment provided by engineer. + Answer call Beantwoord oproep @@ -502,7 +511,7 @@ App version: v%@ - App-versie: v%@ + App versie: v%@ No comment provided by engineer. @@ -520,11 +529,20 @@ Audio en video gesprekken No comment provided by engineer. + + Audio and video calls + No comment provided by engineer. + Authentication failed Verificatie mislukt No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + Verificatie is vereist voordat het gesprek wordt verbonden, maar u kunt gesprekken missen. + No comment provided by engineer. + Authentication unavailable Verificatie niet beschikbaar @@ -532,7 +550,7 @@ Auto-accept contact requests - Contactverzoeken automatisch accepteren + Contact verzoeken automatisch accepteren No comment provided by engineer. @@ -580,6 +598,10 @@ Oproepen No comment provided by engineer. + + Can't delete user profile! + No comment provided by engineer. + Can't invite contact! Kan contact niet uitnodigen! @@ -662,7 +684,7 @@ Chat is running - Chat is aktief + Chat is actief No comment provided by engineer. @@ -682,7 +704,11 @@ Check server address and try again. - Controleer het serveradres en probeer het opnieuw. + Controleer het server adres en probeer het opnieuw. + No comment provided by engineer. + + + Chinese and Spanish interface No comment provided by engineer. @@ -727,7 +753,7 @@ Configure ICE servers - ICE-servers configureren + ICE servers configureren No comment provided by engineer. @@ -740,6 +766,10 @@ Bevestig nieuw wachtwoord… No comment provided by engineer. + + Confirm password + No comment provided by engineer. + Connect Verbind @@ -770,11 +800,6 @@ Verbinden via een eenmalige link? No comment provided by engineer. - - Connect via relay - Verbinden via relais - No comment provided by engineer. - Connecting to server… Verbinden met de server… @@ -812,7 +837,7 @@ Connection timeout - Time-out verbinding + Timeout verbinding No comment provided by engineer. @@ -827,7 +852,7 @@ Contact and all messages will be deleted - this cannot be undone! - Contact en alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! + Contact en alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! No comment provided by engineer. @@ -1133,6 +1158,11 @@ Link verwijderen? No comment provided by engineer. + + Delete member message? + Bericht van lid verwijderen? + No comment provided by engineer. + Delete message? Verwijder bericht? @@ -1200,12 +1230,12 @@ Device authentication is disabled. Turning off SimpleX Lock. - Apparaatverificatie is uitgeschakeld. SimpleX Lock uitschakelen. + Apparaatverificatie is uitgeschakeld. SimpleX Vergrendelen uitschakelen. No comment provided by engineer. Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. - Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Lock inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld. + Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld. No comment provided by engineer. @@ -1225,7 +1255,7 @@ Disable SimpleX Lock - SimpleX Lock uitschakelen + SimpleX Vergrendelen uitschakelen authentication reason @@ -1268,6 +1298,10 @@ Doe het later No comment provided by engineer. + + Don't show again + No comment provided by engineer. + Duplicate display name! Dubbele weergavenaam! @@ -1290,12 +1324,12 @@ Enable SimpleX Lock - SimpleX Lock inschakelen + SimpleX Vergrendelen inschakelen authentication reason Enable TCP keep-alive - Schakel TCP-keep-alive in + Schakel TCP keep-alive in No comment provided by engineer. @@ -1368,6 +1402,10 @@ Voer wachtwoord in… No comment provided by engineer. + + Enter password above to show! + No comment provided by engineer. + Enter server manually Voer de server handmatig in @@ -1505,12 +1543,12 @@ Error saving ICE servers - Fout bij opslaan van ICE-servers + Fout bij opslaan van ICE servers No comment provided by engineer. Error saving SMP servers - Fout bij opslaan van SMP-servers + Fout bij opslaan van SMP servers No comment provided by engineer. @@ -1523,6 +1561,10 @@ Fout bij opslaan van wachtwoord in de keychain No comment provided by engineer. + + Error saving user password + No comment provided by engineer. + Error sending message Fout bij verzenden van bericht @@ -1543,6 +1585,11 @@ Fout bij wisselen van profiel! No comment provided by engineer. + + Error updating group link + Fout bij bijwerken van groep link + No comment provided by engineer. + Error updating message Fout bij updaten van bericht @@ -1553,6 +1600,10 @@ Fout bij bijwerken van instellingen No comment provided by engineer. + + Error updating user privacy + No comment provided by engineer. + Error: %@ Fout: %@ @@ -1570,7 +1621,7 @@ Exit without saving - Afsluiten zonder op te slaan + Afsluiten zonder opslaan No comment provided by engineer. @@ -1638,6 +1689,14 @@ Volledige naam: No comment provided by engineer. + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + GIFs and stickers GIF's en stickers @@ -1713,6 +1772,10 @@ Groep bericht: notification + + Group moderation + No comment provided by engineer. + Group preferences Groep voorkeuren @@ -1728,14 +1791,18 @@ Groep profiel wordt opgeslagen op de apparaten van de leden, niet op de servers. No comment provided by engineer. + + Group welcome message + No comment provided by engineer. + Group will be deleted for all members - this cannot be undone! - Groep wordt verwijderd voor alle leden - dit kan niet ongedaan worden gemaakt! + Groep wordt verwijderd voor alle leden, dit kan niet ongedaan worden gemaakt! No comment provided by engineer. Group will be deleted for you - this cannot be undone! - De groep wordt voor u verwijderd - dit kan niet ongedaan worden gemaakt! + De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt! No comment provided by engineer. @@ -1748,6 +1815,14 @@ Verborgen No comment provided by engineer. + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + Hide Verbergen @@ -1755,7 +1830,11 @@ Hide app screen in the recent apps. - App-scherm verbergen in de recente apps. + App scherm verbergen in de recente apps. + No comment provided by engineer. + + + Hide profile No comment provided by engineer. @@ -1785,12 +1864,7 @@ ICE servers (one per line) - ICE-servers (één per lijn) - No comment provided by engineer. - - - If the video fails to connect, flip the camera to resolve it. - Als de video geen verbinding kan maken, draait u de camera om om het probleem op te lossen. + ICE servers (één per lijn) No comment provided by engineer. @@ -1860,12 +1934,12 @@ Incognito mode is not supported here - your main profile will be sent to group members - Incognito modus wordt hier niet ondersteund - uw hoofdprofiel wordt naar groepsleden verzonden + Incognito modus wordt hier niet ondersteund, uw hoofdprofiel wordt naar groepsleden verzonden No comment provided by engineer. Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. - De incognito modus beschermt de privacy van uw hoofdprofielnaam en -afbeelding - voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt. + De incognito modus beschermt de privacy van uw hoofdprofielnaam en afbeelding, voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt. No comment provided by engineer. @@ -1905,6 +1979,11 @@ Meteen No comment provided by engineer. + + Interface + Interface + No comment provided by engineer. + Invalid connection link Ongeldige verbinding link @@ -1912,7 +1991,7 @@ Invalid server address! - Ongeldig serveradres! + Ongeldig server adres! No comment provided by engineer. @@ -2060,19 +2139,23 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Maak een privéverbinding No comment provided by engineer. + + Make profile private! + No comment provided by engineer. + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). - Zorg ervoor dat SMP-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn (%@). + Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@). No comment provided by engineer. Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. - Zorg ervoor dat WebRTC ICE-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn. + Zorg ervoor dat WebRTC ICE server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. No comment provided by engineer. Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* - Veel mensen vroegen: *als SimpleX geen gebruikers-ID's heeft, hoe kan het dan berichten bezorgen?* + Veel mensen vroegen: *als SimpleX geen gebruikers ID's heeft, hoe kan het dan berichten bezorgen?* No comment provided by engineer. @@ -2117,7 +2200,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Member will be removed from group - this cannot be undone! - Gebruiker wordt uit de groep verwijderd - dit kan niet ongedaan worden gemaakt! + Gebruiker wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt! No comment provided by engineer. @@ -2160,6 +2243,11 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Migratie is voltooid No comment provided by engineer. + + Moderate + Modereren + chat item action + More improvements are coming soon! Meer verbeteringen volgen snel! @@ -2180,6 +2268,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Dempen No comment provided by engineer. + + Muted when inactive! + No comment provided by engineer. + Name Naam @@ -2222,7 +2314,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. New member role - Nieuwe ledenrol + Nieuwe leden rol No comment provided by engineer. @@ -2280,6 +2372,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Meldingen zijn uitgeschakeld! No comment provided by engineer. + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + Off (Local) Uit (lokaal) @@ -2322,7 +2420,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. - Alleen client-apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**. + Alleen client apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**. No comment provided by engineer. @@ -2387,7 +2485,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Open-source protocol and code – anybody can run the servers. - Open-source protocol en code – iedereen kan de servers draaien. + Open-source protocol en code. Iedereen kan de servers draaien. No comment provided by engineer. @@ -2397,12 +2495,16 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. PING count - PING-telling + PING telling No comment provided by engineer. PING interval - PING-interval + PING interval + No comment provided by engineer. + + + Password to show No comment provided by engineer. @@ -2455,6 +2557,11 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Controleer de uwe en uw contact voorkeuren. No comment provided by engineer. + + Please contact group admin. + Neem contact op met de groep beheerder. + No comment provided by engineer. + Please enter correct current passphrase. Voer het juiste huidige wachtwoord in. @@ -2482,7 +2589,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Possibly, certificate fingerprint in server address is incorrect - Mogelijk is de certificaatvingerafdruk in het serveradres onjuist + Mogelijk is de certificaat vingerafdruk in het server adres onjuist server test error @@ -2497,7 +2604,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Preset server address - Vooraf ingesteld serveradres + Vooraf ingesteld server adres No comment provided by engineer. @@ -2550,14 +2657,18 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.App scherm verbergen No comment provided by engineer. + + Protect your chat profiles with a password! + No comment provided by engineer. + Protocol timeout - Protocol time-out + Protocol timeout No comment provided by engineer. Push notifications - Push-meldingen + Push meldingen No comment provided by engineer. @@ -2572,7 +2683,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Read more in our GitHub repository. - Lees meer in onze GitHub-repository. + Lees meer in onze GitHub repository. No comment provided by engineer. @@ -2617,12 +2728,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Relay server is only used if necessary. Another party can observe your IP address. - Relay-server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien. + Relay server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien. No comment provided by engineer. Relay server protects your IP address, but it can observe the duration of the call. - Relay-server beschermt uw IP-adres, maar kan de duur van het gesprek observeren. + Relay server beschermt uw IP-adres, maar kan de duur van het gesprek observeren. No comment provided by engineer. @@ -2745,6 +2856,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Opslaan en Groep leden melden No comment provided by engineer. + + Save and update group profile + No comment provided by engineer. + Save archive Bewaar archief @@ -2770,14 +2885,26 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Voorkeuren opslaan? No comment provided by engineer. + + Save profile password + No comment provided by engineer. + Save servers Bewaar servers No comment provided by engineer. + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + Saved WebRTC ICE servers will be removed - Opgeslagen WebRTC ICE-servers worden verwijderd + Opgeslagen WebRTC ICE servers worden verwijderd No comment provided by engineer. @@ -2827,7 +2954,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Send a live message - it will update for the recipient(s) as you type it - Stuur een live bericht - het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt + Stuur een live bericht, het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt No comment provided by engineer. @@ -2925,9 +3052,13 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Wachtwoord instellen om te exporteren No comment provided by engineer. + + Set the message shown to new members! + No comment provided by engineer. + Set timeouts for proxy/VPN - Stel time-outs in voor proxy/VPN + Stel timeouts in voor proxy/VPN No comment provided by engineer. @@ -2960,6 +3091,11 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Toon QR-code No comment provided by engineer. + + Show calls in phone history + Toon oproepen in de telefoongeschiedenis + No comment provided by engineer. + Show preview Toon voorbeeld @@ -2972,17 +3108,17 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. SimpleX Lock - SimpleX Lock + SimpleX Vergrendelen No comment provided by engineer. SimpleX Lock turned on - SimpleX Lock ingeschakeld + SimpleX Vergrendelen ingeschakeld No comment provided by engineer. SimpleX contact address - SimpleX-contactadres + SimpleX contact adres simplex link type @@ -3072,7 +3208,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. TCP connection timeout - Time-out van TCP-verbinding + Timeout van TCP-verbinding No comment provided by engineer. @@ -3100,6 +3236,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Tik op de knop No comment provided by engineer. + + Tap to activate profile. + No comment provided by engineer. + Tap to join Tik om mee te doen @@ -3152,12 +3292,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. The 1st platform without any user identifiers – private by design. - Het eerste platform zonder gebruikers-ID's - privé door ontwerp. + Het eerste platform zonder gebruikers ID's, privé door ontwerp. No comment provided by engineer. The app can notify you when you receive messages or contact requests - please open settings to enable. - De app kan u op de hoogte stellen wanneer u berichten of contactverzoeken ontvangt - open de instellingen om dit in te schakelen. + De app kan u op de hoogte stellen wanneer u berichten of contact verzoeken ontvangt - open de instellingen om dit in te schakelen. No comment provided by engineer. @@ -3185,9 +3325,14 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.De groep is volledig gedecentraliseerd – het is alleen zichtbaar voor de leden. No comment provided by engineer. - - The microphone does not work when the app is in the background. - De microfoon werkt niet als de app op de achtergrond staat. + + The message will be deleted for all members. + Het bericht wordt verwijderd voor alle leden. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + Het bericht wordt gemarkeerd als gemodereerd voor alle leden. No comment provided by engineer. @@ -3220,19 +3365,27 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Thema No comment provided by engineer. + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. - Deze actie kan niet ongedaan worden gemaakt - alle ontvangen en verzonden bestanden en media worden verwijderd. Foto's met een lage resolutie blijven behouden. + Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto's met een lage resolutie blijven behouden. No comment provided by engineer. This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. - Deze actie kan niet ongedaan worden gemaakt - de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren. + Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren. No comment provided by engineer. This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. - Deze actie kan niet ongedaan worden gemaakt - uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. + Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. No comment provided by engineer. @@ -3265,14 +3418,9 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Om een nieuwe verbinding te maken No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - Schakel de modus Niet storen in om te voorkomen dat het gesprek wordt onderbroken. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. - Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers-ID's die door alle andere platforms worden gebruikt, ID's voor berichtenwachtrijen, afzonderlijk voor elk van uw contacten. + Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers ID's die door alle andere platforms worden gebruikt, ID's voor berichten wachtrijen, afzonderlijk voor elk van uw contacten. No comment provided by engineer. @@ -3283,7 +3431,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. To protect your information, turn on SimpleX Lock. You will be prompted to complete authentication before this feature is enabled. - Schakel SimpleX Lock in om uw informatie te beschermen. + Schakel SimpleX Vergrendelen om uw informatie te beschermen. U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld. No comment provided by engineer. @@ -3292,6 +3440,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Geef toestemming om de microfoon te gebruiken om een spraakbericht op te nemen. No comment provided by engineer. + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + To support instant push notifications the chat database has to be migrated. Om directe push meldingen te ondersteunen, moet de chat database worden gemigreerd. @@ -3347,6 +3499,15 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Onverwachte migratiestatus No comment provided by engineer. + + Unhide + No comment provided by engineer. + + + Unknown caller + Onbekende beller + callkit banner + Unknown database error: %@ Onbekende database fout: %@ @@ -3357,10 +3518,15 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Onbekende fout No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + Schakel de modus Niet storen in om onderbrekingen te voorkomen, tenzij u de iOS-oproepinterface gebruikt. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. - Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn - meld het alstublieft. + Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft. Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft. No comment provided by engineer. @@ -3421,7 +3587,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Use SimpleX Chat servers? - SimpleX Chat-servers gebruiken? + SimpleX Chat servers gebruiken? No comment provided by engineer. @@ -3434,6 +3600,11 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Gebruik voor nieuwe verbindingen No comment provided by engineer. + + Use iOS call interface + De iOS-oproepinterface gebruiken + No comment provided by engineer. + Use server Gebruik server @@ -3451,7 +3622,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Using SimpleX Chat servers. - SimpleX Chat-servers gebruiken. + SimpleX Chat servers gebruiken. No comment provided by engineer. @@ -3516,7 +3687,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link WebRTC ICE servers - WebRTC ICE-servers + WebRTC ICE servers No comment provided by engineer. @@ -3594,11 +3765,21 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Je bent uitgenodigd voor de groep No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + U kunt oproepen van het vergrendelingsscherm accepteren, zonder apparaat- en app-verificatie. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. U kunt ook verbinding maken door op de link te klikken. Als het in de browser wordt geopend, klikt u op de knop **Openen in mobiele app**. No comment provided by engineer. + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + You can now send messages to %@ Je kunt nu berichten sturen naar %@ @@ -3606,17 +3787,17 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link You can set lock screen notification preview via settings. - U kunt een voorbeeld van een melding op het vergrendelscherm instellen via instellingen. + U kunt een voorbeeld van een melding op het vergrendeld scherm instellen via instellingen. No comment provided by engineer. 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. - U kunt een link of een QR-code delen - iedereen kan lid worden van de groep. U verliest geen leden van de groep als u deze later verwijdert. + U kunt een link of een QR-code delen. Iedereen kan lid worden van de groep. U verliest geen leden van de groep als u deze later verwijdert. No comment provided by engineer. You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. - U kunt uw adres delen als een link of als een QR-code - iedereen kan verbinding met u maken. U verliest uw contacten niet als u deze later verwijdert. + U kunt uw adres delen als een link of als een QR-code. Iedereen kan verbinding met u maken. U verliest uw contacten niet als u deze later verwijdert. No comment provided by engineer. @@ -3629,9 +3810,14 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link U kunt markdown gebruiken voor opmaak in berichten: No comment provided by engineer. + + You can't send messages! + Je kunt geen berichten versturen! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. - U bepaalt via welke server(s) de berichten **ontvangen**, uw contacten - de servers die u gebruikt om ze berichten te sturen. + U bepaalt via welke server(s) de berichten **ontvangen**, uw contacten de servers die u gebruikt om ze berichten te sturen. No comment provided by engineer. @@ -3646,7 +3832,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link You have to enter passphrase every time the app starts - it is not stored on the device. - U moet elke keer dat de app start het wachtwoord invoeren - deze wordt niet op het apparaat opgeslagen. + U moet elke keer dat de app start het wachtwoord invoeren, deze wordt niet op het apparaat opgeslagen. No comment provided by engineer. @@ -3709,6 +3895,10 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link U wordt lid van een groep waarnaar deze link verwijst en maakt verbinding met de groepsleden. No comment provided by engineer. + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Je ontvangt geen berichten meer van deze groep. Je gesprek geschiedenis blijft behouden. @@ -3726,17 +3916,17 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Your ICE servers - Uw ICE-servers + Uw ICE servers No comment provided by engineer. Your SMP servers - Uw SMP-servers + Uw SMP servers No comment provided by engineer. Your SimpleX contact address - Uw SimpleX-contactadres + Uw SimpleX contact adres No comment provided by engineer. @@ -3751,7 +3941,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Your chat database is not encrypted - set passphrase to encrypt it. - Uw chat database is niet versleuteld - stel een wachtwoord in om deze te versleutelen. + Uw chat database is niet versleuteld, stel een wachtwoord in om deze te versleutelen. No comment provided by engineer. @@ -3766,22 +3956,17 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Your chat profiles - Je chat profielen - No comment provided by engineer. - - - Your chat profiles are stored locally, only on your device. - Uw chat profielen worden lokaal opgeslagen, alleen op uw apparaat. + Uw chat profielen No comment provided by engineer. Your chats - Je gesprekken + Jouw gesprekken No comment provided by engineer. Your contact address - Uw contactadres + Uw contact adres No comment provided by engineer. @@ -3830,7 +4015,7 @@ U kunt deze verbinding verbreken en het contact verwijderen (en later proberen m Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile. Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten. -SimpleX-servers kunnen uw profiel niet zien. +SimpleX servers kunnen uw profiel niet zien. No comment provided by engineer. @@ -3855,7 +4040,7 @@ SimpleX-servers kunnen uw profiel niet zien. Your server address - Uw serveradres + Uw server adres No comment provided by engineer. @@ -3915,12 +4100,12 @@ SimpleX-servers kunnen uw profiel niet zien. bad message ID - Onjuiste bericht-ID + Onjuiste bericht ID integrity error chat item bad message hash - Onjuiste bericht-hash + Onjuiste bericht hash integrity error chat item @@ -4045,7 +4230,7 @@ SimpleX-servers kunnen uw profiel niet zien. contact has no e2e encryption - contact heeft geen e2e-encryptie + contact heeft geen e2e versleuteling No comment provided by engineer. @@ -4125,17 +4310,17 @@ SimpleX-servers kunnen uw profiel niet zien. iOS Keychain is used to securely store passphrase - it allows receiving push notifications. - iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan - het maakt het ontvangen van push meldingen mogelijk. + iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan, het maakt het ontvangen van push meldingen mogelijk. No comment provided by engineer. iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications. - iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord hebt gewijzigd - hiermee kunt u push meldingen ontvangen. + iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord hebt gewijzigd, hiermee kunt u push meldingen ontvangen. No comment provided by engineer. incognito via contact address link - incognito via link naar contactadres + incognito via contact adres link chat list item description @@ -4238,6 +4423,11 @@ SimpleX-servers kunnen uw profiel niet zien. gemodereerd moderated chat item + + moderated by %@ + gemodereerd door %@ + No comment provided by engineer. + never nooit @@ -4255,9 +4445,14 @@ SimpleX-servers kunnen uw profiel niet zien. no e2e encryption - geen e2e-encryptie + geen e2e versleuteling No comment provided by engineer. + + observer + waarnemer + member role + off uit @@ -4266,12 +4461,12 @@ SimpleX-servers kunnen uw profiel niet zien. offered %@ - aangeboden %@ + voorgesteld %@ feature offered item offered %1$@: %2$@ - aangeboden %1$@: %2$@ + voorgesteld %1$@: %2$@ feature offered item @@ -4366,7 +4561,7 @@ SimpleX-servers kunnen uw profiel niet zien. via contact address link - via contactadres link + via contact adres link chat list item description @@ -4414,6 +4609,11 @@ SimpleX-servers kunnen uw profiel niet zien. je bent uitgenodigd voor de groep No comment provided by engineer. + + you are observer + jij bent waarnemer + No comment provided by engineer. + you changed address je bent van adres veranderd @@ -4468,7 +4668,7 @@ SimpleX-servers kunnen uw profiel niet zien.
- +
@@ -4500,7 +4700,7 @@ SimpleX-servers kunnen uw profiel niet zien.
- +
diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/contents.json b/apps/ios/SimpleX Localizations/nl.xcloc/contents.json index 3838b4c3b..97b70e2d1 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/nl.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "nl", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff deleted file mode 100644 index 66d3be414..000000000 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ /dev/null @@ -1,3554 +0,0 @@ - - - -
- -
- - - - - No comment provided by engineer. - - - - No comment provided by engineer. - - - - No comment provided by engineer. - - - - No comment provided by engineer. - - - ( - No comment provided by engineer. - - - (can be copied) - No comment provided by engineer. - - - !1 colored! - No comment provided by engineer. - - - #secret# - No comment provided by engineer. - - - %@ - No comment provided by engineer. - - - %@ %@ - No comment provided by engineer. - - - %@ / %@ - No comment provided by engineer. - - - %@ is connected! - notification title - - - %@ is not verified - No comment provided by engineer. - - - %@ is verified - No comment provided by engineer. - - - %@ wants to connect! - notification title - - - %d days - message ttl - - - %d hours - message ttl - - - %d min - message ttl - - - %d months - message ttl - - - %d sec - message ttl - - - %d skipped message(s) - integrity error chat item - - - %lld - No comment provided by engineer. - - - %lld %@ - No comment provided by engineer. - - - %lld contact(s) selected - No comment provided by engineer. - - - %lld file(s) with total size of %@ - No comment provided by engineer. - - - %lld members - No comment provided by engineer. - - - %lld second(s) - No comment provided by engineer. - - - %lldd - No comment provided by engineer. - - - %lldh - No comment provided by engineer. - - - %lldk - No comment provided by engineer. - - - %lldm - No comment provided by engineer. - - - %lldmth - No comment provided by engineer. - - - %llds - No comment provided by engineer. - - - %lldw - No comment provided by engineer. - - - ( - No comment provided by engineer. - - - ) - No comment provided by engineer. - - - **Add new contact**: to create your one-time QR Code or link for your contact. - No comment provided by engineer. - - - **Create link / QR code** for your contact to use. - No comment provided by engineer. - - - **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. - No comment provided by engineer. - - - **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). - No comment provided by engineer. - - - **Paste received link** or open it in the browser and tap **Open in mobile app**. - No comment provided by engineer. - - - **Please note**: you will NOT be able to recover or change passphrase if you lose it. - No comment provided by engineer. - - - **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. - No comment provided by engineer. - - - **Scan QR code**: to connect to your contact in person or via video call. - No comment provided by engineer. - - - **Warning**: Instant push notifications require passphrase saved in Keychain. - No comment provided by engineer. - - - **e2e encrypted** audio call - No comment provided by engineer. - - - **e2e encrypted** video call - No comment provided by engineer. - - - \*bold* - No comment provided by engineer. - - - , - No comment provided by engineer. - - - . - No comment provided by engineer. - - - 1 day - message ttl - - - 1 hour - message ttl - - - 1 month - message ttl - - - 1 week - message ttl - - - 2 weeks - message ttl - - - 6 - No comment provided by engineer. - - - : - No comment provided by engineer. - - - A new contact - notification title - - - A random profile will be sent to the contact that you received this link from - No comment provided by engineer. - - - A random profile will be sent to your contact - No comment provided by engineer. - - - A separate TCP connection will be used **for each chat profile you have in the app**. - No comment provided by engineer. - - - A separate TCP connection will be used **for each contact and group member**. -**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. - No comment provided by engineer. - - - About SimpleX - No comment provided by engineer. - - - About SimpleX Chat - No comment provided by engineer. - - - Accent color - No comment provided by engineer. - - - Accept - accept contact request via notification - accept incoming call via notification - - - Accept contact - No comment provided by engineer. - - - Accept contact request from %@? - notification body - - - Accept incognito - No comment provided by engineer. - - - Accept requests - No comment provided by engineer. - - - Add preset servers - No comment provided by engineer. - - - Add profile - No comment provided by engineer. - - - Add servers by scanning QR codes. - No comment provided by engineer. - - - Add server… - No comment provided by engineer. - - - Add to another device - No comment provided by engineer. - - - Admins can create the links to join groups. - No comment provided by engineer. - - - Advanced network settings - No comment provided by engineer. - - - All chats and messages will be deleted - this cannot be undone! - No comment provided by engineer. - - - All group members will remain connected. - No comment provided by engineer. - - - All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. - No comment provided by engineer. - - - All your contacts will remain connected - No comment provided by engineer. - - - Allow - No comment provided by engineer. - - - Allow disappearing messages only if your contact allows it to you. - No comment provided by engineer. - - - Allow irreversible message deletion only if your contact allows it to you. - No comment provided by engineer. - - - Allow sending direct messages to members. - No comment provided by engineer. - - - Allow sending disappearing messages. - No comment provided by engineer. - - - Allow to irreversibly delete sent messages. - No comment provided by engineer. - - - Allow to send voice messages. - No comment provided by engineer. - - - Allow voice messages only if your contact allows them. - No comment provided by engineer. - - - Allow voice messages? - No comment provided by engineer. - - - Allow your contacts to irreversibly delete sent messages. - No comment provided by engineer. - - - Allow your contacts to send disappearing messages. - No comment provided by engineer. - - - Allow your contacts to send voice messages. - No comment provided by engineer. - - - Already connected? - No comment provided by engineer. - - - Answer call - No comment provided by engineer. - - - App build: %@ - No comment provided by engineer. - - - App icon - No comment provided by engineer. - - - App version - No comment provided by engineer. - - - App version: v%@ - No comment provided by engineer. - - - Appearance - No comment provided by engineer. - - - Attach - No comment provided by engineer. - - - Audio & video calls - No comment provided by engineer. - - - Authentication failed - No comment provided by engineer. - - - Authentication unavailable - No comment provided by engineer. - - - Auto-accept contact requests - No comment provided by engineer. - - - Auto-accept images - No comment provided by engineer. - - - Automatically - No comment provided by engineer. - - - Back - No comment provided by engineer. - - - Both you and your contact can irreversibly delete sent messages. - No comment provided by engineer. - - - Both you and your contact can send disappearing messages. - No comment provided by engineer. - - - Both you and your contact can send voice messages. - No comment provided by engineer. - - - Call already ended! - No comment provided by engineer. - - - Calls - No comment provided by engineer. - - - Can't invite contact! - No comment provided by engineer. - - - Can't invite contacts! - No comment provided by engineer. - - - Cancel - No comment provided by engineer. - - - Cannot access keychain to save database password - No comment provided by engineer. - - - Cannot receive file - No comment provided by engineer. - - - Change - No comment provided by engineer. - - - Change database passphrase? - No comment provided by engineer. - - - Change member role? - No comment provided by engineer. - - - Change receiving address - No comment provided by engineer. - - - Change receiving address? - No comment provided by engineer. - - - Change role - No comment provided by engineer. - - - Chat archive - No comment provided by engineer. - - - Chat console - No comment provided by engineer. - - - Chat database - No comment provided by engineer. - - - Chat database deleted - No comment provided by engineer. - - - Chat database imported - No comment provided by engineer. - - - Chat is running - No comment provided by engineer. - - - Chat is stopped - No comment provided by engineer. - - - Chat preferences - No comment provided by engineer. - - - Chats - No comment provided by engineer. - - - Check server address and try again. - No comment provided by engineer. - - - Choose file - No comment provided by engineer. - - - Choose from library - No comment provided by engineer. - - - Clear - No comment provided by engineer. - - - Clear conversation - No comment provided by engineer. - - - Clear conversation? - No comment provided by engineer. - - - Clear verification - No comment provided by engineer. - - - Colors - No comment provided by engineer. - - - Compare security codes with your contacts. - No comment provided by engineer. - - - Configure ICE servers - No comment provided by engineer. - - - Confirm - No comment provided by engineer. - - - Confirm new passphrase… - No comment provided by engineer. - - - Connect - server test step - - - Connect via contact link? - No comment provided by engineer. - - - Connect via group link? - No comment provided by engineer. - - - Connect via link - No comment provided by engineer. - - - Connect via link / QR code - No comment provided by engineer. - - - Connect via one-time link? - No comment provided by engineer. - - - Connect via relay - No comment provided by engineer. - - - Connecting to server… - No comment provided by engineer. - - - Connecting to server… (error: %@) - No comment provided by engineer. - - - Connection - No comment provided by engineer. - - - Connection error - No comment provided by engineer. - - - Connection error (AUTH) - No comment provided by engineer. - - - Connection request - No comment provided by engineer. - - - Connection request sent! - No comment provided by engineer. - - - Connection timeout - No comment provided by engineer. - - - Contact allows - No comment provided by engineer. - - - Contact already exists - No comment provided by engineer. - - - Contact and all messages will be deleted - this cannot be undone! - No comment provided by engineer. - - - Contact hidden: - notification - - - Contact is connected - notification - - - Contact is not connected yet! - No comment provided by engineer. - - - Contact name - No comment provided by engineer. - - - Contact preferences - No comment provided by engineer. - - - Contact requests - No comment provided by engineer. - - - Contacts can mark messages for deletion; you will be able to view them. - No comment provided by engineer. - - - Copy - chat item action - - - Core built at: %@ - No comment provided by engineer. - - - Core version: v%@ - No comment provided by engineer. - - - Create - No comment provided by engineer. - - - Create address - No comment provided by engineer. - - - Create group link - No comment provided by engineer. - - - Create link - No comment provided by engineer. - - - Create one-time invitation link - No comment provided by engineer. - - - Create queue - server test step - - - Create secret group - No comment provided by engineer. - - - Create your profile - No comment provided by engineer. - - - Created on %@ - No comment provided by engineer. - - - Current passphrase… - No comment provided by engineer. - - - Currently maximum supported file size is %@. - No comment provided by engineer. - - - Dark - No comment provided by engineer. - - - Data - No comment provided by engineer. - - - Database ID - No comment provided by engineer. - - - Database encrypted! - No comment provided by engineer. - - - Database encryption passphrase will be updated and stored in the keychain. - - No comment provided by engineer. - - - Database encryption passphrase will be updated. - - No comment provided by engineer. - - - Database error - No comment provided by engineer. - - - Database is encrypted using a random passphrase, you can change it. - No comment provided by engineer. - - - Database is encrypted using a random passphrase. Please change it before exporting. - No comment provided by engineer. - - - Database passphrase - No comment provided by engineer. - - - Database passphrase & export - No comment provided by engineer. - - - Database passphrase is different from saved in the keychain. - No comment provided by engineer. - - - Database passphrase is required to open chat. - No comment provided by engineer. - - - Database will be encrypted and the passphrase stored in the keychain. - - No comment provided by engineer. - - - Database will be encrypted. - - No comment provided by engineer. - - - Database will be migrated when the app restarts - No comment provided by engineer. - - - Decentralized - No comment provided by engineer. - - - Delete - chat item action - - - Delete Contact - No comment provided by engineer. - - - Delete address - No comment provided by engineer. - - - Delete address? - No comment provided by engineer. - - - Delete after - No comment provided by engineer. - - - Delete all files - No comment provided by engineer. - - - Delete archive - No comment provided by engineer. - - - Delete chat archive? - No comment provided by engineer. - - - Delete chat profile? - No comment provided by engineer. - - - Delete connection - No comment provided by engineer. - - - Delete contact - No comment provided by engineer. - - - Delete contact? - No comment provided by engineer. - - - Delete database - No comment provided by engineer. - - - Delete files & media - No comment provided by engineer. - - - Delete files and media? - No comment provided by engineer. - - - Delete files for all chat profiles - No comment provided by engineer. - - - Delete for everyone - chat feature - - - Delete for me - No comment provided by engineer. - - - Delete group - No comment provided by engineer. - - - Delete group? - No comment provided by engineer. - - - Delete invitation - No comment provided by engineer. - - - Delete link - No comment provided by engineer. - - - Delete link? - No comment provided by engineer. - - - Delete message? - No comment provided by engineer. - - - Delete messages - No comment provided by engineer. - - - Delete messages after - No comment provided by engineer. - - - Delete old database - No comment provided by engineer. - - - Delete old database? - No comment provided by engineer. - - - Delete pending connection - No comment provided by engineer. - - - Delete pending connection? - No comment provided by engineer. - - - Delete queue - server test step - - - Delete user profile? - No comment provided by engineer. - - - Description - No comment provided by engineer. - - - Develop - No comment provided by engineer. - - - Developer tools - No comment provided by engineer. - - - Device - No comment provided by engineer. - - - Device authentication is disabled. Turning off SimpleX Lock. - No comment provided by engineer. - - - Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. - No comment provided by engineer. - - - Direct messages - chat feature - - - Direct messages between members are prohibited in this group. - No comment provided by engineer. - - - Disable SimpleX Lock - authentication reason - - - Disappearing messages - chat feature - - - Disappearing messages are prohibited in this chat. - No comment provided by engineer. - - - Disappearing messages are prohibited in this group. - No comment provided by engineer. - - - Disconnect - server test step - - - Display name - No comment provided by engineer. - - - Display name: - No comment provided by engineer. - - - Do NOT use SimpleX for emergency calls. - No comment provided by engineer. - - - Do it later - No comment provided by engineer. - - - Edit - chat item action - - - Edit group profile - No comment provided by engineer. - - - Enable - No comment provided by engineer. - - - Enable SimpleX Lock - authentication reason - - - Enable TCP keep-alive - No comment provided by engineer. - - - Enable automatic message deletion? - No comment provided by engineer. - - - Enable instant notifications? - No comment provided by engineer. - - - Enable notifications - No comment provided by engineer. - - - Enable periodic notifications? - No comment provided by engineer. - - - Encrypt - No comment provided by engineer. - - - Encrypt database? - No comment provided by engineer. - - - Encrypted database - No comment provided by engineer. - - - Encrypted message or another event - notification - - - Encrypted message: database error - notification - - - Encrypted message: keychain error - notification - - - Encrypted message: no passphrase - notification - - - Encrypted message: unexpected error - notification - - - Enter correct passphrase. - No comment provided by engineer. - - - Enter passphrase… - No comment provided by engineer. - - - Enter server manually - No comment provided by engineer. - - - Error - No comment provided by engineer. - - - Error accepting contact request - No comment provided by engineer. - - - Error accessing database file - No comment provided by engineer. - - - Error adding member(s) - No comment provided by engineer. - - - Error changing address - No comment provided by engineer. - - - Error changing role - No comment provided by engineer. - - - Error changing setting - No comment provided by engineer. - - - Error creating address - No comment provided by engineer. - - - Error creating group - No comment provided by engineer. - - - Error creating group link - No comment provided by engineer. - - - Error deleting chat database - No comment provided by engineer. - - - Error deleting chat! - No comment provided by engineer. - - - Error deleting connection - No comment provided by engineer. - - - Error deleting contact - No comment provided by engineer. - - - Error deleting database - No comment provided by engineer. - - - Error deleting old database - No comment provided by engineer. - - - Error deleting token - No comment provided by engineer. - - - Error deleting user profile - No comment provided by engineer. - - - Error enabling notifications - No comment provided by engineer. - - - Error encrypting database - No comment provided by engineer. - - - Error exporting chat database - No comment provided by engineer. - - - Error importing chat database - No comment provided by engineer. - - - Error joining group - No comment provided by engineer. - - - Error receiving file - No comment provided by engineer. - - - Error removing member - No comment provided by engineer. - - - Error saving ICE servers - No comment provided by engineer. - - - Error saving SMP servers - No comment provided by engineer. - - - Error saving group profile - No comment provided by engineer. - - - Error saving passphrase to keychain - No comment provided by engineer. - - - Error sending message - No comment provided by engineer. - - - Error starting chat - No comment provided by engineer. - - - Error stopping chat - No comment provided by engineer. - - - Error updating message - No comment provided by engineer. - - - Error updating settings - No comment provided by engineer. - - - Error: %@ - No comment provided by engineer. - - - Error: URL is invalid - No comment provided by engineer. - - - Error: no database file - No comment provided by engineer. - - - Exit without saving - No comment provided by engineer. - - - Export database - No comment provided by engineer. - - - Export error: - No comment provided by engineer. - - - Exported database archive. - No comment provided by engineer. - - - Exporting database archive... - No comment provided by engineer. - - - Failed to remove passphrase - No comment provided by engineer. - - - File will be received when your contact is online, please wait or check later! - No comment provided by engineer. - - - File: %@ - No comment provided by engineer. - - - Files & media - No comment provided by engineer. - - - For console - No comment provided by engineer. - - - Full link - No comment provided by engineer. - - - Full name (optional) - No comment provided by engineer. - - - Full name: - No comment provided by engineer. - - - GIFs and stickers - No comment provided by engineer. - - - Group - No comment provided by engineer. - - - Group display name - No comment provided by engineer. - - - Group full name (optional) - No comment provided by engineer. - - - Group image - No comment provided by engineer. - - - Group invitation - No comment provided by engineer. - - - Group invitation expired - No comment provided by engineer. - - - Group invitation is no longer valid, it was removed by sender. - No comment provided by engineer. - - - Group link - No comment provided by engineer. - - - Group links - No comment provided by engineer. - - - Group members can irreversibly delete sent messages. - No comment provided by engineer. - - - Group members can send direct messages. - No comment provided by engineer. - - - Group members can send disappearing messages. - No comment provided by engineer. - - - Group members can send voice messages. - No comment provided by engineer. - - - Group message: - notification - - - Group preferences - No comment provided by engineer. - - - Group profile - No comment provided by engineer. - - - Group profile is stored on members' devices, not on the servers. - No comment provided by engineer. - - - Group will be deleted for all members - this cannot be undone! - No comment provided by engineer. - - - Group will be deleted for you - this cannot be undone! - No comment provided by engineer. - - - Help - No comment provided by engineer. - - - Hidden - No comment provided by engineer. - - - Hide - chat item action - - - Hide app screen in the recent apps. - No comment provided by engineer. - - - How SimpleX works - No comment provided by engineer. - - - How it works - No comment provided by engineer. - - - How to - No comment provided by engineer. - - - How to use it - No comment provided by engineer. - - - How to use your servers - No comment provided by engineer. - - - ICE servers (one per line) - No comment provided by engineer. - - - If the video fails to connect, flip the camera to resolve it. - No comment provided by engineer. - - - If you can't meet in person, **show QR code in the video call**, or share the link. - No comment provided by engineer. - - - If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link. - No comment provided by engineer. - - - If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app). - No comment provided by engineer. - - - Ignore - No comment provided by engineer. - - - Image will be received when your contact is online, please wait or check later! - No comment provided by engineer. - - - Immune to spam and abuse - No comment provided by engineer. - - - Import - No comment provided by engineer. - - - Import chat database? - No comment provided by engineer. - - - Import database - No comment provided by engineer. - - - Improved privacy and security - No comment provided by engineer. - - - Improved server configuration - No comment provided by engineer. - - - Incognito - No comment provided by engineer. - - - Incognito mode - No comment provided by engineer. - - - Incognito mode is not supported here - your main profile will be sent to group members - No comment provided by engineer. - - - Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. - No comment provided by engineer. - - - Incoming audio call - notification - - - Incoming call - notification - - - Incoming video call - notification - - - Incorrect security code! - No comment provided by engineer. - - - Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) - No comment provided by engineer. - - - Instant push notifications will be hidden! - - No comment provided by engineer. - - - Instantly - No comment provided by engineer. - - - Invalid connection link - No comment provided by engineer. - - - Invalid server address! - No comment provided by engineer. - - - Invitation expired! - No comment provided by engineer. - - - Invite members - No comment provided by engineer. - - - Invite to group - No comment provided by engineer. - - - Irreversible message deletion - No comment provided by engineer. - - - Irreversible message deletion is prohibited in this chat. - No comment provided by engineer. - - - Irreversible message deletion is prohibited in this group. - No comment provided by engineer. - - - It allows having many anonymous connections without any shared data between them in a single chat profile. - No comment provided by engineer. - - - It can happen when: -1. The messages expire on the server if they were not received for 30 days, -2. The server you use to receive the messages from this contact was updated and restarted. -3. The connection is compromised. -Please connect to the developers via Settings to receive the updates about the servers. -We will be adding server redundancy to prevent lost messages. - No comment provided by engineer. - - - It seems like you are already connected via this link. If it is not the case, there was an error (%@). - No comment provided by engineer. - - - Join - No comment provided by engineer. - - - Join group - No comment provided by engineer. - - - Join incognito - No comment provided by engineer. - - - Joining group - No comment provided by engineer. - - - Keychain error - No comment provided by engineer. - - - LIVE - No comment provided by engineer. - - - Large file! - No comment provided by engineer. - - - Leave - No comment provided by engineer. - - - Leave group - No comment provided by engineer. - - - Leave group? - No comment provided by engineer. - - - Light - No comment provided by engineer. - - - Limitations - No comment provided by engineer. - - - Live message! - No comment provided by engineer. - - - Live messages - No comment provided by engineer. - - - Local name - No comment provided by engineer. - - - Local profile data only - No comment provided by engineer. - - - Make a private connection - No comment provided by engineer. - - - Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). - No comment provided by engineer. - - - Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. - No comment provided by engineer. - - - Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* - No comment provided by engineer. - - - Mark deleted for everyone - No comment provided by engineer. - - - Mark read - No comment provided by engineer. - - - Mark verified - No comment provided by engineer. - - - Markdown in messages - No comment provided by engineer. - - - Max 30 seconds, received instantly. - No comment provided by engineer. - - - Member - No comment provided by engineer. - - - Member role will be changed to "%@". All group members will be notified. - No comment provided by engineer. - - - Member role will be changed to "%@". The member will receive a new invitation. - No comment provided by engineer. - - - Member will be removed from group - this cannot be undone! - No comment provided by engineer. - - - Message delivery error - No comment provided by engineer. - - - Message text - No comment provided by engineer. - - - Messages - No comment provided by engineer. - - - Migrating database archive... - No comment provided by engineer. - - - Migration error: - No comment provided by engineer. - - - Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). - No comment provided by engineer. - - - Migration is completed - No comment provided by engineer. - - - Most likely this contact has deleted the connection with you. - No comment provided by engineer. - - - Mute - No comment provided by engineer. - - - Name - No comment provided by engineer. - - - Network & servers - No comment provided by engineer. - - - Network settings - No comment provided by engineer. - - - Network status - No comment provided by engineer. - - - New contact request - notification - - - New contact: - notification - - - New database archive - No comment provided by engineer. - - - New in %@ - No comment provided by engineer. - - - New member role - No comment provided by engineer. - - - New message - notification - - - New passphrase… - No comment provided by engineer. - - - No - No comment provided by engineer. - - - No contacts selected - No comment provided by engineer. - - - No contacts to add - No comment provided by engineer. - - - No device token! - No comment provided by engineer. - - - Group not found! - No comment provided by engineer. - - - No permission to record voice message - No comment provided by engineer. - - - No received or sent files - No comment provided by engineer. - - - Notifications - No comment provided by engineer. - - - Notifications are disabled! - No comment provided by engineer. - - - Off (Local) - No comment provided by engineer. - - - Ok - No comment provided by engineer. - - - Old database - No comment provided by engineer. - - - Old database archive - No comment provided by engineer. - - - One-time invitation link - No comment provided by engineer. - - - Onion hosts will be required for connection. Requires enabling VPN. - No comment provided by engineer. - - - Onion hosts will be used when available. Requires enabling VPN. - No comment provided by engineer. - - - Onion hosts will not be used. - No comment provided by engineer. - - - Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. - No comment provided by engineer. - - - Only group owners can change group preferences. - No comment provided by engineer. - - - Only group owners can enable voice messages. - No comment provided by engineer. - - - Only you can irreversibly delete messages (your contact can mark them for deletion). - No comment provided by engineer. - - - Only you can send disappearing messages. - No comment provided by engineer. - - - Only you can send voice messages. - No comment provided by engineer. - - - Only your contact can irreversibly delete messages (you can mark them for deletion). - No comment provided by engineer. - - - Only your contact can send disappearing messages. - No comment provided by engineer. - - - Only your contact can send voice messages. - No comment provided by engineer. - - - Open Settings - No comment provided by engineer. - - - Open chat - No comment provided by engineer. - - - Open chat console - authentication reason - - - Open-source protocol and code – anybody can run the servers. - No comment provided by engineer. - - - Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red. - No comment provided by engineer. - - - PING count - No comment provided by engineer. - - - PING interval - No comment provided by engineer. - - - Paste - No comment provided by engineer. - - - Paste image - No comment provided by engineer. - - - Paste received link - No comment provided by engineer. - - - Paste the link you received into the box below to connect with your contact. - No comment provided by engineer. - - - People can connect to you only via the links you share. - No comment provided by engineer. - - - Periodically - No comment provided by engineer. - - - Please ask your contact to enable sending voice messages. - No comment provided by engineer. - - - Please check that you used the correct link or ask your contact to send you another one. - No comment provided by engineer. - - - Please check your network connection with %@ and try again. - No comment provided by engineer. - - - Please check yours and your contact preferences. - No comment provided by engineer. - - - Please enter correct current passphrase. - No comment provided by engineer. - - - Please enter the previous password after restoring database backup. This action can not be undone. - No comment provided by engineer. - - - Please restart the app and migrate the database to enable push notifications. - No comment provided by engineer. - - - Please store passphrase securely, you will NOT be able to access chat if you lose it. - No comment provided by engineer. - - - Please store passphrase securely, you will NOT be able to change it if you lose it. - No comment provided by engineer. - - - Possibly, certificate fingerprint in server address is incorrect - server test error - - - Preset server - No comment provided by engineer. - - - Preset server address - No comment provided by engineer. - - - Privacy & security - No comment provided by engineer. - - - Privacy redefined - No comment provided by engineer. - - - Profile and server connections - No comment provided by engineer. - - - Profile image - No comment provided by engineer. - - - Prohibit irreversible message deletion. - No comment provided by engineer. - - - Prohibit sending direct messages to members. - No comment provided by engineer. - - - Prohibit sending disappearing messages. - No comment provided by engineer. - - - Prohibit sending voice messages. - No comment provided by engineer. - - - Protect app screen - No comment provided by engineer. - - - Protocol timeout - No comment provided by engineer. - - - Push notifications - No comment provided by engineer. - - - Rate the app - No comment provided by engineer. - - - Read - No comment provided by engineer. - - - Read more in our GitHub repository. - No comment provided by engineer. - - - Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme). - No comment provided by engineer. - - - Received file event - notification - - - Receiving via - No comment provided by engineer. - - - Recipients see updates as you type them. - No comment provided by engineer. - - - Reject - reject incoming call via notification - - - Reject contact (sender NOT notified) - No comment provided by engineer. - - - Reject contact request - No comment provided by engineer. - - - Relay server is only used if necessary. Another party can observe your IP address. - No comment provided by engineer. - - - Relay server protects your IP address, but it can observe the duration of the call. - No comment provided by engineer. - - - Remove - No comment provided by engineer. - - - Remove member - No comment provided by engineer. - - - Remove member? - No comment provided by engineer. - - - Remove passphrase from keychain? - No comment provided by engineer. - - - Reply - chat item action - - - Required - No comment provided by engineer. - - - Reset - No comment provided by engineer. - - - Reset colors - No comment provided by engineer. - - - Reset to defaults - No comment provided by engineer. - - - Restart the app to create a new chat profile - No comment provided by engineer. - - - Restart the app to use imported chat database - No comment provided by engineer. - - - Restore - No comment provided by engineer. - - - Restore database backup - No comment provided by engineer. - - - Restore database backup? - No comment provided by engineer. - - - Restore database error - No comment provided by engineer. - - - Reveal - chat item action - - - Revert - No comment provided by engineer. - - - Role - No comment provided by engineer. - - - Run chat - No comment provided by engineer. - - - SMP servers - No comment provided by engineer. - - - Save - chat item action - - - Save (and notify contacts) - No comment provided by engineer. - - - Save and notify contact - No comment provided by engineer. - - - Save and notify group members - No comment provided by engineer. - - - Save archive - No comment provided by engineer. - - - Save group profile - No comment provided by engineer. - - - Save passphrase and open chat - No comment provided by engineer. - - - Save passphrase in Keychain - No comment provided by engineer. - - - Save preferences? - No comment provided by engineer. - - - Save servers - No comment provided by engineer. - - - Saved WebRTC ICE servers will be removed - No comment provided by engineer. - - - Scan QR code - No comment provided by engineer. - - - Scan code - No comment provided by engineer. - - - Scan security code from your contact's app. - No comment provided by engineer. - - - Scan server QR code - No comment provided by engineer. - - - Search - No comment provided by engineer. - - - Secure queue - server test step - - - Security assessment - No comment provided by engineer. - - - Security code - No comment provided by engineer. - - - Send - No comment provided by engineer. - - - Send a live message - it will update for the recipient(s) as you type it - No comment provided by engineer. - - - Send direct message - No comment provided by engineer. - - - Send link previews - No comment provided by engineer. - - - Send live message - No comment provided by engineer. - - - Send notifications - No comment provided by engineer. - - - Send notifications: - No comment provided by engineer. - - - Send questions and ideas - No comment provided by engineer. - - - Send them from gallery or custom keyboards. - No comment provided by engineer. - - - Sender cancelled file transfer. - No comment provided by engineer. - - - Sender may have deleted the connection request. - No comment provided by engineer. - - - Sending via - No comment provided by engineer. - - - Sent file event - notification - - - Sent messages will be deleted after set time. - No comment provided by engineer. - - - Server requires authorization to create queues, check password - server test error - - - Server test failed! - No comment provided by engineer. - - - Servers - No comment provided by engineer. - - - Set 1 day - No comment provided by engineer. - - - Set contact name… - No comment provided by engineer. - - - Set group preferences - No comment provided by engineer. - - - Set passphrase to export - No comment provided by engineer. - - - Set timeouts for proxy/VPN - No comment provided by engineer. - - - Settings - No comment provided by engineer. - - - Share - chat item action - - - Share invitation link - No comment provided by engineer. - - - Share link - No comment provided by engineer. - - - Share one-time invitation link - No comment provided by engineer. - - - Show QR code - No comment provided by engineer. - - - Show preview - No comment provided by engineer. - - - SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). - No comment provided by engineer. - - - SimpleX Lock - No comment provided by engineer. - - - SimpleX Lock turned on - No comment provided by engineer. - - - SimpleX contact address - simplex link type - - - SimpleX encrypted message or connection event - notification - - - SimpleX group link - simplex link type - - - SimpleX links - No comment provided by engineer. - - - SimpleX one-time invitation - simplex link type - - - Skip - No comment provided by engineer. - - - Skipped messages - No comment provided by engineer. - - - Somebody - notification title - - - Start a new chat - No comment provided by engineer. - - - Start chat - No comment provided by engineer. - - - Start migration - No comment provided by engineer. - - - Stop - No comment provided by engineer. - - - Stop SimpleX - authentication reason - - - Stop chat to enable database actions - No comment provided by engineer. - - - Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. - No comment provided by engineer. - - - Stop chat? - No comment provided by engineer. - - - Support SimpleX Chat - No comment provided by engineer. - - - System - No comment provided by engineer. - - - TCP connection timeout - No comment provided by engineer. - - - TCP_KEEPCNT - No comment provided by engineer. - - - TCP_KEEPIDLE - No comment provided by engineer. - - - TCP_KEEPINTVL - No comment provided by engineer. - - - Take picture - No comment provided by engineer. - - - Tap button - No comment provided by engineer. - - - Tap to join - No comment provided by engineer. - - - Tap to join incognito - No comment provided by engineer. - - - Tap to start a new chat - No comment provided by engineer. - - - Test failed at step %@. - server test failure - - - Test server - No comment provided by engineer. - - - Test servers - No comment provided by engineer. - - - Tests failed! - No comment provided by engineer. - - - Thank you for installing SimpleX Chat! - No comment provided by engineer. - - - The 1st platform without any user identifiers – private by design. - No comment provided by engineer. - - - The app can notify you when you receive messages or contact requests - please open settings to enable. - No comment provided by engineer. - - - The attempt to change database passphrase was not completed. - No comment provided by engineer. - - - The connection you accepted will be cancelled! - No comment provided by engineer. - - - The contact you shared this link with will NOT be able to connect! - No comment provided by engineer. - - - The created archive is available via app Settings / Database / Old database archive. - No comment provided by engineer. - - - The group is fully decentralized – it is visible only to the members. - No comment provided by engineer. - - - The microphone does not work when the app is in the background. - No comment provided by engineer. - - - The next generation of private messaging - No comment provided by engineer. - - - The old database was not removed during the migration, it can be deleted. - No comment provided by engineer. - - - The profile is only shared with your contacts. - No comment provided by engineer. - - - The sender will NOT be notified - No comment provided by engineer. - - - The servers for new connections of your current chat profile **%@**. - No comment provided by engineer. - - - Theme - No comment provided by engineer. - - - This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. - No comment provided by engineer. - - - This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. - No comment provided by engineer. - - - This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. - No comment provided by engineer. - - - This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member). - No comment provided by engineer. - - - This group no longer exists. - No comment provided by engineer. - - - This setting applies to messages in your current chat profile **%@**. - No comment provided by engineer. - - - To ask any questions and to receive updates: - No comment provided by engineer. - - - To find the profile used for an incognito connection, tap the contact or group name on top of the chat. - No comment provided by engineer. - - - To make a new connection - No comment provided by engineer. - - - To prevent the call interruption, enable Do Not Disturb mode. - No comment provided by engineer. - - - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. - No comment provided by engineer. - - - To protect your information, turn on SimpleX Lock. -You will be prompted to complete authentication before this feature is enabled. - No comment provided by engineer. - - - To record voice message please grant permission to use Microphone. - No comment provided by engineer. - - - To support instant push notifications the chat database has to be migrated. - No comment provided by engineer. - - - To verify end-to-end encryption with your contact compare (or scan) the code on your devices. - No comment provided by engineer. - - - Transfer images faster - No comment provided by engineer. - - - Transport isolation - No comment provided by engineer. - - - Trying to connect to the server used to receive messages from this contact (error: %@). - No comment provided by engineer. - - - Trying to connect to the server used to receive messages from this contact. - No comment provided by engineer. - - - Turn off - No comment provided by engineer. - - - Turn off notifications? - No comment provided by engineer. - - - Turn on - No comment provided by engineer. - - - Unable to record voice message - No comment provided by engineer. - - - Unexpected error: %@ - No comment provided by engineer. - - - Unexpected migration state - No comment provided by engineer. - - - Unknown database error: %@ - No comment provided by engineer. - - - Unknown error - No comment provided by engineer. - - - Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. -To connect, please ask your contact to create another connection link and check that you have a stable network connection. - No comment provided by engineer. - - - Unlock - authentication reason - - - Unmute - No comment provided by engineer. - - - Unread - No comment provided by engineer. - - - Update - No comment provided by engineer. - - - Update .onion hosts setting? - No comment provided by engineer. - - - Update database passphrase - No comment provided by engineer. - - - Update network settings? - No comment provided by engineer. - - - Update transport isolation mode? - No comment provided by engineer. - - - Updating settings will re-connect the client to all servers. - No comment provided by engineer. - - - Updating this setting will re-connect the client to all servers. - No comment provided by engineer. - - - Use .onion hosts - No comment provided by engineer. - - - Use SimpleX Chat servers? - No comment provided by engineer. - - - Use chat - No comment provided by engineer. - - - Use for new connections - No comment provided by engineer. - - - Use server - No comment provided by engineer. - - - User profile - No comment provided by engineer. - - - Using .onion hosts requires compatible VPN provider. - No comment provided by engineer. - - - Using SimpleX Chat servers. - No comment provided by engineer. - - - Verify connection security - No comment provided by engineer. - - - Verify security code - No comment provided by engineer. - - - Via browser - No comment provided by engineer. - - - Video call - No comment provided by engineer. - - - View security code - No comment provided by engineer. - - - Voice messages - chat feature - - - Voice messages are prohibited in this chat. - No comment provided by engineer. - - - Voice messages are prohibited in this group. - No comment provided by engineer. - - - Voice messages prohibited! - No comment provided by engineer. - - - Voice message… - No comment provided by engineer. - - - Waiting for file - No comment provided by engineer. - - - Waiting for image - No comment provided by engineer. - - - WebRTC ICE servers - No comment provided by engineer. - - - Welcome %@! - No comment provided by engineer. - - - Welcome message - No comment provided by engineer. - - - What's new - No comment provided by engineer. - - - When available - No comment provided by engineer. - - - When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. - No comment provided by engineer. - - - With optional welcome message. - No comment provided by engineer. - - - Wrong database passphrase - No comment provided by engineer. - - - Wrong passphrase! - No comment provided by engineer. - - - You - No comment provided by engineer. - - - You accepted connection - No comment provided by engineer. - - - You allow - No comment provided by engineer. - - - You are already connected to %@. - No comment provided by engineer. - - - You are connected to the server used to receive messages from this contact. - No comment provided by engineer. - - - You are invited to group - No comment provided by engineer. - - - You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. - No comment provided by engineer. - - - You can now send messages to %@ - notification body - - - You can set lock screen notification preview via settings. - No comment provided by engineer. - - - 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. - No comment provided by engineer. - - - You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. - No comment provided by engineer. - - - You can start chat via app Settings / Database or by restarting the app - No comment provided by engineer. - - - You can use markdown to format messages: - No comment provided by engineer. - - - You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. - No comment provided by engineer. - - - You could not be verified; please try again. - No comment provided by engineer. - - - You have no chats - No comment provided by engineer. - - - You have to enter passphrase every time the app starts - it is not stored on the device. - No comment provided by engineer. - - - You invited your contact - No comment provided by engineer. - - - You joined this group - No comment provided by engineer. - - - You joined this group. Connecting to inviting group member. - No comment provided by engineer. - - - You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts. - No comment provided by engineer. - - - You need to allow your contact to send voice messages to be able to send them. - No comment provided by engineer. - - - You rejected group invitation - No comment provided by engineer. - - - You sent group invitation - No comment provided by engineer. - - - You will be connected to group when the group host's device is online, please wait or check later! - No comment provided by engineer. - - - You will be connected when your connection request is accepted, please wait or check later! - No comment provided by engineer. - - - You will be connected when your contact's device is online, please wait or check later! - No comment provided by engineer. - - - You will be required to authenticate when you start or resume the app after 30 seconds in background. - No comment provided by engineer. - - - You will join a group this link refers to and connect to its group members. - No comment provided by engineer. - - - You will stop receiving messages from this group. Chat history will be preserved. - No comment provided by engineer. - - - You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile - No comment provided by engineer. - - - You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed - No comment provided by engineer. - - - Your ICE servers - No comment provided by engineer. - - - Your SMP servers - No comment provided by engineer. - - - Your SimpleX contact address - No comment provided by engineer. - - - Your calls - No comment provided by engineer. - - - Your chat database - No comment provided by engineer. - - - Your chat database is not encrypted - set passphrase to encrypt it. - No comment provided by engineer. - - - Your chat profile - No comment provided by engineer. - - - Your chat profile will be sent to group members - No comment provided by engineer. - - - Your chat profile will be sent to your contact - No comment provided by engineer. - - - Your chat profiles - No comment provided by engineer. - - - Your chat profiles are stored locally, only on your device. - No comment provided by engineer. - - - Your chats - No comment provided by engineer. - - - Your contact address - No comment provided by engineer. - - - Your contact can scan it from the app. - No comment provided by engineer. - - - Your contact needs to be online for the connection to complete. -You can cancel this connection and remove the contact (and try later with a new link). - No comment provided by engineer. - - - Your contact sent a file that is larger than currently supported maximum size (%@). - No comment provided by engineer. - - - Your contacts can allow full message deletion. - No comment provided by engineer. - - - Your current chat database will be DELETED and REPLACED with the imported one. - No comment provided by engineer. - - - Your current profile - No comment provided by engineer. - - - Your preferences - No comment provided by engineer. - - - Your privacy - No comment provided by engineer. - - - Your profile is stored on your device and shared only with your contacts. -SimpleX servers cannot see your profile. - No comment provided by engineer. - - - Your profile will be sent to the contact that you received this link from - No comment provided by engineer. - - - Your profile, contacts and delivered messages are stored on your device. - No comment provided by engineer. - - - Your random profile - No comment provided by engineer. - - - Your server - No comment provided by engineer. - - - Your server address - No comment provided by engineer. - - - Your settings - No comment provided by engineer. - - - [Contribute](https://github.com/simplex-chat/simplex-chat#contribute) - No comment provided by engineer. - - - [Send us email](mailto:chat@simplex.chat) - No comment provided by engineer. - - - [Star on GitHub](https://github.com/simplex-chat/simplex-chat) - No comment provided by engineer. - - - \_italic_ - No comment provided by engineer. - - - \`a + b` - No comment provided by engineer. - - - above, then choose: - No comment provided by engineer. - - - accepted call - call status - - - admin - member role - - - always - pref value - - - audio call (not e2e encrypted) - No comment provided by engineer. - - - bad message ID - integrity error chat item - - - bad message hash - integrity error chat item - - - bold - No comment provided by engineer. - - - call error - call status - - - call in progress - call status - - - calling… - call status - - - cancelled %@ - feature offered item - - - changed address for you - chat item text - - - changed role of %1$@ to %2$@ - rcv group event chat item - - - changed your role to %@ - rcv group event chat item - - - changing address for %@... - chat item text - - - changing address... - chat item text - - - colored - No comment provided by engineer. - - - complete - No comment provided by engineer. - - - connect to SimpleX Chat developers. - No comment provided by engineer. - - - connected - No comment provided by engineer. - - - connecting - No comment provided by engineer. - - - connecting (accepted) - No comment provided by engineer. - - - connecting (announced) - No comment provided by engineer. - - - connecting (introduced) - No comment provided by engineer. - - - connecting (introduction invitation) - No comment provided by engineer. - - - connecting call… - call status - - - connecting… - chat list item title - - - connection established - chat list item title (it should not be shown - - - connection:%@ - connection information - - - contact has e2e encryption - No comment provided by engineer. - - - contact has no e2e encryption - No comment provided by engineer. - - - creator - No comment provided by engineer. - - - default (%@) - pref value - - - deleted - deleted chat item - - - deleted group - rcv group event chat item - - - direct - connection level description - - - duplicate message - integrity error chat item - - - e2e encrypted - No comment provided by engineer. - - - enabled - enabled status - - - enabled for contact - enabled status - - - enabled for you - enabled status - - - ended - No comment provided by engineer. - - - ended call %@ - call status - - - error - No comment provided by engineer. - - - group deleted - No comment provided by engineer. - - - group profile updated - snd group event chat item - - - iOS Keychain is used to securely store passphrase - it allows receiving push notifications. - No comment provided by engineer. - - - iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications. - No comment provided by engineer. - - - incognito via contact address link - chat list item description - - - incognito via group link - chat list item description - - - incognito via one-time link - chat list item description - - - indirect (%d) - connection level description - - - invalid chat - invalid chat data - - - invalid chat data - No comment provided by engineer. - - - invalid data - invalid chat item - - - invitation to group %@ - group name - - - invited - No comment provided by engineer. - - - invited %@ - rcv group event chat item - - - invited to connect - chat list item title - - - invited via your group link - rcv group event chat item - - - italic - No comment provided by engineer. - - - join as %@ - No comment provided by engineer. - - - left - rcv group event chat item - - - marked deleted - marked deleted chat item preview text - - - member - member role - - - connected - rcv group event chat item - - - message received - notification - - - missed call - call status - - - never - No comment provided by engineer. - - - new message - notification - - - no - pref value - - - no e2e encryption - No comment provided by engineer. - - - off - enabled status - group pref value - - - offered %@ - feature offered item - - - offered %1$@: %2$@ - feature offered item - - - on - group pref value - - - or chat with the developers - No comment provided by engineer. - - - owner - member role - - - peer-to-peer - No comment provided by engineer. - - - received answer… - No comment provided by engineer. - - - received confirmation… - No comment provided by engineer. - - - rejected call - call status - - - removed - No comment provided by engineer. - - - removed %@ - rcv group event chat item - - - removed you - rcv group event chat item - - - sec - network option - - - secret - No comment provided by engineer. - - - starting… - No comment provided by engineer. - - - strike - No comment provided by engineer. - - - this contact - notification title - - - unknown - connection info - - - updated group profile - rcv group event chat item - - - v%@ (%@) - No comment provided by engineer. - - - via contact address link - chat list item description - - - via group link - chat list item description - - - via one-time link - chat list item description - - - via relay - No comment provided by engineer. - - - video call (not e2e encrypted) - No comment provided by engineer. - - - waiting for answer… - No comment provided by engineer. - - - waiting for confirmation… - No comment provided by engineer. - - - wants to connect to you! - No comment provided by engineer. - - - yes - pref value - - - you are invited to group - No comment provided by engineer. - - - you changed address - chat item text - - - you changed address for %@ - chat item text - - - you changed role for yourself to %@ - snd group event chat item - - - you changed role of %1$@ to %2$@ - snd group event chat item - - - you left - snd group event chat item - - - you removed %@ - snd group event chat item - - - you shared one-time link - chat list item description - - - you shared one-time link incognito - chat list item description - - - you: - No comment provided by engineer. - - - \~strike~ - No comment provided by engineer. - - -
- -
- -
- - - SimpleX - Bundle name - - - SimpleX needs camera access to scan QR codes to connect to other users and for video calls. - Privacy - Camera Usage Description - - - SimpleX uses Face ID for local authentication - Privacy - Face ID Usage Description - - - SimpleX needs microphone access for audio and video calls, and to record voice messages. - Privacy - Microphone Usage Description - - - SimpleX needs access to Photo Library for saving captured and received media - Privacy - Photo Library Additions Usage Description - - -
- -
- -
- - - SimpleX NSE - Bundle display name - - - SimpleX NSE - Bundle name - - - Copyright © 2022 SimpleX Chat. All rights reserved. - Copyright (human-readable) - - -
-
diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index cf98d9066..1c469687b 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -2,7 +2,7 @@
- +
@@ -385,6 +385,10 @@ Добавить на другое устройство No comment provided by engineer. + + Add welcome message + No comment provided by engineer. + Admins can create the links to join groups. Админы могут создать ссылки для вступления в группу. @@ -480,6 +484,11 @@ Соединение уже установлено? No comment provided by engineer. + + Always use relay + Всегда соединяться через relay + No comment provided by engineer. + Answer call Принять звонок @@ -520,11 +529,19 @@ Аудио- и видеозвонки No comment provided by engineer. + + Audio and video calls + No comment provided by engineer. + Authentication failed Ошибка аутентификации No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + No comment provided by engineer. + Authentication unavailable Аутентификация недоступна @@ -580,6 +597,10 @@ Звонки No comment provided by engineer. + + Can't delete user profile! + No comment provided by engineer. + Can't invite contact! Нельзя пригласить контакт! @@ -685,6 +706,10 @@ Проверьте адрес сервера и попробуйте снова. No comment provided by engineer. + + Chinese and Spanish interface + No comment provided by engineer. + Choose file Выбрать файл @@ -740,6 +765,10 @@ Подтвердите новый пароль… No comment provided by engineer. + + Confirm password + No comment provided by engineer. + Connect Соединиться @@ -770,11 +799,6 @@ Соединиться через одноразовую ссылку? No comment provided by engineer. - - Connect via relay - Соединяться через сервер (relay) - No comment provided by engineer. - Connecting to server… Устанавливается соединение с сервером… @@ -1133,6 +1157,11 @@ Удалить ссылку? No comment provided by engineer. + + Delete member message? + Удалить сообщение участника? + No comment provided by engineer. + Delete message? Удалить сообщение? @@ -1268,6 +1297,10 @@ Отложить No comment provided by engineer. + + Don't show again + No comment provided by engineer. + Duplicate display name! Имя профиля уже используется! @@ -1368,6 +1401,10 @@ Введите пароль… No comment provided by engineer. + + Enter password above to show! + No comment provided by engineer. + Enter server manually Ввести сервер вручную @@ -1523,6 +1560,10 @@ Ошибка сохранения пароля в Keychain No comment provided by engineer. + + Error saving user password + No comment provided by engineer. + Error sending message Ошибка при отправке сообщения @@ -1543,6 +1584,11 @@ Ошибка выбора профиля! No comment provided by engineer. + + Error updating group link + Ошибка обновления ссылки группы + No comment provided by engineer. + Error updating message Ошибка при обновлении сообщения @@ -1553,6 +1599,10 @@ Ошибка при сохранении настроек сети No comment provided by engineer. + + Error updating user privacy + No comment provided by engineer. + Error: %@ Ошибка: %@ @@ -1638,6 +1688,14 @@ Полное имя: No comment provided by engineer. + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + GIFs and stickers ГИФ файлы и стикеры @@ -1713,6 +1771,10 @@ Групповое сообщение: notification + + Group moderation + No comment provided by engineer. + Group preferences Предпочтения группы @@ -1728,6 +1790,10 @@ Профиль группы хранится на устройствах членов, а не на серверах. No comment provided by engineer. + + Group welcome message + No comment provided by engineer. + Group will be deleted for all members - this cannot be undone! Группа будет удалена для всех членов - это действие нельзя отменить! @@ -1748,6 +1814,14 @@ Скрытое No comment provided by engineer. + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + Hide Спрятать @@ -1758,6 +1832,10 @@ Скрыть экран приложения. No comment provided by engineer. + + Hide profile + No comment provided by engineer. + How SimpleX works Как SimpleX работает @@ -1788,11 +1866,6 @@ ICE серверы (один на строке) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - Если видео не соединилось, переключите камеру. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. Если вы не можете встретиться лично, вы можете **показать QR код во время видеозвонка**, или поделиться ссылкой. @@ -1905,6 +1978,10 @@ Мгновенно No comment provided by engineer. + + Interface + No comment provided by engineer. + Invalid connection link Ошибка в ссылке контакта @@ -2060,6 +2137,10 @@ We will be adding server redundancy to prevent lost messages. Добавьте контакт No comment provided by engineer. + + Make profile private! + No comment provided by engineer. + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). Пожалуйста, проверьте, что адреса SMP серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@). @@ -2160,6 +2241,11 @@ We will be adding server redundancy to prevent lost messages. Перемещение данных завершено No comment provided by engineer. + + Moderate + Модерировать + chat item action + More improvements are coming soon! Дополнительные улучшения скоро! @@ -2180,6 +2266,10 @@ We will be adding server redundancy to prevent lost messages. Без звука No comment provided by engineer. + + Muted when inactive! + No comment provided by engineer. + Name Имя @@ -2280,6 +2370,12 @@ We will be adding server redundancy to prevent lost messages. Уведомления выключены No comment provided by engineer. + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + Off (Local) Выключить (Локальные) @@ -2382,6 +2478,7 @@ We will be adding server redundancy to prevent lost messages. Open user profiles + Открыть профили пользователя authentication reason @@ -2404,6 +2501,10 @@ We will be adding server redundancy to prevent lost messages. Интервал PING No comment provided by engineer. + + Password to show + No comment provided by engineer. + Paste Вставить @@ -2454,6 +2555,11 @@ We will be adding server redundancy to prevent lost messages. Проверьте предпочтения вашего контакта. No comment provided by engineer. + + Please contact group admin. + Пожалуйста, свяжитесь с админом группы. + No comment provided by engineer. + Please enter correct current passphrase. Пожалуйста, введите правильный пароль. @@ -2549,6 +2655,10 @@ We will be adding server redundancy to prevent lost messages. Защитить экран приложения No comment provided by engineer. + + Protect your chat profiles with a password! + No comment provided by engineer. + Protocol timeout Таймаут протокола @@ -2744,6 +2854,10 @@ We will be adding server redundancy to prevent lost messages. Сохранить и уведомить членов группы No comment provided by engineer. + + Save and update group profile + No comment provided by engineer. + Save archive Сохранить архив @@ -2769,11 +2883,23 @@ We will be adding server redundancy to prevent lost messages. Сохранить предпочтения? No comment provided by engineer. + + Save profile password + No comment provided by engineer. + Save servers Сохранить серверы No comment provided by engineer. + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + Saved WebRTC ICE servers will be removed Сохраненные WebRTC ICE серверы будут удалены @@ -2924,6 +3050,10 @@ We will be adding server redundancy to prevent lost messages. Установите пароль No comment provided by engineer. + + Set the message shown to new members! + No comment provided by engineer. + Set timeouts for proxy/VPN Установить таймауты для прокси/VPN @@ -2959,6 +3089,10 @@ We will be adding server redundancy to prevent lost messages. Показать QR код No comment provided by engineer. + + Show calls in phone history + No comment provided by engineer. + Show preview Показывать уведомления @@ -3099,6 +3233,10 @@ We will be adding server redundancy to prevent lost messages. Нажмите кнопку No comment provided by engineer. + + Tap to activate profile. + No comment provided by engineer. + Tap to join Нажмите, чтобы вступить @@ -3184,9 +3322,14 @@ We will be adding server redundancy to prevent lost messages. Группа полностью децентрализована — она видна только членам. No comment provided by engineer. - - The microphone does not work when the app is in the background. - Микрофон не работает, когда приложение в фоновом режиме. + + The message will be deleted for all members. + Сообщение будет удалено для всех членов группы. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + Сообщение будет помечено как удаленное для всех членов группы. No comment provided by engineer. @@ -3219,6 +3362,14 @@ We will be adding server redundancy to prevent lost messages. Тема No comment provided by engineer. + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. Это действие нельзя отменить — все полученные и отправленные файлы будут удалены. Изображения останутся в низком разрешении. @@ -3264,11 +3415,6 @@ We will be adding server redundancy to prevent lost messages. Чтобы соединиться No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - Чтобы избежать прерывания звонков, включите режим Не Беспокоить. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. Чтобы защитить вашу конфиденциальность, вместо ID пользователей, которые есть в других платформах, SimpleX использует ID для очередей сообщений, разные для каждого контакта. @@ -3291,6 +3437,10 @@ You will be prompted to complete authentication before this feature is enabled.< Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону. No comment provided by engineer. + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + To support instant push notifications the chat database has to be migrated. Для поддержки мгновенный доставки уведомлений данные чата должны быть перемещены. @@ -3346,6 +3496,14 @@ You will be prompted to complete authentication before this feature is enabled.< Неожиданная ошибка при перемещении данных чата No comment provided by engineer. + + Unhide + No comment provided by engineer. + + + Unknown caller + callkit banner + Unknown database error: %@ Неизвестная ошибка базы данных: %@ @@ -3356,6 +3514,10 @@ You will be prompted to complete authentication before this feature is enabled.< Неизвестная ошибка No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -3433,6 +3595,10 @@ To connect, please ask your contact to create another connection link and check Использовать для новых соединений No comment provided by engineer. + + Use iOS call interface + No comment provided by engineer. + Use server Использовать сервер @@ -3593,11 +3759,20 @@ To connect, please ask your contact to create another connection link and check Вы приглашены в группу No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. Вы также можете соединиться, открыв ссылку. Если ссылка откроется в браузере, нажмите кнопку **Open in mobile app**. No comment provided by engineer. + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + You can now send messages to %@ Вы теперь можете отправлять сообщения %@ @@ -3628,6 +3803,11 @@ To connect, please ask your contact to create another connection link and check Вы можете форматировать сообщения: No comment provided by engineer. + + You can't send messages! + Вы не можете отправлять сообщения! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. Вы определяете через какие серверы вы **получаете сообщения**, ваши контакты - серверы, которые вы используете для отправки. @@ -3708,6 +3888,10 @@ To connect, please ask your contact to create another connection link and check Вы вступите в группу, на которую ссылается эта ссылка, и соединитесь с её членами. No comment provided by engineer. + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Вы перестанете получать сообщения от этой группы. История чата будет сохранена. @@ -3768,11 +3952,6 @@ To connect, please ask your contact to create another connection link and check Ваши профили чата No comment provided by engineer. - - Your chat profiles are stored locally, only on your device. - Ваши профили чата хранятся локально, только на вашем устройстве. - No comment provided by engineer. - Your chats Ваши чаты @@ -4234,8 +4413,14 @@ SimpleX серверы не могут получить доступ к ваше moderated + удалено moderated chat item + + moderated by %@ + удалено %@ + No comment provided by engineer. + never никогда @@ -4256,6 +4441,11 @@ SimpleX серверы не могут получить доступ к ваше нет e2e шифрования No comment provided by engineer. + + observer + читатель + member role + off нет @@ -4412,6 +4602,11 @@ SimpleX серверы не могут получить доступ к ваше вы приглашены в группу No comment provided by engineer. + + you are observer + только чтение сообщений + No comment provided by engineer. + you changed address вы поменяли адрес @@ -4466,7 +4661,7 @@ SimpleX серверы не могут получить доступ к ваше
- +
@@ -4498,7 +4693,7 @@ SimpleX серверы не могут получить доступ к ваше
- +
diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/contents.json b/apps/ios/SimpleX Localizations/ru.xcloc/contents.json index 3d390e587..17cca3182 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/contents.json +++ b/apps/ios/SimpleX Localizations/ru.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "SimpleX.xcodeproj", "targetLocale" : "ru", "toolInfo" : { - "toolBuildNumber" : "14A309", + "toolBuildNumber" : "14C18", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "14.0" + "toolVersion" : "14.2" }, "version" : "1.0" } \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff similarity index 97% rename from apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff rename to apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 14bac53f7..81f326f76 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -1,8 +1,8 @@ - +
- +
@@ -384,6 +384,10 @@ Already connected? No comment provided by engineer. + + Always use relay + No comment provided by engineer. + Answer call No comment provided by engineer. @@ -420,6 +424,10 @@ Authentication failed No comment provided by engineer. + + Authentication is required before the call is connected, but you may miss calls. + No comment provided by engineer. + Authentication unavailable No comment provided by engineer. @@ -616,10 +624,6 @@ Connect via one-time link? No comment provided by engineer. - - Connect via relay - No comment provided by engineer. - Connecting to server… No comment provided by engineer. @@ -904,6 +908,10 @@ Delete link? No comment provided by engineer. + + Delete member message? + No comment provided by engineer. + Delete message? No comment provided by engineer. @@ -1232,6 +1240,10 @@ Error switching profile! No comment provided by engineer. + + Error updating group link + No comment provided by engineer. + Error updating message No comment provided by engineer. @@ -1428,10 +1440,6 @@ ICE servers (one per line) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - No comment provided by engineer. - If you can't meet in person, **show QR code in the video call**, or share the link. No comment provided by engineer. @@ -1521,6 +1529,10 @@ Instantly No comment provided by engineer. + + Interface + No comment provided by engineer. + Invalid connection link No comment provided by engineer. @@ -1722,6 +1734,10 @@ We will be adding server redundancy to prevent lost messages. Migration is completed No comment provided by engineer. + + Moderate + chat item action + More improvements are coming soon! No comment provided by engineer. @@ -1898,6 +1914,10 @@ We will be adding server redundancy to prevent lost messages. Open chat console authentication reason + + Open user profiles + authentication reason + Open-source protocol and code – anybody can run the servers. No comment provided by engineer. @@ -1954,6 +1974,10 @@ We will be adding server redundancy to prevent lost messages. Please check yours and your contact preferences. No comment provided by engineer. + + Please contact group admin. + No comment provided by engineer. + Please enter correct current passphrase. No comment provided by engineer. @@ -2358,6 +2382,10 @@ We will be adding server redundancy to prevent lost messages. Show QR code No comment provided by engineer. + + Show calls in phone history + No comment provided by engineer. + Show preview No comment provided by engineer. @@ -2538,8 +2566,12 @@ We will be adding server redundancy to prevent lost messages. The group is fully decentralized – it is visible only to the members. No comment provided by engineer. - - The microphone does not work when the app is in the background. + + The message will be deleted for all members. + No comment provided by engineer. + + + The message will be marked as moderated for all members. No comment provided by engineer. @@ -2602,10 +2634,6 @@ We will be adding server redundancy to prevent lost messages. To make a new connection No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - No comment provided by engineer. - To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. No comment provided by engineer. @@ -2667,6 +2695,10 @@ You will be prompted to complete authentication before this feature is enabled.< Unexpected migration state No comment provided by engineer. + + Unknown caller + callkit banner + Unknown database error: %@ No comment provided by engineer. @@ -2675,6 +2707,10 @@ You will be prompted to complete authentication before this feature is enabled.< Unknown error No comment provided by engineer. + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + No comment provided by engineer. + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. @@ -2736,6 +2772,10 @@ To connect, please ask your contact to create another connection link and check Use for new connections No comment provided by engineer. + + Use iOS call interface + No comment provided by engineer. + Use server No comment provided by engineer. @@ -2864,6 +2904,10 @@ To connect, please ask your contact to create another connection link and check You are invited to group No comment provided by engineer. + + You can accept calls from lock screen, without device and app authentication. + No comment provided by engineer. + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. No comment provided by engineer. @@ -2892,6 +2936,10 @@ To connect, please ask your contact to create another connection link and check You can use markdown to format messages: No comment provided by engineer. + + You can't send messages! + No comment provided by engineer. + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. No comment provided by engineer. @@ -3374,6 +3422,14 @@ SimpleX servers cannot see your profile. missed call call status + + moderated + moderated chat item + + + moderated by %@ + No comment provided by engineer. + never No comment provided by engineer. @@ -3390,6 +3446,10 @@ SimpleX servers cannot see your profile. no e2e encryption No comment provided by engineer. + + observer + member role + off enabled status @@ -3515,6 +3575,10 @@ SimpleX servers cannot see your profile. you are invited to group No comment provided by engineer. + + you are observer + No comment provided by engineer. + you changed address chat item text @@ -3557,9 +3621,9 @@ SimpleX servers cannot see your profile.
- +
- +
@@ -3584,9 +3648,9 @@ SimpleX servers cannot see your profile.
- +
- +
diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..f7a7e83a7 --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,15 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "locale" : "zh-Hans" + } + ], + "properties" : { + "localizable" : true + }, + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 1ba7c1277..4c78565cd 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -2,1869 +2,2041 @@
- +
- + - + No comment provided by engineer. - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + ( - ( + ( No comment provided by engineer. - + (can be copied) - (可复制) + (可复制) No comment provided by engineer. - + !1 colored! - !1 色! + !1 色! No comment provided by engineer. - + #secret# - #秘密# + #秘密# No comment provided by engineer. - + %@ - %@ + %@ No comment provided by engineer. - + %@ %@ - %@ %@ + %@ %@ No comment provided by engineer. - + %@ / %@ - %@ / %@ + %@ / %@ No comment provided by engineer. - + %@ is connected! - %@ 已连接! + %@ 已连接! notification title - + %@ is not verified - %@ 未认证 + %@ 未认证 No comment provided by engineer. - + %@ is verified - %@ 已认证 + %@ 已认证 No comment provided by engineer. - + %@ wants to connect! - %@ 要连接! + %@ 要连接! notification title - + %d days - %d 天 + %d 天 message ttl - + %d hours - %d 时 + %d 小时 message ttl - + %d min - %d 分 + %d 分钟 message ttl - + %d months - %d 月 + %d 月 message ttl - + %d sec - %d 秒 + %d 秒 message ttl - + %d skipped message(s) - %d 跳过消息 + %d 跳过消息 integrity error chat item - + %lld - %lld + %lld No comment provided by engineer. - + %lld %@ - %lld %@ + %lld %@ No comment provided by engineer. - + %lld contact(s) selected - %lld 联系人已选择 + %lld 联系人已选择 No comment provided by engineer. - + %lld file(s) with total size of %@ - %lld 总文件大小 %@ + %lld 总文件大小 %@ No comment provided by engineer. - + %lld members - %lld 成员 + %lld 成员 No comment provided by engineer. - + %lld second(s) - %lld 秒 + %lld 秒 No comment provided by engineer. - + %lldd - %lld天 + %lldd No comment provided by engineer. - + %lldh - %lld时 + %lldh No comment provided by engineer. - + %lldk - %lldk + %lldk No comment provided by engineer. - + %lldm - %lld分 + %lldm No comment provided by engineer. - + %lldmth - %lld月 + %lldmth No comment provided by engineer. - + %llds - %lld秒 + %llds No comment provided by engineer. - + %lldw - %lld周 + %lldw No comment provided by engineer. - + ( - ( + ( No comment provided by engineer. - + ) - ) + ) No comment provided by engineer. - + **Add new contact**: to create your one-time QR Code or link for your contact. - **添加新联系人**:为您的联系人创建一次性二维码或者链接。 + **添加新联系人**:为您的联系人创建一次性二维码或者链接。 No comment provided by engineer. - + **Create link / QR code** for your contact to use. - **创建链接 / 二维码** 给您的联系人使用。 + **创建链接 / 二维码** 给您的联系人使用。 No comment provided by engineer. - + **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. - **更私密**:每20分钟检查新消息。设备令牌和 SimpleX Chat 服务器共享,但是不会共享有您有多少联系人或者消息。 + **更私密**:每20分钟检查新消息。设备令牌和 SimpleX Chat 服务器共享,但是不会共享有您有多少联系人或者消息。 No comment provided by engineer. - + **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). - **最私密**:不使用 SimpleX Chat 通知服务器,在后台定期检查消息(取决于您多经常使用应用程序)。 + **最私密**:不使用 SimpleX Chat 通知服务器,在后台定期检查消息(取决于您多经常使用应用程序)。 No comment provided by engineer. - + **Paste received link** or open it in the browser and tap **Open in mobile app**. - **粘贴收到的链接**或者在浏览器里打开并且点击**在移动应用程序里打开**。 + **粘贴收到的链接**或者在浏览器里打开并且点击**在移动应用程序里打开**。 No comment provided by engineer. - + **Please note**: you will NOT be able to recover or change passphrase if you lose it. - **请注意**:如果您丢失密码,您将无法恢复或者更改密码。 + **请注意**:如果您丢失密码,您将无法恢复或者更改密码。 No comment provided by engineer. - + **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. - **推荐**:设备令牌和通知会发送至 SimpleX Chat 通知服务器,但是消息内容、大小或者发送人不会。 + **推荐**:设备令牌和通知会发送至 SimpleX Chat 通知服务器,但是消息内容、大小或者发送人不会。 No comment provided by engineer. - + **Scan QR code**: to connect to your contact in person or via video call. - **扫描二维码**:见面或者通过视频通话来连接您的联系人。 + **扫描二维码**:见面或者通过视频通话来连接您的联系人。 No comment provided by engineer. - + **Warning**: Instant push notifications require passphrase saved in Keychain. - **警告**:及时推送通知需要保存在钥匙串的密码。 + **警告**:及时推送通知需要保存在钥匙串的密码。 No comment provided by engineer. - + **e2e encrypted** audio call - **端到端加密** 语音通话 + **端到端加密** 语音通话 No comment provided by engineer. - + **e2e encrypted** video call - **端到端加密** 视频通话 + **端到端加密** 视频通话 No comment provided by engineer. - + \*bold* - \*加粗* + \*加粗* No comment provided by engineer. - + , - , + , No comment provided by engineer. - + . - . + . No comment provided by engineer. - + 1 day - 1天 + 1天 message ttl - + 1 hour - 1时 + 1时 message ttl - + 1 month - 1月 + 1月 message ttl - + 1 week - 1周 + 1周 message ttl - + 2 weeks - 2周 + 2周 message ttl - + 6 - 6 + 6 No comment provided by engineer. - + : - : + : No comment provided by engineer. - + A new contact - 新联系人 + 新联系人 notification title - + A random profile will be sent to the contact that you received this link from - 一个随机资料将被发送到收到您链接的联系人那里 + 一个随机资料将被发送到收到您链接的联系人那里 No comment provided by engineer. - + A random profile will be sent to your contact - 一个随机资料将发送给您的联系人 + 一个随机资料将发送给您的联系人 No comment provided by engineer. - + + A separate TCP connection will be used **for each chat profile you have in the app**. + 一个单独的 TCP 连接将被用于**您在应用程序中的每个聊天资料**。 + No comment provided by engineer. + + + A separate TCP connection will be used **for each contact and group member**. +**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. + 每个联系人和群成员将使用一个独立的 TCP 连接。 +请注意:如果您有许多连接,将会消耗更多的电量和流量,并且某些连接可能会失败。 + No comment provided by engineer. + + About SimpleX - 关于SimpleX + 关于SimpleX No comment provided by engineer. - + About SimpleX Chat - 关于SimpleX Chat + 关于SimpleX Chat No comment provided by engineer. - + Accent color - 重点颜色 + 色调 No comment provided by engineer. - + Accept - 接受 + 接受 accept contact request via notification accept incoming call via notification - + Accept contact - 接受联系人 + 接受联系人 No comment provided by engineer. - + Accept contact request from %@? - 接受来自%@的联系人请求吗? + 接受来自 %@ 的联系人请求? notification body - + Accept incognito - 接受隐身聊天 + 接受隐身聊天 No comment provided by engineer. - + Accept requests - 接受请求 + 接受请求 No comment provided by engineer. - + Add preset servers - 添加预设服务器 + 添加预设服务器 No comment provided by engineer. - + + Add profile + 添加个人资料 + No comment provided by engineer. + + Add servers by scanning QR codes. - 扫描二维码来添加服务器。 + 扫描二维码来添加服务器。 No comment provided by engineer. - + Add server… - 添加服务器… + 添加服务器… No comment provided by engineer. - + Add to another device - 添加另一设备 + 添加另一设备 No comment provided by engineer. - + + Add welcome message + No comment provided by engineer. + + Admins can create the links to join groups. - 管理员可以创建链接以加入群组。 + 管理员可以创建链接以加入群组。 No comment provided by engineer. - + Advanced network settings - 高级网络设置 + 高级网络设置 No comment provided by engineer. - + + All chats and messages will be deleted - this cannot be undone! + 所有聊天记录和消息将被删除——这一行为无法撤销! + No comment provided by engineer. + + All group members will remain connected. - 所有群组成员将保持连接。 + 所有群组成员将保持连接。 No comment provided by engineer. - + All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. - 所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。 + 所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。 No comment provided by engineer. - + All your contacts will remain connected - 你的所有联系人将保持连接 + 您的所有联系人将保持连接 No comment provided by engineer. - + Allow - 允许 + 允许 No comment provided by engineer. - + Allow disappearing messages only if your contact allows it to you. - 仅当您的联系人允许时才允许限时消息。 + 仅当您的联系人允许时才允许限时消息。 No comment provided by engineer. - + Allow irreversible message deletion only if your contact allows it to you. - 仅有您的联系人许可后才允许不可撤回消息移除。 + 仅有您的联系人许可后才允许不可撤回消息移除。 No comment provided by engineer. - + Allow sending direct messages to members. - 允许直接发送消息给成员。 + 允许直接发送消息给成员。 No comment provided by engineer. - + Allow sending disappearing messages. - 允许发送限时消息。 + 允许发送限时消息。 No comment provided by engineer. - + Allow to irreversibly delete sent messages. - 允许不可撤回地删除已发送消息。 + 允许不可撤回地删除已发送消息。 No comment provided by engineer. - + Allow to send voice messages. - 允许发送语音消息。 + 允许发送语音消息。 No comment provided by engineer. - + Allow voice messages only if your contact allows them. - 仅有您的联系人许可后才允许语音消息。 + 仅有您的联系人许可后才允许语音消息。 No comment provided by engineer. - + Allow voice messages? - 允许语音消息? + 允许语音消息? No comment provided by engineer. - + Allow your contacts to irreversibly delete sent messages. - 允许您的联系人不可撤回地删除已发送消息。 + 允许您的联系人不可撤回地删除已发送消息。 No comment provided by engineer. - + Allow your contacts to send disappearing messages. - 允许您的联系人发送限时消息。 + 允许您的联系人发送限时消息。 No comment provided by engineer. - + Allow your contacts to send voice messages. - 允许您的联系人发送语音消息。 + 允许您的联系人发送语音消息。 No comment provided by engineer. - + Already connected? - 已经连接了吗? + 已连接? No comment provided by engineer. - + + Always use relay + 一直使用中继 + No comment provided by engineer. + + Answer call - 接听来电 + 接听来电 No comment provided by engineer. - + + App build: %@ + 应用程序构建:%@ + No comment provided by engineer. + + App icon - 应用图标 + 应用程序图标 No comment provided by engineer. - + + App version + 应用程序版本 + No comment provided by engineer. + + + App version: v%@ + 应用程序版本:v%@ + No comment provided by engineer. + + Appearance - 外观 + 外观 No comment provided by engineer. - + Attach - 附件 + 附件 No comment provided by engineer. - + Audio & video calls - 语音和视频通话 + 语音和视频通话 No comment provided by engineer. - + + Audio and video calls + No comment provided by engineer. + + Authentication failed - 认证失败 + 认证失败 No comment provided by engineer. - + + Authentication is required before the call is connected, but you may miss calls. + 通话接通前需要进行认证,但您可能会错过来电。 + No comment provided by engineer. + + Authentication unavailable - 认证不可用 + 认证不可用 No comment provided by engineer. - + Auto-accept contact requests - 自动接受联系人请求 + 自动接受联系人请求 No comment provided by engineer. - + Auto-accept images - 自动接受图片 + 自动接受图片 No comment provided by engineer. - + Automatically - 自动地 + 自动地 No comment provided by engineer. - + Back - 返回 + 返回 No comment provided by engineer. - + Both you and your contact can irreversibly delete sent messages. - 您和您的联系人都可以不可逆转地删除已发送的消息。 + 您和您的联系人都可以不可逆转地删除已发送的消息。 No comment provided by engineer. - + Both you and your contact can send disappearing messages. - 您和您的联系人都可以发送限时消息。 + 您和您的联系人都可以发送限时消息。 No comment provided by engineer. - + Both you and your contact can send voice messages. - 您和您的联系人都可以发送语音消息。 + 您和您的联系人都可以发送语音消息。 No comment provided by engineer. - + + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). + 通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。 + No comment provided by engineer. + + Call already ended! - 通话已经结束! + 通话已经结束! No comment provided by engineer. - + Calls - 通话 + 通话 No comment provided by engineer. - + + Can't delete user profile! + No comment provided by engineer. + + Can't invite contact! - 无法邀请联系人! + 无法邀请联系人! No comment provided by engineer. - + Can't invite contacts! - 无法邀请联系人! + 无法邀请联系人! No comment provided by engineer. - + Cancel - 取消 + 取消 No comment provided by engineer. - + Cannot access keychain to save database password - 无法访问钥匙串以保存数据库密码 + 无法访问钥匙串以保存数据库密码 No comment provided by engineer. - + Cannot receive file - 无法接收文件 + 无法接收文件 No comment provided by engineer. - + Change - 更改 + 更改 No comment provided by engineer. - + Change database passphrase? - 更改数据库密码? + 更改数据库密码? No comment provided by engineer. - + Change member role? - 更改成员角色吗? + 更改成员角色? No comment provided by engineer. - + Change receiving address - 更改接收地址 + 更改接收地址 No comment provided by engineer. - + Change receiving address? - 更改接收地址吗? + 更改接收地址? No comment provided by engineer. - + Change role - 改变角色 + 改变角色 No comment provided by engineer. - + Chat archive - 聊天档案 + 聊天档案 No comment provided by engineer. - + Chat console - 聊天控制台 + 聊天控制台 No comment provided by engineer. - + Chat database - 聊天数据库 + 聊天数据库 No comment provided by engineer. - + Chat database deleted - 聊天数据库已删除 + 聊天数据库已删除 No comment provided by engineer. - + Chat database imported - 聊天数据库已导入 + 聊天数据库已导入 No comment provided by engineer. - + Chat is running - 聊天进行中 + 聊天进行中 No comment provided by engineer. - + Chat is stopped - 聊天已停止 + 聊天已停止 No comment provided by engineer. - + Chat preferences - 聊天偏好设置 + 聊天偏好设置 No comment provided by engineer. - + Chats - 聊天 + 聊天 No comment provided by engineer. - + Check server address and try again. - 检查服务器地址并再试一次。 + 检查服务器地址并再试一次。 No comment provided by engineer. - + + Chinese and Spanish interface + No comment provided by engineer. + + Choose file - 选择文件 + 选择文件 No comment provided by engineer. - + Choose from library - 从库中选择 + 从库中选择 No comment provided by engineer. - + Clear - 清除 + 清除 No comment provided by engineer. - + Clear conversation - 清除对话 + 清除对话 No comment provided by engineer. - + Clear conversation? - 清除对话吗? + 清除对话吗? No comment provided by engineer. - + Clear verification - 清除验证 + 清除验证 No comment provided by engineer. - + Colors - 颜色 + 颜色 No comment provided by engineer. - + Compare security codes with your contacts. - 与您的联系人比较安全码。 + 与您的联系人比较安全码。 No comment provided by engineer. - + Configure ICE servers - 配置 ICE 服务器 + 配置 ICE 服务器 No comment provided by engineer. - + Confirm - 确认 + 确认 No comment provided by engineer. - + Confirm new passphrase… - 确认新密码…… + 确认新密码…… No comment provided by engineer. - + + Confirm password + No comment provided by engineer. + + Connect - 连接 + 连接 server test step - + Connect via contact link? - 通过联系人链接连接? + 通过联系人链接连接? No comment provided by engineer. - + Connect via group link? - 通过群组链接连接? + 通过群组链接连接? No comment provided by engineer. - + Connect via link - 通过链接连接 + 通过链接连接 No comment provided by engineer. - + Connect via link / QR code - 通过群组链接/二维码连接 + 通过群组链接/二维码连接 No comment provided by engineer. - + Connect via one-time link? - 通过一次性链接连接? + 通过一次性链接连接? No comment provided by engineer. - - Connect via relay - 通过中继连接 - No comment provided by engineer. - - + Connecting to server… - 连接服务器中…… + 连接服务器中…… No comment provided by engineer. - + Connecting to server… (error: %@) - 连接服务器中……(错误:%@) + 连接服务器中……(错误:%@) No comment provided by engineer. - + Connection - 连接 + 连接 No comment provided by engineer. - + Connection error - 连接错误 + 连接错误 No comment provided by engineer. - + Connection error (AUTH) - 连接错误(AUTH) + 连接错误(AUTH) No comment provided by engineer. - + Connection request - 连接请求 + 连接请求 No comment provided by engineer. - + Connection request sent! - 已发送连接请求! + 已发送连接请求! No comment provided by engineer. - + Connection timeout - 连接超时 + 连接超时 No comment provided by engineer. - + Contact allows - 联系人允许 + 联系人允许 No comment provided by engineer. - + Contact already exists - 联系人已存在 + 联系人已存在 No comment provided by engineer. - + Contact and all messages will be deleted - this cannot be undone! - 联系人和所有的消息都将被删除——这是不可逆回的! + 联系人和所有的消息都将被删除——这是不可逆回的! No comment provided by engineer. - + Contact hidden: - 联系人已隐藏: + 联系人已隐藏: notification - + Contact is connected - 联系已连接 + 联系已连接 notification - + Contact is not connected yet! - 联系人尚未连接! + 联系人尚未连接! No comment provided by engineer. - + Contact name - 联系人姓名 + 联系人姓名 No comment provided by engineer. - + Contact preferences - 联系人偏好设置 + 联系人偏好设置 No comment provided by engineer. - + Contact requests - 联系人请求 + 联系人请求 No comment provided by engineer. - + Contacts can mark messages for deletion; you will be able to view them. - 联系人可以将信息标记为删除;您将可以查看这些信息。 + 联系人可以将信息标记为删除;您将可以查看这些信息。 No comment provided by engineer. - + Copy - 复制 + 复制 chat item action - + + Core built at: %@ + 核心构建于:%@ + No comment provided by engineer. + + + Core version: v%@ + 核心版本: v%@ + No comment provided by engineer. + + Create - 创建 + 创建 No comment provided by engineer. - + Create address - 创建地址 + 创建地址 No comment provided by engineer. - + Create group link - 创建群组链接 + 创建群组链接 No comment provided by engineer. - + Create link - 创建链接 + 创建链接 No comment provided by engineer. - + Create one-time invitation link - 创建一次性邀请链接 + 创建一次性邀请链接 No comment provided by engineer. - + Create queue - 创建队列 + 创建队列 server test step - + Create secret group - 创建私密群组 + 创建私密群组 No comment provided by engineer. - + Create your profile - 创建您的资料 + 创建您的资料 No comment provided by engineer. - + Created on %@ - 创建于%@ + 创建于 %@ No comment provided by engineer. - + Current passphrase… - 现有密码…… + 现有密码…… No comment provided by engineer. - + Currently maximum supported file size is %@. - 目前支持的最大文件大小为%@。 + 目前支持的最大文件大小为 %@。 No comment provided by engineer. - + Dark - 深色 + 深色 No comment provided by engineer. - - Data - 数据 - No comment provided by engineer. - - + Database ID - 数据库 ID + 数据库 ID No comment provided by engineer. - + Database encrypted! - 数据库已加密! + 数据库已加密! No comment provided by engineer. - + Database encryption passphrase will be updated and stored in the keychain. - 数据库加密密码将被更新并保存在钥匙串中。 + 数据库加密密码将被更新并保存在钥匙串中。 No comment provided by engineer. - + Database encryption passphrase will be updated. - 数据库加密密码将被更新。 + 数据库加密密码将被更新。 No comment provided by engineer. - + Database error - 数据库错误 + 数据库错误 No comment provided by engineer. - + Database is encrypted using a random passphrase, you can change it. - 数据库使用随机密码进行加密,您可以更改它。 + 数据库使用随机密码进行加密,您可以更改它。 No comment provided by engineer. - + Database is encrypted using a random passphrase. Please change it before exporting. - 数据库使用随机密码进行加密。请在导出前更改它。 + 数据库使用随机密码进行加密。请在导出前更改它。 No comment provided by engineer. - + Database passphrase - 数据库密码 + 数据库密码 No comment provided by engineer. - + Database passphrase & export - 数据库密码和导出 + 数据库密码和导出 No comment provided by engineer. - + Database passphrase is different from saved in the keychain. - 数据库密码与保存在钥匙串中的密码不同。 + 数据库密码与保存在钥匙串中的密码不同。 No comment provided by engineer. - + Database passphrase is required to open chat. - 打开聊天需要数据库密码。 + 打开聊天需要数据库密码。 No comment provided by engineer. - + Database will be encrypted and the passphrase stored in the keychain. - 数据库将被加密,密码保存在钥匙串中。 + 数据库将被加密,密码保存在钥匙串中。 No comment provided by engineer. - + Database will be encrypted. - 数据库将被加密。 + 数据库将被加密。 No comment provided by engineer. - + Database will be migrated when the app restarts - 应用程序重新启动时将迁移数据库 + 应用程序重新启动时将迁移数据库 No comment provided by engineer. - + Decentralized - 分散式 + 分散式 No comment provided by engineer. - + Delete - 删除 + 删除 chat item action - + Delete Contact - 删除联系人 + 删除联系人 No comment provided by engineer. - + Delete address - 删除地址 + 删除地址 No comment provided by engineer. - + Delete address? - 删除地址吗? + 删除地址? No comment provided by engineer. - + Delete after - 在此后删除 + 在此后删除 No comment provided by engineer. - + + Delete all files + 删除所有文件 + No comment provided by engineer. + + Delete archive - 删除档案 + 删除档案 No comment provided by engineer. - + Delete chat archive? - 删除聊天档案吗? + 删除聊天档案? No comment provided by engineer. - + Delete chat profile? - 删除聊天资料? + 删除聊天资料? No comment provided by engineer. - + Delete connection - 删除连接 + 删除连接 No comment provided by engineer. - + Delete contact - 删除联系人 + 删除联系人 No comment provided by engineer. - + Delete contact? - 删除联系人吗? + 删除联系人? No comment provided by engineer. - + Delete database - 删除数据库 + 删除数据库 No comment provided by engineer. - - Delete files & media - No comment provided by engineer. - - + Delete files and media? - 删除文件和媒体文件吗? + 删除文件和媒体文件吗? No comment provided by engineer. - + + Delete files for all chat profiles + 为所有聊天资料删除文件 + No comment provided by engineer. + + Delete for everyone - 为所有人删除 + 为所有人删除 chat feature - + Delete for me - 为我删除 + 为我删除 No comment provided by engineer. - + Delete group - 删除群组 + 删除群组 No comment provided by engineer. - + Delete group? - 删除群组吗? + 删除群组吗? No comment provided by engineer. - + Delete invitation - 删除邀请 + 删除邀请 No comment provided by engineer. - + Delete link - 删除链接 + 删除链接 No comment provided by engineer. - + Delete link? - 删除链接吗? + 删除链接? No comment provided by engineer. - + + Delete member message? + 删除成员消息? + No comment provided by engineer. + + Delete message? - 删除消息吗? + 删除消息吗? No comment provided by engineer. - + Delete messages - 删除消息 + 删除消息 No comment provided by engineer. - + Delete messages after - 在此后删除消息 + 在此后删除消息 No comment provided by engineer. - + Delete old database - 删除旧数据库 + 删除旧数据库 No comment provided by engineer. - + Delete old database? - 删除旧数据库吗? + 删除旧数据库吗? No comment provided by engineer. - + Delete pending connection - 删除挂起连接 + 删除挂起连接 No comment provided by engineer. - + Delete pending connection? - 删除待定连接? + 删除待定连接? No comment provided by engineer. - + Delete queue - 删除队列 + 删除队列 server test step - + + Delete user profile? + 删除用户资料? + No comment provided by engineer. + + Description - 描述 + 描述 No comment provided by engineer. - + Develop - 开发 + 开发 No comment provided by engineer. - + Developer tools - 开发者工具 + 开发者工具 No comment provided by engineer. - + Device - 设备 + 设备 No comment provided by engineer. - + Device authentication is disabled. Turning off SimpleX Lock. - 设备认证被禁用。关闭 SimpleX 锁定。 + 设备认证被禁用。关闭 SimpleX 锁定。 No comment provided by engineer. - + Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. - 没有启用设备认证。一旦启用设备认证,您可以通过设置打开 SimpleX 锁定。 + 没有启用设备认证。一旦启用设备认证,您可以通过设置打开 SimpleX 锁定。 No comment provided by engineer. - + + Different names, avatars and transport isolation. + 不同的名字、头像和传输隔离。 + No comment provided by engineer. + + Direct messages - 私聊 + 私聊 chat feature - + Direct messages between members are prohibited in this group. - 此群中禁止成员之间私聊。 + 此群中禁止成员之间私聊。 No comment provided by engineer. - + Disable SimpleX Lock - 禁用 SimpleX 锁定 + 禁用 SimpleX 锁定 authentication reason - + Disappearing messages - 限时消息 + 限时消息 chat feature - + Disappearing messages are prohibited in this chat. - 此聊天中禁止显示限时消息。 + 此聊天中禁止显示限时消息。 No comment provided by engineer. - + Disappearing messages are prohibited in this group. - 此群组中禁止显示限时消息。 + 该组禁止限时消息。 No comment provided by engineer. - + Disconnect - 断开连接 + 断开连接 server test step - + Display name - 显示名称 + 显示名称 No comment provided by engineer. - + Display name: - 显示名: + 显示名: No comment provided by engineer. - + Do NOT use SimpleX for emergency calls. - 请勿使用 SimpleX 进行紧急通话。 + 请勿使用 SimpleX 进行紧急通话。 No comment provided by engineer. - + Do it later - 稍后再做 + 稍后再做 No comment provided by engineer. - + + Don't show again + No comment provided by engineer. + + + Duplicate display name! + 重复的显示名! + No comment provided by engineer. + + Edit - 编辑 + 编辑 chat item action - + Edit group profile - 编辑群组资料 + 编辑群组资料 No comment provided by engineer. - + Enable - 启用 + 启用 No comment provided by engineer. - + Enable SimpleX Lock - 启用 SimpleX 锁定 + 启用 SimpleX 锁定 authentication reason - + Enable TCP keep-alive - 启用 TCP 保持活跃状态 + 启用 TCP 保持活跃状态 No comment provided by engineer. - + Enable automatic message deletion? - 启用自动删除消息? + 启用自动删除消息? No comment provided by engineer. - + Enable instant notifications? - 启用即时通知? + 启用即时通知? No comment provided by engineer. - + Enable notifications - 启用通知 + 启用通知 No comment provided by engineer. - + Enable periodic notifications? - 启用定期通知? + 启用定期通知? No comment provided by engineer. - + Encrypt - 加密 + 加密 No comment provided by engineer. - + Encrypt database? - 加密数据库? + 加密数据库? No comment provided by engineer. - + Encrypted database - 加密的数据库 + 加密的数据库 No comment provided by engineer. - + Encrypted message or another event - 加密消息或其他事件 + 加密消息或其他项目 notification - + Encrypted message: database error - 加密消息:数据库错误 + 加密消息:数据库错误 notification - + Encrypted message: keychain error - 加密信息:钥匙串错误 + 加密信息:钥匙串错误 notification - + Encrypted message: no passphrase - 加密消息:没有密码 + 加密消息:没有密码 notification - + Encrypted message: unexpected error - 加密消息:意外错误 + 加密消息:意外错误 notification - + Enter correct passphrase. - 输入正确密码。 + 输入正确密码。 No comment provided by engineer. - + Enter passphrase… - 输入密码…… + 输入密码…… No comment provided by engineer. - + + Enter password above to show! + No comment provided by engineer. + + Enter server manually - 手动输入服务器 + 手动输入服务器 No comment provided by engineer. - + Error - 错误 + 错误 No comment provided by engineer. - + Error accepting contact request - 接受联系人请求错误 + 接受联系人请求错误 No comment provided by engineer. - + Error accessing database file - 访问数据库文件错误 + 访问数据库文件错误 No comment provided by engineer. - + Error adding member(s) - 添加成员错误 + 添加成员错误 No comment provided by engineer. - + Error changing address - 更改地址错误 + 更改地址错误 No comment provided by engineer. - + Error changing role - 更改角色错误 + 更改角色错误 No comment provided by engineer. - + Error changing setting - 更改设置错误 + 更改设置错误 No comment provided by engineer. - + Error creating address - 创建地址错误 + 创建地址错误 No comment provided by engineer. - + Error creating group - 创建群组错误 + 创建群组错误 No comment provided by engineer. - + Error creating group link - 创建群组链接错误 + 创建群组链接错误 No comment provided by engineer. - + + Error creating profile! + 创建资料错误! + No comment provided by engineer. + + Error deleting chat database - 删除聊天数据库错误 + 删除聊天数据库错误 No comment provided by engineer. - + Error deleting chat! - 删除聊天错误! + 删除聊天错误! No comment provided by engineer. - + Error deleting connection - 删除连接错误 + 删除连接错误 No comment provided by engineer. - + Error deleting contact - 删除联系人错误 + 删除联系人错误 No comment provided by engineer. - + Error deleting database - 删除数据库错误 + 删除数据库错误 No comment provided by engineer. - + Error deleting old database - 删除旧数据库错误 + 删除旧数据库错误 No comment provided by engineer. - + Error deleting token - 删除令牌错误 + 删除令牌错误 No comment provided by engineer. - + + Error deleting user profile + 删除用户资料错误 + No comment provided by engineer. + + Error enabling notifications - 启用通知错误 + 启用通知错误 No comment provided by engineer. - + Error encrypting database - 加密数据库错误 + 加密数据库错误 No comment provided by engineer. - + Error exporting chat database - 导出聊天数据库错误 + 导出聊天数据库错误 No comment provided by engineer. - + Error importing chat database - 导入聊天数据库错误 + 导入聊天数据库错误 No comment provided by engineer. - + Error joining group - 加入群组错误 + 加入群组错误 No comment provided by engineer. - + Error receiving file - 接收文件错误 + 接收文件错误 No comment provided by engineer. - + Error removing member - 删除成员错误 + 删除成员错误 No comment provided by engineer. - + Error saving ICE servers - 保存 ICE 服务器错误 + 保存 ICE 服务器错误 No comment provided by engineer. - + Error saving SMP servers - 保存 SMP 服务器错误 + 保存 SMP 服务器错误 No comment provided by engineer. - + Error saving group profile - 保存群组资料错误 + 保存群组资料错误 No comment provided by engineer. - + Error saving passphrase to keychain - 保存密码到钥匙串错误 + 保存密码到钥匙串错误 No comment provided by engineer. - + + Error saving user password + No comment provided by engineer. + + Error sending message - 发送消息错误 + 发送消息错误 No comment provided by engineer. - + Error starting chat - 启动聊天错误 + 启动聊天错误 No comment provided by engineer. - + Error stopping chat - 停止聊天错误 + 停止聊天错误 No comment provided by engineer. - + + Error switching profile! + 切换资料错误! + No comment provided by engineer. + + + Error updating group link + 更新群组链接错误 + No comment provided by engineer. + + Error updating message - 更新消息错误 + 更新消息错误 No comment provided by engineer. - + Error updating settings - 更新设置错误 + 更新设置错误 No comment provided by engineer. - + + Error updating user privacy + No comment provided by engineer. + + Error: %@ - 错误: %@ + 错误: %@ No comment provided by engineer. - + Error: URL is invalid - 错误:URL 无效 + 错误:URL 无效 No comment provided by engineer. - + Error: no database file - 错误:没有数据库文件 + 错误:没有数据库文件 No comment provided by engineer. - + Exit without saving - 退出而不保存 + 退出而不保存 No comment provided by engineer. - + Export database - 导出数据库 + 导出数据库 No comment provided by engineer. - + Export error: - 导出错误: + 导出错误: No comment provided by engineer. - + Exported database archive. - 导出数据库归档。 + 导出数据库归档。 No comment provided by engineer. - + Exporting database archive... - 导出数据库档案中…… + 导出数据库档案中…… No comment provided by engineer. - + Failed to remove passphrase - 移除密码失败 + 移除密码失败 No comment provided by engineer. - + File will be received when your contact is online, please wait or check later! - 文件将在您的联系人在线时收到,请稍等或稍后再查看! + 文件将在您的联系人在线时收到,请稍等或稍后再查看! No comment provided by engineer. - + File: %@ - 文件:%@ + 文件:%@ No comment provided by engineer. - + + Files & media + 文件和媒体 + No comment provided by engineer. + + For console - 用于控制台 + 用于控制台 No comment provided by engineer. - + + French interface + 法语界面 + No comment provided by engineer. + + Full link - 完整链接 + 完整链接 No comment provided by engineer. - + Full name (optional) - 全名(可选) + 全名(可选) No comment provided by engineer. - + Full name: - 全名: + 全名: No comment provided by engineer. - + + Fully re-implemented - work in background! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + + GIFs and stickers - GIF和贴纸 + GIF 和贴纸 No comment provided by engineer. - + Group - 群组 + 群组 No comment provided by engineer. - + Group display name - 群组显示名称 + 群组显示名称 No comment provided by engineer. - + Group full name (optional) - 群组全名(可选) + 群组全名(可选) No comment provided by engineer. - + Group image - 群组图片 + 群组图片 No comment provided by engineer. - + Group invitation - 群组邀请 + 群组邀请 No comment provided by engineer. - + Group invitation expired - 群组邀请已过期 + 群组邀请已过期 No comment provided by engineer. - + Group invitation is no longer valid, it was removed by sender. - 群组邀请不再有效,已被发件人删除。 + 群组邀请不再有效,已被发件人删除。 No comment provided by engineer. - + Group link - 群组链接 + 群组链接 No comment provided by engineer. - + Group links - 群组链接 + 群组链接 No comment provided by engineer. - + Group members can irreversibly delete sent messages. - 群组成员可以不可撤回地删除已发送的消息。 + 群组成员可以不可撤回地删除已发送的消息。 No comment provided by engineer. - + Group members can send direct messages. - 群组成员可以私信。 + 群组成员可以私信。 No comment provided by engineer. - + Group members can send disappearing messages. - 群组成员可以发送限时消息。 + 群组成员可以发送限时消息。 No comment provided by engineer. - + Group members can send voice messages. - 群组成员可以发送语音消息。 + 群组成员可以发送语音消息。 No comment provided by engineer. - + Group message: - 群组消息: + 群组消息: notification - + + Group moderation + No comment provided by engineer. + + Group preferences - 群组偏好设置 + 群组偏好设置 No comment provided by engineer. - + Group profile - 群组资料 + 集团简介 No comment provided by engineer. - + Group profile is stored on members' devices, not on the servers. - 群组资料存储在成员的设备上,而不是服务器上。 + 群组资料存储在成员的设备上,而不是服务器上。 No comment provided by engineer. - + + Group welcome message + No comment provided by engineer. + + Group will be deleted for all members - this cannot be undone! - 将为所有成员删除群组——此操作无法撤消! + 将为所有成员删除群组——此操作无法撤消! No comment provided by engineer. - + Group will be deleted for you - this cannot be undone! - 将为您删除群组——此操作无法撤消! + 将为您删除群组——此操作无法撤消! No comment provided by engineer. - + Help - 帮助 + 帮助 No comment provided by engineer. - + Hidden - 已隐藏 + 已隐藏 No comment provided by engineer. - + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + + Hide - 隐藏 + 隐藏 chat item action - + Hide app screen in the recent apps. - 在最近的应用程序中隐藏应用程序屏幕。 + 在最近的应用程序中隐藏应用程序屏幕。 No comment provided by engineer. - + + Hide profile + No comment provided by engineer. + + How SimpleX works - SimpleX的工作原理 + SimpleX的工作原理 No comment provided by engineer. - + How it works - 工作原理 + 工作原理 No comment provided by engineer. - + How to - 如何 + 如何 No comment provided by engineer. - + How to use it - 如何使用它 + 如何使用它 No comment provided by engineer. - + How to use your servers - 如何使用您的服务器 + 如何使用您的服务器 No comment provided by engineer. - + ICE servers (one per line) - ICE 服务器(每行一个) + ICE 服务器(每行一个) No comment provided by engineer. - - If the video fails to connect, flip the camera to resolve it. - 如果视频连接失败,请翻转摄像头以解决问题。 - No comment provided by engineer. - - + If you can't meet in person, **show QR code in the video call**, or share the link. - 如果您不能亲自见面,**在视频通话中出示二维码**,或分享链接。 + 如果您不能亲自见面,**在视频通话中出示二维码**,或分享链接。 No comment provided by engineer. - + If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link. - 如果您不能亲自见面,您可以**扫描视频通话中的二维码**,或者您的联系人可以分享邀请链接。 + 如果您不能亲自见面,您可以**扫描视频通话中的二维码**,或者您的联系人可以分享邀请链接。 No comment provided by engineer. - + If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app). - 如果您现在需要使用聊天,请点击下面的**稍后再做**(当您重新启动应用程序时,系统会提示您迁移数据库)。 + 如果您现在需要使用聊天,请点击下面的**稍后再做**(当您重新启动应用程序时,系统会提示您迁移数据库)。 No comment provided by engineer. - + Ignore - 忽视 + 忽视 No comment provided by engineer. - + Image will be received when your contact is online, please wait or check later! - 图片将在您的联系人在线时收到,请稍等或稍后查看! + 图片将在您的联系人在线时收到,请稍等或稍后查看! No comment provided by engineer. - + Immune to spam and abuse - 不受垃圾和骚扰消息影响 + 不受垃圾和骚扰消息影响 No comment provided by engineer. - + Import - 导入 + 导入 No comment provided by engineer. - + Import chat database? - 导入聊天数据库? + 导入聊天数据库? No comment provided by engineer. - + Import database - 导入数据库 + 导入数据库 No comment provided by engineer. - + Improved privacy and security - 改进的隐私和安全 + 改进的隐私和安全 No comment provided by engineer. - + Improved server configuration - 改进的服务器配置 + 改进的服务器配置 No comment provided by engineer. - + Incognito - 隐身聊天 + 隐身聊天 No comment provided by engineer. - + Incognito mode - 隐身聊天模式 + 隐身模式 No comment provided by engineer. - + Incognito mode is not supported here - your main profile will be sent to group members - 这里不支持隐身聊天模式——您的主要资料将被发送给群组成员 + 此处不支持隐身模式——您的主要个人资料将发送给群组成员 No comment provided by engineer. - + Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. - 隐身聊天模式可以保护您的主要资料名和头像的隐私——为每个新联系人创建一个新的随机资料。 + 隐身模式可以保护你的主要个人资料名称和图像的隐私——对于每个新的联系人,都会创建一个新的随机个人资料。 No comment provided by engineer. - + Incoming audio call - 语音通话来电 + 语音通话来电 notification - + Incoming call - 通话来电 + 通话来电 notification - + Incoming video call - 视频通话来电 + 视频通话来电 notification - + Incorrect security code! - 安全码不正确! + 安全码不正确! No comment provided by engineer. - + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) - 安装[用于终端的 SimpleX Chat](https://github.com/simplex-chat/simplex-chat) + 安装[用于终端的 SimpleX Chat](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. - + Instant push notifications will be hidden! - 即时推送通知将被隐藏! + 即时推送通知将被隐藏! No comment provided by engineer. - + Instantly - 即时 + 即时 No comment provided by engineer. - + + Interface + 界面 + No comment provided by engineer. + + Invalid connection link - 无效的连接链接 + 无效的连接链接 No comment provided by engineer. - + Invalid server address! - 无效的服务器地址! + 无效的服务器地址! No comment provided by engineer. - + Invitation expired! - 邀请已过期! + 邀请已过期! No comment provided by engineer. - + Invite members - 邀请成员 + 邀请成员 No comment provided by engineer. - + Invite to group - 邀请加入群组 + 邀请加入群组 No comment provided by engineer. - + Irreversible message deletion - 不可撤回消息移除 + 不可撤回消息移除 No comment provided by engineer. - + Irreversible message deletion is prohibited in this chat. - 此聊天中禁止不可撤回消息移除。 + 此聊天中禁止不可撤回消息移除。 No comment provided by engineer. - + Irreversible message deletion is prohibited in this group. - 此群组中禁止不可撤回消息移除。 + 此群组中禁止不可撤回消息移除。 No comment provided by engineer. - + It allows having many anonymous connections without any shared data between them in a single chat profile. - 它允许在一个聊天资料中有多个匿名连接,而它们之间没有任何共享数据。 + 它允许在一个聊天资料中有多个匿名连接,而它们之间没有任何共享数据。 No comment provided by engineer. - + It can happen when: 1. The messages expire on the server if they were not received for 30 days, 2. The server you use to receive the messages from this contact was updated and restarted. 3. The connection is compromised. Please connect to the developers via Settings to receive the updates about the servers. We will be adding server redundancy to prevent lost messages. - 它可以在以下情况下发生: + 它可以在以下情况下发生: 1. 如果消息在30天内没有被收到,就会在服务器上过期。 2. 您用于接收来自此联系人的消息的服务器已更新并重新启动。 3. 连接受损。 @@ -1872,2668 +2044,2678 @@ We will be adding server redundancy to prevent lost messages. 我们将添加服务器冗余以防止丢失消息。 No comment provided by engineer. - + It seems like you are already connected via this link. If it is not the case, there was an error (%@). - 您似乎已经通过此链接连接。如果不是这样,则有一个错误 (%@)。 + 您似乎已经通过此链接连接。如果不是这样,则有一个错误 (%@)。 No comment provided by engineer. - + + Italian interface + 意大利语界面 + No comment provided by engineer. + + Join - 加入 + 加入 No comment provided by engineer. - + Join group - 加入群组 + 加入群组 No comment provided by engineer. - + Join incognito - 加入隐身聊天 + 加入隐身聊天 No comment provided by engineer. - + Joining group - 加入群组 + 加入群组 No comment provided by engineer. - + Keychain error - 钥匙串错误 + 钥匙串错误 No comment provided by engineer. - + LIVE - LIVE + 实时 No comment provided by engineer. - + Large file! - 大文件! + 大文件! No comment provided by engineer. - + Leave - 离开 + 离开 No comment provided by engineer. - + Leave group - 离开群组 + 离开群组 No comment provided by engineer. - + Leave group? - 离开群组? + 离开群组? No comment provided by engineer. - + Light - 浅色 + 浅色 No comment provided by engineer. - + Limitations - 限制 + 限制 No comment provided by engineer. - + Live message! - 实时消息! + 实时消息! No comment provided by engineer. - + Live messages - 实时消息 + 实时消息 No comment provided by engineer. - + Local name - 本地名称 + 本地名称 No comment provided by engineer. - + + Local profile data only + 仅本地配置文件数据 + No comment provided by engineer. + + Make a private connection - 建立私人连接 + 建立私密连接 No comment provided by engineer. - + + Make profile private! + No comment provided by engineer. + + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). - 请确保SMP服务器地址格式正确,每行一个地址,不重复 (%@)。 + 请确保 SMP服 务器地址格式正确,每行一个地址并且不重复 (%@)。 No comment provided by engineer. - + Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. - 请确保WebRTC ICE服务器地址格式正确,每行一个地址,不重复。 + 确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。 No comment provided by engineer. - + Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* - 许多人问: *如果SimpleX没有用户标识符,它怎么传递信息?* + 许多人问: *如果SimpleX没有用户标识符,它怎么传递信息?* No comment provided by engineer. - + Mark deleted for everyone - 标记为所有人已删除 + 标记为所有人已删除 No comment provided by engineer. - + Mark read - 标记为已读 + 标记为已读 No comment provided by engineer. - + Mark verified - 标记为已验证 + 标记为已验证 No comment provided by engineer. - + Markdown in messages - 在消息中标记 + 在消息中使用 Markdown No comment provided by engineer. - + Max 30 seconds, received instantly. - 最长30秒,立即接收。 + 最长30秒,立即接收。 No comment provided by engineer. - + Member - 成员 + 成员 No comment provided by engineer. - + Member role will be changed to "%@". All group members will be notified. - 成员角色将更改为 "%@"。所有群成员将收到通知。 + 成员角色将更改为 "%@"。所有群成员将收到通知。 No comment provided by engineer. - + Member role will be changed to "%@". The member will receive a new invitation. - 成员角色将更改为 "%@"。该成员将收到一份新的邀请。 + 成员角色将更改为 "%@"。该成员将收到一份新的邀请。 No comment provided by engineer. - + Member will be removed from group - this cannot be undone! - 成员将从群组中删除 - 这将无法撤消! + 成员将被移出群组——此操作无法撤消! No comment provided by engineer. - + Message delivery error - 消息传递错误 + 消息传递错误 No comment provided by engineer. - + + Message draft + 消息草稿 + No comment provided by engineer. + + Message text - 消息正文 + 消息正文 No comment provided by engineer. - + Messages - 消息 + 消息 No comment provided by engineer. - + Migrating database archive... - 迁移数据库档案中…… + 迁移数据库档案中…… No comment provided by engineer. - + Migration error: - 迁移错误: + 迁移错误: No comment provided by engineer. - + Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). - 迁移失败。请点击下面的“跳过”继续使用当前数据库。请通过聊天或电子邮件 chat@simplex.chat 向应用程序开发人员报告此问题 (mailto:chat@simplex.chat)。 + 迁移失败。点击下面的 **Skip** 继续使用当前数据库。请通过聊天或电子邮件 [chat@simplex.chat](mailto:chat@simplex.chat) 将问题报告给应用程序开发人员。 No comment provided by engineer. - + Migration is completed - 迁移完成 + 迁移完成 No comment provided by engineer. - + + Moderate + 管理员移除 + chat item action + + + More improvements are coming soon! + 更多改进即将推出! + No comment provided by engineer. + + Most likely this contact has deleted the connection with you. - 很可能此联系人已经删除了与您的联系。 + 很可能此联系人已经删除了与您的联系。 No comment provided by engineer. - + + Multiple chat profiles + 多个聊天资料 + No comment provided by engineer. + + Mute - 静音 + 静音 No comment provided by engineer. - + + Muted when inactive! + No comment provided by engineer. + + Name - 名称 + 名称 No comment provided by engineer. - + Network & servers - 网络和服务器 + 网络和服务器 No comment provided by engineer. - + Network settings - 网络设置 + 网络设置 No comment provided by engineer. - + Network status - 网络状态 + 网络状态 No comment provided by engineer. - + New contact request - 新联系人请求 + 新联系人请求 notification - + New contact: - 新联系人: + 新联系人: notification - + New database archive - 新的数据库存档 + 新数据库存档 No comment provided by engineer. - + New in %@ - 新于%@ + %@ 的新内容 No comment provided by engineer. - + New member role - 新成员角色 + 新成员角色 No comment provided by engineer. - + New message - 新消息 + 新消息 notification - + New passphrase… - 新密码…… + 新密码…… No comment provided by engineer. - + No - + No comment provided by engineer. - + No contacts selected - 未选择联系人 + 未选择联系人 No comment provided by engineer. - + No contacts to add - 没有联系人可添加 + 没有联系人可添加 No comment provided by engineer. - + No device token! - 无设备令牌! + 无设备令牌! No comment provided by engineer. - + Group not found! - 未找到群组! + 未找到群组! No comment provided by engineer. - + No permission to record voice message - 没有录制语音消息的权限 + 没有录制语音消息的权限 No comment provided by engineer. - + No received or sent files - 未收到或发送文件 + 未收到或发送文件 No comment provided by engineer. - + Notifications - 通知 + 通知 No comment provided by engineer. - + Notifications are disabled! - 通知被禁用! + 通知被禁用! No comment provided by engineer. - + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + + Off (Local) - 关闭 (本地) + 关闭 (本地) No comment provided by engineer. - + Ok - 好的 + 好的 No comment provided by engineer. - + Old database - 旧的数据库 + 旧的数据库 No comment provided by engineer. - + Old database archive - 旧数据库归档 + 旧数据库存档 No comment provided by engineer. - + One-time invitation link - 一次性邀请链接 + 一次性邀请链接 No comment provided by engineer. - + Onion hosts will be required for connection. Requires enabling VPN. - 洋葱主机将用于连接。需要启用 VPN。 + Onion 主机将用于连接。需要启用 VPN。 No comment provided by engineer. - + Onion hosts will be used when available. Requires enabling VPN. - 当可用时,将使用洋葱主机。需要启用 VPN。 + 当可用时,将使用 Onion 主机。需要启用 VPN。 No comment provided by engineer. - + Onion hosts will not be used. - 不使用洋葱主机。 + 将不会使用 Onion 主机。 No comment provided by engineer. - + Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. - 只有客户端设备存储用户资料、联系人、群组和**双层端到端加密**发送的消息。 + 只有客户端设备存储用户资料、联系人、群组和**双层端到端加密**发送的消息。 No comment provided by engineer. - + Only group owners can change group preferences. - 只有群主可以改变群组偏好设置。 + 只有群主可以改变群组偏好设置。 No comment provided by engineer. - + Only group owners can enable voice messages. - 只有群主可以启用语音信息。 + 只有群主可以启用语音信息。 No comment provided by engineer. - + Only you can irreversibly delete messages (your contact can mark them for deletion). - 只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。 + 只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。 No comment provided by engineer. - + Only you can send disappearing messages. - 只有您可以发送限时消息。 + 只有您可以发送限时消息。 No comment provided by engineer. - + Only you can send voice messages. - 只有您可以发送语音消息。 + 只有您可以发送语音消息。 No comment provided by engineer. - + Only your contact can irreversibly delete messages (you can mark them for deletion). - 只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。 + 只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。 No comment provided by engineer. - + Only your contact can send disappearing messages. - 只有您的联系人才可以发送限时消息。 + 只有您的联系人才可以发送限时消息。 No comment provided by engineer. - + Only your contact can send voice messages. - 只有您的联系人可以发送语音消息。 + 只有您的联系人可以发送语音消息。 No comment provided by engineer. - + Open Settings - 打开设置 + 打开设置 No comment provided by engineer. - + Open chat - 打开聊天 + 打开聊天 No comment provided by engineer. - + Open chat console - 打开聊天控制台 + 打开聊天控制台 authentication reason - + + Open user profiles + 打开用户个人资料 + authentication reason + + Open-source protocol and code – anybody can run the servers. - 开源协议和代码——任何人都可以运行服务器。 + 开源协议和代码——任何人都可以运行服务器。 No comment provided by engineer. - + Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red. - 在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。 + 在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。 No comment provided by engineer. - + PING count - PING 次数 + PING 次数 No comment provided by engineer. - + PING interval - PING间隔 + PING 间隔 No comment provided by engineer. - + + Password to show + No comment provided by engineer. + + Paste - 粘贴 + 粘贴 No comment provided by engineer. - + Paste image - 粘贴图片 + 粘贴图片 No comment provided by engineer. - + Paste received link - 粘贴收到的链接 + 粘贴收到的链接 No comment provided by engineer. - + Paste the link you received into the box below to connect with your contact. - 请将您收到的链接粘贴到下方的框中,以连接您的联系人。 + 将您收到的链接粘贴到下面的框中以与您的联系人联系。 No comment provided by engineer. - + People can connect to you only via the links you share. - 其他人只能通过您共享的链接与您联系。 + 人们只能通过您共享的链接与您建立联系。 No comment provided by engineer. - + Periodically - 定期地 + 定期地 No comment provided by engineer. - + Please ask your contact to enable sending voice messages. - 请请求你的联系人开启发送语音消息的功能。 + 请让您的联系人启用发送语音消息。 No comment provided by engineer. - + Please check that you used the correct link or ask your contact to send you another one. - 请检查您是否使用了正确的链接,或者请您的联系人发送另一个链接。 + 请检查您使用的链接是否正确,或者让您的联系人给您发送另一个链接。 No comment provided by engineer. - + Please check your network connection with %@ and try again. - 请检查您与%@的网络连接,然后重试。 + 请检查您与%@的网络连接,然后重试。 No comment provided by engineer. - + Please check yours and your contact preferences. - 请检查您和您的联系人偏好设置。 + 请检查您和您的联系人偏好设置。 No comment provided by engineer. - + + Please contact group admin. + 请联系群组管理员。 + No comment provided by engineer. + + Please enter correct current passphrase. - 请输入正确的当前密码。 + 请输入正确的当前密码。 No comment provided by engineer. - + Please enter the previous password after restoring database backup. This action can not be undone. - 请在恢复数据库备份后输入先前的密码。此操作无法撤消。 + 恢复数据库备份后请输入之前的密码。 此操作无法撤消。 No comment provided by engineer. - + Please restart the app and migrate the database to enable push notifications. - 请重新启动应用程序并迁移数据库以启用推送通知。 + 请重新启动应用程序并迁移数据库以启用推送通知。 No comment provided by engineer. - + Please store passphrase securely, you will NOT be able to access chat if you lose it. - 请安全地保存密码,如果您丢失了密码,您将无法访问聊天。 + 请安全地保存密码,如果您丢失了密码,您将无法访问聊天。 No comment provided by engineer. - + Please store passphrase securely, you will NOT be able to change it if you lose it. - 请安全地保存密码,如果您丢失了密码,您将无法更改它。 + 请安全地保存密码,如果您丢失了密码,您将无法更改它。 No comment provided by engineer. - + Possibly, certificate fingerprint in server address is incorrect - 服务器地址中的证书指纹可能不正确 + 服务器地址中的证书指纹可能不正确 server test error - + + Preserve the last message draft, with attachments. + 保留最后的消息草稿及其附件。 + No comment provided by engineer. + + Preset server - 预设服务器 + 预设服务器 No comment provided by engineer. - + Preset server address - 预设服务器地址 + 预设服务器地址 No comment provided by engineer. - + Privacy & security - 隐私和安全 + 隐私和安全 No comment provided by engineer. - + Privacy redefined - 重新定义隐私 + 重新定义隐私 No comment provided by engineer. - + + Private filenames + 私密文件名 + No comment provided by engineer. + + + Profile and server connections + 资料和服务器连接 + No comment provided by engineer. + + Profile image - 资料图片 + 资料图片 No comment provided by engineer. - + Prohibit irreversible message deletion. - 禁止不可撤回消息删除。 + 禁止不可撤回消息删除。 No comment provided by engineer. - + Prohibit sending direct messages to members. - 禁止直接向成员发送私信。 + 禁止直接向成员发送私信。 No comment provided by engineer. - + Prohibit sending disappearing messages. - 禁止发送限时消息。 + 禁止发送限时消息。 No comment provided by engineer. - + Prohibit sending voice messages. - 禁止发送语音消息。 + 禁止发送语音消息。 No comment provided by engineer. - + Protect app screen - 保护应用屏幕 + 保护应用程序屏幕 No comment provided by engineer. - + + Protect your chat profiles with a password! + No comment provided by engineer. + + Protocol timeout - 协议超时 + 协议超时 No comment provided by engineer. - + Push notifications - 推送通知 + 推送通知 No comment provided by engineer. - + Rate the app - 评价应用程序 + 评价此应用程序 No comment provided by engineer. - + Read - 已读 + 已读 No comment provided by engineer. - + Read more in our GitHub repository. - 在我们的 GitHub 存储库中阅读更多内容。 + 在我们的 GitHub 仓库中阅读更多内容。 No comment provided by engineer. - + Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme). - 请在我们的[GitHub仓库]中阅读更多信息(https://github.com/simplex-chat/simplex-chat#readme)。 + 在我们的 [GitHub 仓库](https://github.com/simplex-chat/simplex-chat#readme) 中阅读更多信息。 No comment provided by engineer. - + Received file event - 收到文件事件 + 收到文件项目 notification - + Receiving via - 接收通过 + 接收通过 No comment provided by engineer. - + Recipients see updates as you type them. - 收件人会随着您的输入而看到更新。 + 对方会在您键入时看到更新。 No comment provided by engineer. - + + Reduced battery usage + 减少电池使用量 + No comment provided by engineer. + + Reject - 拒绝 + 拒绝 reject incoming call via notification - + Reject contact (sender NOT notified) - 拒绝联系人(发送者不会被通知) + 拒绝联系人(发送者不会被通知) No comment provided by engineer. - + Reject contact request - 拒绝联系人请求 + 拒绝联系人请求 No comment provided by engineer. - + Relay server is only used if necessary. Another party can observe your IP address. - 中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。 + 中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。 No comment provided by engineer. - + Relay server protects your IP address, but it can observe the duration of the call. - 中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。 + 中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。 No comment provided by engineer. - + Remove - 移除 + 移除 No comment provided by engineer. - + Remove member - 删除成员 + 删除成员 No comment provided by engineer. - + Remove member? - 删除成员吗? + 删除成员吗? No comment provided by engineer. - + Remove passphrase from keychain? - 从钥匙串中删除密码? + 从钥匙串中删除密码? No comment provided by engineer. - + Reply - 回复 + 回复 chat item action - + Required - 必填 + 必要 No comment provided by engineer. - + Reset - 重置 + 重置 No comment provided by engineer. - + Reset colors - 重置颜色 + 重置颜色 No comment provided by engineer. - + Reset to defaults - 重置为默认设置 + 重置为默认 No comment provided by engineer. - + Restart the app to create a new chat profile - 重新启动应用程序以创建新的聊天资料 + 重新启动应用程序以创建新的聊天资料 No comment provided by engineer. - + Restart the app to use imported chat database - 重启应用以使用导入的聊天数据库 + 重启应用以使用导入的聊天数据库 No comment provided by engineer. - + Restore - 恢复 + 恢复 No comment provided by engineer. - + Restore database backup - 恢复数据库备份 + 恢复数据库备份 No comment provided by engineer. - + Restore database backup? - 恢复数据库备份吗? + 恢复数据库备份? No comment provided by engineer. - + Restore database error - 恢复数据库错误 + 恢复数据库错误 No comment provided by engineer. - + Reveal - 显示 + 揭示 chat item action - + Revert - 恢复 + 恢复 No comment provided by engineer. - + Role - 角色 + 角色 No comment provided by engineer. - + Run chat - 开始聊天 + 运行聊天程序 No comment provided by engineer. - + SMP servers - SMP 服务器 + SMP 服务器 No comment provided by engineer. - + Save - 保存 + 保存 chat item action - + Save (and notify contacts) - 保存(并通知联系人) + 保存(并通知联系人) No comment provided by engineer. - + Save and notify contact - 保存并通知联系人 + 保存并通知联系人 No comment provided by engineer. - + Save and notify group members - 保存并通知群成员 + 保存并通知群组成员 No comment provided by engineer. - + + Save and update group profile + No comment provided by engineer. + + Save archive - 保存存档 + 保存存档 No comment provided by engineer. - + Save group profile - 保存群组资料 + 保存群组资料 No comment provided by engineer. - + Save passphrase and open chat - 保存密码并打开聊天 + 保存密码并打开聊天 No comment provided by engineer. - + Save passphrase in Keychain - 在钥匙串中保存密码 + 在钥匙串中保存密码 No comment provided by engineer. - + Save preferences? - 保存偏好设置? + 保存偏好设置? No comment provided by engineer. - + + Save profile password + No comment provided by engineer. + + Save servers - 保存服务器 + 保存服务器 No comment provided by engineer. - + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + + Saved WebRTC ICE servers will be removed - 已保存的WebRTC ICE服务器将被删除 + 已保存的WebRTC ICE服务器将被删除 No comment provided by engineer. - + Scan QR code - 扫描二维码 + 扫描二维码 No comment provided by engineer. - + Scan code - 扫描代码 + 扫码 No comment provided by engineer. - + Scan security code from your contact's app. - 从您的联系人的应用程序中扫描安全代码。 + 从您联系人的应用程序中扫描安全码。 No comment provided by engineer. - + Scan server QR code - 扫描服务器的 QR 码 + 扫描服务器二维码 No comment provided by engineer. - + Search - 搜索 + 搜索 No comment provided by engineer. - + Secure queue - 安全队列 + 保护队列 server test step - + Security assessment - 安全评估 + 安全评估 No comment provided by engineer. - + Security code - 安全码 + 安全码 No comment provided by engineer. - + Send - 发送 + 发送 No comment provided by engineer. - + Send a live message - it will update for the recipient(s) as you type it - 发送实时消息——在您输入消息时,它将实时更新给收件人 + 发送实时消息——它会在您键入时为收件人更新 No comment provided by engineer. - + Send direct message - 发送私信 + 发送私信 No comment provided by engineer. - + Send link previews - 发送链接预览 + 发送链接预览 No comment provided by engineer. - + Send live message - 发送即时消息 + 发送实时消息 No comment provided by engineer. - + Send notifications - 发送通知 + 发送通知 No comment provided by engineer. - + Send notifications: - 发送通知: + 发送通知: No comment provided by engineer. - + Send questions and ideas - 发送问题和意见 + 发送问题和想法 No comment provided by engineer. - + Send them from gallery or custom keyboards. - 发送它们来自图库或自定义键盘。 + 发送它们来自图库或自定义键盘。 No comment provided by engineer. - + Sender cancelled file transfer. - 发送者取消文件传输。 + 发送人已取消文件传输。 No comment provided by engineer. - + Sender may have deleted the connection request. - 发送者可能已删除连接请求。 + 发送人可能已删除连接请求。 No comment provided by engineer. - + Sending via - 发送通过 + 发送通过 No comment provided by engineer. - + Sent file event - 已发送文件事件 + 已发送文件项目 notification - + Sent messages will be deleted after set time. - 已发送的消息将在设定的时间后被删除。 + 已发送的消息将在设定的时间后被删除。 No comment provided by engineer. - + Server requires authorization to create queues, check password - 服务器需要授权才能创建队列,检查密码 + 服务器需要授权才能创建队列,检查密码 server test error - + Server test failed! - 服务器测试失败! + 服务器测试失败! No comment provided by engineer. - + Servers - 服务器 + 服务器 No comment provided by engineer. - + Set 1 day - 设置1天 + 设定1天 No comment provided by engineer. - + Set contact name… - 设置联系人姓名…… + 设置联系人姓名…… No comment provided by engineer. - + Set group preferences - 设置群组偏好设置 + 设置群组偏好设置 No comment provided by engineer. - + Set passphrase to export - 设置密码来导出 + 设置密码来导出 No comment provided by engineer. - + + Set the message shown to new members! + No comment provided by engineer. + + Set timeouts for proxy/VPN - 设置代理/VPN的超时时间 + 设置代理/VPN的超时时间 No comment provided by engineer. - + Settings - 设置 + 设置 No comment provided by engineer. - + Share - 分享 + 分享 chat item action - + Share invitation link - 分享邀请链接 + 分享邀请链接 No comment provided by engineer. - + Share link - 分享链接 + 分享链接 No comment provided by engineer. - + Share one-time invitation link - 分享一次性邀请链接 + 分享一次性邀请链接 No comment provided by engineer. - + Show QR code - 展示 QR 二维码 + 显示二维码 No comment provided by engineer. - + + Show calls in phone history + 在电话历史记录中显示通话 + No comment provided by engineer. + + Show preview - 显示预览 + 显示预览 No comment provided by engineer. - + SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). - SimpleX Chat 的安全性 [由 Trail of Bits 审核](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)。 + SimpleX Chat 的安全性 [由 Trail of Bits 审核](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)。 No comment provided by engineer. - + SimpleX Lock - SimpleX 锁定 + SimpleX 锁定 No comment provided by engineer. - + SimpleX Lock turned on - 已开启 SimpleX 锁定 + 已开启 SimpleX 锁定 No comment provided by engineer. - + SimpleX contact address - SimpleX 联系地址 + SimpleX 联系地址 simplex link type - + SimpleX encrypted message or connection event - SimpleX 加密消息或连接事件 + SimpleX 加密消息或连接项目 notification - + SimpleX group link - SimpleX 群组链接 + SimpleX 群组链接 simplex link type - + SimpleX links - SimpleX 链接 + SimpleX 链接 No comment provided by engineer. - + SimpleX one-time invitation - SimpleX 一次性邀请 + SimpleX 一次性邀请 simplex link type - + Skip - 跳过 + 跳过 No comment provided by engineer. - + Skipped messages - 跳过的消息 + 已跳过消息 No comment provided by engineer. - + Somebody - 某人 + 某人 notification title - + Start a new chat - 开始新聊天 + 开始新聊天 No comment provided by engineer. - + Start chat - 开始聊天 + 开始聊天 No comment provided by engineer. - + Start migration - 开始迁移 + 开始迁移 No comment provided by engineer. - + Stop - 停止 + 停止 No comment provided by engineer. - + Stop SimpleX - 停止 SimpleX + 停止 SimpleX authentication reason - + Stop chat to enable database actions - 停止聊天以启用数据库操作 + 停止聊天以启用数据库操作 No comment provided by engineer. - + Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. - 停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。 + 停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。 No comment provided by engineer. - + Stop chat? - 请停止聊天吗? + 停止聊天程序? No comment provided by engineer. - + Support SimpleX Chat - 支持 SimpleX Chat + 支持 SimpleX Chat No comment provided by engineer. - + System - 系统 + 系统 No comment provided by engineer. - + TCP connection timeout - TCP连接超时 + TCP 连接超时 No comment provided by engineer. - + TCP_KEEPCNT - TCP保持连接发送的探测数 + TCP_KEEPCNT No comment provided by engineer. - + TCP_KEEPIDLE - TCP连接空闲时间 + TCP_KEEPIDLE No comment provided by engineer. - + TCP_KEEPINTVL - TCP保持连接的间隔时间 + TCP_KEEPINTVL No comment provided by engineer. - + Take picture - 拍照 + 拍照 No comment provided by engineer. - + Tap button - 按钮 + 点击按钮 No comment provided by engineer. - + + Tap to activate profile. + No comment provided by engineer. + + Tap to join - 点击加入 + 点击加入 No comment provided by engineer. - + Tap to join incognito - 点击以加入隐身聊天 + 点击以加入隐身聊天 No comment provided by engineer. - + Tap to start a new chat - 点击开始一个新聊天 + 点击开始一个新聊天 No comment provided by engineer. - + Test failed at step %@. - 在步骤 %@ 上测试失败。 + 在步骤 %@ 上测试失败。 server test failure - + Test server - 测试服务器 + 测试服务器 No comment provided by engineer. - + Test servers - 测试服务器 + 测试服务器 No comment provided by engineer. - + Tests failed! - 测试失败! + 测试失败! No comment provided by engineer. - + Thank you for installing SimpleX Chat! - 感谢您安装 SimpleX Chat! + 感谢您安装 SimpleX Chat! No comment provided by engineer. - + + Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + 感谢用户——[通过 Weblate 贡献](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + No comment provided by engineer. + + + Thanks to the users – contribute via Weblate! + 感谢用户——通过 Weblate 做出贡献! + No comment provided by engineer. + + The 1st platform without any user identifiers – private by design. - 第一个没有任何用户标识符的平台 - 隐私设计. + 第一个没有任何用户标识符的平台 - 隐私设计. No comment provided by engineer. - + The app can notify you when you receive messages or contact requests - please open settings to enable. - 该应用可以在您收到消息或联系人请求时通知您 - 请打开设置以启用通知。 + 该应用可以在您收到消息或联系人请求时通知您——请打开设置以启用通知。 No comment provided by engineer. - + The attempt to change database passphrase was not completed. - 更改数据库密码的尝试未完成。 + 更改数据库密码的尝试未完成。 No comment provided by engineer. - + The connection you accepted will be cancelled! - 你接受的连接将会被取消! + 您接受的连接将被取消! No comment provided by engineer. - + The contact you shared this link with will NOT be able to connect! - 你分享的链接将不会让对方能够连接! + 您与之共享此链接的联系人将无法连接! No comment provided by engineer. - + The created archive is available via app Settings / Database / Old database archive. - 创建的归档文件可以通过应用设置/数据库/旧数据库归档访问。 + 创建的归档文件可以通过应用设置/数据库/旧数据库归档访问。 No comment provided by engineer. - + The group is fully decentralized – it is visible only to the members. - 该小组是完全去中心化的--它只对成员可见。 + 该小组是完全分散式的——它只对成员可见。 No comment provided by engineer. - - The microphone does not work when the app is in the background. - 该应用在后台时,麦克风无法正常工作。 + + The message will be deleted for all members. + 将为所有成员删除该消息。 No comment provided by engineer. - + + The message will be marked as moderated for all members. + 该消息将对所有成员显示为已审核。 + No comment provided by engineer. + + The next generation of private messaging - 下一代隐私讯息应用 + 下一代私密通讯软件 No comment provided by engineer. - + The old database was not removed during the migration, it can be deleted. - 旧数据库在迁移过程中没有被删除,可以进行删除。 + 旧数据库在迁移过程中没有被移除,可以删除。 No comment provided by engineer. - + The profile is only shared with your contacts. - 该资料仅与您的联系人共享。 + 该资料仅与您的联系人共享。 No comment provided by engineer. - + The sender will NOT be notified - 发送者将不会收到通知 + 发送者将不会收到通知 No comment provided by engineer. - + + The servers for new connections of your current chat profile **%@**. + 您当前聊天资料 **%@** 的新连接服务器。 + No comment provided by engineer. + + Theme - 主题 + 主题 No comment provided by engineer. - + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. - 此操作无法撤销,所有接收和发送的文件和媒体将被删除。低分辨率的图片将保留。 + 此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。 No comment provided by engineer. - + This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. - 此操作无法撤销 - 早于选择的时间发送和接收的消息将被删除。这可能需要几分钟的时间。 + 此操作无法撤消——早于所选的发送和接收的消息将被删除。 这可能需要几分钟时间。 No comment provided by engineer. - + This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. - 此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。 + 此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。 No comment provided by engineer. - + This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member). - 此功能为实验性质!只有当另一个客户端安装了4.2版本时才能正常工作。一旦地址更改完成,您应该在聊天中看到此消息-请检查您是否仍然可以从该联系人(或群组成员)接收消息。 + 此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。 No comment provided by engineer. - + This group no longer exists. - 这个群组不再存在。 + 该群组已不存在。 No comment provided by engineer. - + + This setting applies to messages in your current chat profile **%@**. + 此设置适用于您当前聊天资料 **%@** 中的消息。 + No comment provided by engineer. + + To ask any questions and to receive updates: - 要提出任何问题并接收更新,请: + 要提出任何问题并接收更新,请: No comment provided by engineer. - + To find the profile used for an incognito connection, tap the contact or group name on top of the chat. - 要查找用于隐身聊天连接的资料,点击聊天顶部的联系人或群组名。 + 要查找用于隐身聊天连接的资料,点击聊天顶部的联系人或群组名。 No comment provided by engineer. - + To make a new connection - 建立新连接 + 建立新连接 No comment provided by engineer. - - To prevent the call interruption, enable Do Not Disturb mode. - 为防止通话中断,请启用请勿打扰模式。 - No comment provided by engineer. - - + To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. - 为了保护隐私,SimpleX使用针对消息队列的标识符,而不是所有其他平台使用的用户ID,每个联系人都有独立的标识符。 + 为了保护隐私,SimpleX使用针对消息队列的标识符,而不是所有其他平台使用的用户ID,每个联系人都有独立的标识符。 No comment provided by engineer. - + + To protect timezone, image/voice files use UTC. + 为了保护时区,图像/语音文件使用 UTC。 + No comment provided by engineer. + + To protect your information, turn on SimpleX Lock. You will be prompted to complete authentication before this feature is enabled. - 为保护您的信息,请打开 SimpleX 锁定。 + 为保护您的信息,请打开 SimpleX 锁定。 在启用此功能之前,系统将提示您完成身份验证。 No comment provided by engineer. - + To record voice message please grant permission to use Microphone. - 请授权使用麦克风以录制语音消息。 + 请授权使用麦克风以录制语音消息。 No comment provided by engineer. - + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + + To support instant push notifications the chat database has to be migrated. - 为了支持即时推送通知,聊天数据库必须被迁移。 + 为了支持即时推送通知,聊天数据库必须被迁移。 No comment provided by engineer. - + To verify end-to-end encryption with your contact compare (or scan) the code on your devices. - 请验证与您联系人的端到端加密,请比较(或扫描)您设备上的代码。 + 要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。 No comment provided by engineer. - - Transfer images faster + + Transport isolation + 传输隔离 No comment provided by engineer. - + Trying to connect to the server used to receive messages from this contact (error: %@). - 正在尝试连接到用于从该联系人接收消息的服务器(错误:%@)。 + 正在尝试连接到用于从该联系人接收消息的服务器(错误:%@)。 No comment provided by engineer. - + Trying to connect to the server used to receive messages from this contact. - 尝试连接用于接收该联系人消息的服务器。 + 正在尝试连接到用于从该联系人接收消息的服务器。 No comment provided by engineer. - + Turn off - 关掉 + 关掉 No comment provided by engineer. - + Turn off notifications? - 关闭通知? + 关闭通知? No comment provided by engineer. - + Turn on - 打开 + 打开 No comment provided by engineer. - + Unable to record voice message - 无法录制语音消息 + 无法录制语音消息 No comment provided by engineer. - + Unexpected error: %@ - 意外错误: %@ + 意外错误: %@ No comment provided by engineer. - + Unexpected migration state - 未预料的迁移状态 + 未预料的迁移状态 No comment provided by engineer. - + + Unhide + No comment provided by engineer. + + + Unknown caller + 未知来电者 + callkit banner + + Unknown database error: %@ - 未知数据库错误:%@ + 未知数据库错误:%@ No comment provided by engineer. - + Unknown error - 未知错误 + 未知错误 No comment provided by engineer. - + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + 除非您使用 iOS 通话界面,否则请启用请勿打扰模式以避免打扰。 + No comment provided by engineer. + + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. - 除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。 + 除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。 如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。 No comment provided by engineer. - + Unlock - 解锁 + 解锁 authentication reason - + Unmute - 取消静音 + 取消静音 No comment provided by engineer. - + Unread - 未读 + 未读 No comment provided by engineer. - + Update - 更新 + 更新 No comment provided by engineer. - + Update .onion hosts setting? - 更新 .onion 主机设置? + 更新 .onion 主机设置? No comment provided by engineer. - + Update database passphrase - 更新数据库密码 + 更新数据库密码 No comment provided by engineer. - + Update network settings? - 更新网络设置? + 更新网络设置? No comment provided by engineer. - + + Update transport isolation mode? + 更新传输隔离模式? + No comment provided by engineer. + + Updating settings will re-connect the client to all servers. - 更新设置将重新连接客户端到所有服务器。 + 更新设置会将客户端重新连接到所有服务器。 No comment provided by engineer. - + Updating this setting will re-connect the client to all servers. - 更新此设置将重新连接客户端到所有服务器。 + 更新此设置将重新连接客户端到所有服务器。 No comment provided by engineer. - + Use .onion hosts - 使用 .onion 主机 + 使用 .onion 主机 No comment provided by engineer. - + Use SimpleX Chat servers? - 使用 SimpleX Chat 服务器? + 使用 SimpleX Chat 服务器? No comment provided by engineer. - + Use chat - 使用聊天 + 使用聊天 No comment provided by engineer. - + Use for new connections - 使用于新的连接 + 用于新连接 No comment provided by engineer. - + + Use iOS call interface + 使用 iOS 通话界面 + No comment provided by engineer. + + Use server - 使用服务器 + 使用服务器 No comment provided by engineer. - + + User profile + 用户资料 + No comment provided by engineer. + + Using .onion hosts requires compatible VPN provider. - 使用 .onion 主机需要兼容的 VPN 提供商。 + 使用 .onion 主机需要兼容的 VPN 提供商。 No comment provided by engineer. - + Using SimpleX Chat servers. - 使用SimpleX Chat服务器。 + 使用 SimpleX Chat 服务器。 No comment provided by engineer. - + Verify connection security - 验证连接安全 + 验证连接安全 No comment provided by engineer. - + Verify security code - 验证安全码 + 验证安全码 No comment provided by engineer. - + Via browser - 通过浏览器 + 通过浏览器 No comment provided by engineer. - + Video call - 视频通话 + 视频通话 No comment provided by engineer. - + View security code - 查看安全码 + 查看安全码 No comment provided by engineer. - + Voice messages - 语音消息 + 语音消息 chat feature - + Voice messages are prohibited in this chat. - 语音信息在此聊天中被禁止。 + 语音信息在此聊天中被禁止。 No comment provided by engineer. - + Voice messages are prohibited in this group. - 语音信息在该群组中被禁用。 + 语音信息在该群组中被禁用。 No comment provided by engineer. - + Voice messages prohibited! - 语音消息禁止发送! + 语音消息禁止发送! No comment provided by engineer. - + Voice message… - 语音消息…… + 语音消息…… No comment provided by engineer. - + Waiting for file - 等待文件中 + 等待文件中 No comment provided by engineer. - + Waiting for image - 等待图像中 + 等待图像中 No comment provided by engineer. - + WebRTC ICE servers - WebRTC ICE 服务器 + WebRTC ICE 服务器 No comment provided by engineer. - + Welcome %@! - 欢迎%@! + 欢迎%@! No comment provided by engineer. - + Welcome message - 欢迎信息 + 欢迎信息 No comment provided by engineer. - + What's new - 什么是新的 + 更新内容 No comment provided by engineer. - + When available - 当可用时 + 当可用时 No comment provided by engineer. - + When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. - 当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。 + 当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。 No comment provided by engineer. - + With optional welcome message. - 带有可选的欢迎消息。 + 带有可选的欢迎消息。 No comment provided by engineer. - + Wrong database passphrase - 数据库密码错误 + 数据库密码错误 No comment provided by engineer. - + Wrong passphrase! - 密码错误! + 密码错误! No comment provided by engineer. - + You - + No comment provided by engineer. - + You accepted connection - 你已接受了连接 + 您已接受连接 No comment provided by engineer. - + You allow - 你允许 + 您允许 No comment provided by engineer. - + + You already have a chat profile with the same display name. Please choose another name. + 您已经有一个显示名相同的聊天资料。请选择另一个名字。 + No comment provided by engineer. + + You are already connected to %@. - 你已经连接到 %@。 + 您已经连接到 %@。 No comment provided by engineer. - + You are connected to the server used to receive messages from this contact. - 您已连接到用于接收该联系人消息的服务器。 + 您已连接到用于接收该联系人消息的服务器。 No comment provided by engineer. - + You are invited to group - 你被邀请加入群组 + 您被邀请加入群组 No comment provided by engineer. - + + You can accept calls from lock screen, without device and app authentication. + 您可以从锁屏上接听电话,无需设备和应用程序的认证。 + No comment provided by engineer. + + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. - 您也可以通过点击链接进行连接。如果在浏览器中打开,请点击“在移动应用程序中打开”按钮。 + 您也可以通过点击链接进行连接。如果在浏览器中打开,请点击“在移动应用程序中打开”按钮。 No comment provided by engineer. - + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + + You can now send messages to %@ - 你现在可以给%@发送消息了 + 您现在可以给 %@ 发送消息 notification body - + You can set lock screen notification preview via settings. - 您可以通过设置来设置锁屏通知预览。 + 您可以通过设置来设置锁屏通知预览。 No comment provided by engineer. - + 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. - 您可以分享链接或二维码 - 任何人都可以加入该群组。如果您稍后删除了该群组,您不会失去群组成员。 + 您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。 No comment provided by engineer. - + You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. - 你可以分享你的地址作为链接或二维码 - 任何人都可以连接到你。如果你稍后删除了地址,你不会失去你的联系人。 + 您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 如果您以后删除它,您不会丢失您的联系人。 No comment provided by engineer. - + You can start chat via app Settings / Database or by restarting the app - 您可以通过应用程序设置/数据库或重新启动应用程序开始聊天 + 您可以通过应用程序设置/数据库或重新启动应用程序开始聊天 No comment provided by engineer. - + You can use markdown to format messages: - 你可以使用 Markdown 格式化消息: + 您可以使用 markdown 来编排消息格式: No comment provided by engineer. - + + You can't send messages! + 您无法发送消息! + No comment provided by engineer. + + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. - 你可以控制接收信息使用的服务器,你的联系人则使用你发送信息时所使用的服务器。 + 您可以控制接收信息使用的服务器,您的联系人则使用您发送信息时所使用的服务器。 No comment provided by engineer. - + You could not be verified; please try again. - 您的身份无法验证,请再试一次。 + 您的身份无法验证,请再试一次。 No comment provided by engineer. - + You have no chats - 您没有聊天记录 + 您没有聊天记录 No comment provided by engineer. - + You have to enter passphrase every time the app starts - it is not stored on the device. - 您必须在每次应用程序启动时输入密码——它不存储在设备上。 + 您必须在每次应用程序启动时输入密码——它不存储在设备上。 No comment provided by engineer. - + You invited your contact - 你邀请了你的联系人 + 您邀请了您的联系人 No comment provided by engineer. - + You joined this group - 您已加入此群组 + 您已加入此群组 No comment provided by engineer. - + You joined this group. Connecting to inviting group member. - 你已加入该群组。正在连接邀请的群组成员。 + 你加入了这个群组。连接到邀请组成员。 No comment provided by engineer. - + You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts. - 您只能在一台设备上使用最新版本的聊天数据库,否则您可能会停止接收来自某些联系人的消息。 + 您只能在一台设备上使用最新版本的聊天数据库,否则您可能会停止接收来自某些联系人的消息。 No comment provided by engineer. - + You need to allow your contact to send voice messages to be able to send them. - 您需要允许您的联系人发送语音消息,以便您能够发送语音消息。 + 您需要允许您的联系人发送语音消息,以便您能够发送语音消息。 No comment provided by engineer. - + You rejected group invitation - 您拒绝了群组邀请 + 您拒绝了群组邀请 No comment provided by engineer. - + You sent group invitation - 您发送了群组邀请 + 您发送了群组邀请 No comment provided by engineer. - + You will be connected to group when the group host's device is online, please wait or check later! - 您将在组主设备上线时连接到该群组,请稍等或稍后再检查! + 您将在组主设备上线时连接到该群组,请稍等或稍后再检查! No comment provided by engineer. - + You will be connected when your connection request is accepted, please wait or check later! - 你的连接请求被接受后将会连接成功,请稍等或稍后再查看! + 当您的连接请求被接受后,您将可以连接,请稍等或稍后检查! No comment provided by engineer. - + You will be connected when your contact's device is online, please wait or check later! - 您的联系人设备上线后,您将被连接,请稍等或稍后检查! + 当您的联系人设备在线时,您将可以连接,请稍等或稍后查看! No comment provided by engineer. - + You will be required to authenticate when you start or resume the app after 30 seconds in background. - 您将需要在应用在后台停留30秒后重新启动或恢复时进行身份验证。 + 当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。 No comment provided by engineer. - + You will join a group this link refers to and connect to its group members. - 您将加入此链接所指向的群组,并连接到其群组成员。 + 您将加入此链接指向的群组并连接到其群组成员。 No comment provided by engineer. - + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + + You will stop receiving messages from this group. Chat history will be preserved. - 此链接将会让您加入一个群组并连接到其群组成员。 + 您将停止接收来自该群组的消息。聊天记录将被保留。 No comment provided by engineer. - + You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile - 您正在尝试邀请与您共享隐身聊天资料的联系人加入您使用主要资料的群组 + 您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组 No comment provided by engineer. - + You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed - 您正在为该群组使用隐身聊天资料——为防止共享您的主要资料,邀请联系人是不允许的 + 您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人 No comment provided by engineer. - + Your ICE servers - 你的 ICE 服务器 + 您的 ICE 服务器 No comment provided by engineer. - + Your SMP servers - SMP服务器 + 您的 SMP 服务器 No comment provided by engineer. - + Your SimpleX contact address - 您的 SimpleX 联系人地址 + 您的 SimpleX 联系人地址 No comment provided by engineer. - + Your calls - 您的通话 + 您的通话 No comment provided by engineer. - + Your chat database - 您的聊天数据库 + 您的聊天数据库 No comment provided by engineer. - + Your chat database is not encrypted - set passphrase to encrypt it. - 您的聊天数据库未加密——设置密码来加密。 + 您的聊天数据库未加密——设置密码来加密。 No comment provided by engineer. - - Your chat profile - 您的聊天资料 - No comment provided by engineer. - - + Your chat profile will be sent to group members - 您的聊天资料将被发送给群组成员 + 您的聊天资料将被发送给群组成员 No comment provided by engineer. - + Your chat profile will be sent to your contact - 您的聊天资料将被发送给您的联系人 + 您的聊天资料将被发送给您的联系人 No comment provided by engineer. - + + Your chat profiles + 您的聊天资料 + No comment provided by engineer. + + Your chats - 您的聊天 + 您的聊天 No comment provided by engineer. - + Your contact address - 您的联系人地址 + 您的联系人地址 No comment provided by engineer. - + Your contact can scan it from the app. - 您的联系人可以通过应用程序扫描它。 + 您的联系人可以通过应用程序扫描它。 No comment provided by engineer. - + Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link). - 您的联系人需要在线才能完成连接。 + 您的联系人需要在线才能完成连接。 您可以取消此连接并删除联系人(然后尝试使用新链接)。 No comment provided by engineer. - + Your contact sent a file that is larger than currently supported maximum size (%@). - 抱歉,您的联系人发送的文件大小超过了当前支持的最大大小(%@)。 + 您的联系人发送的文件大于当前支持的最大大小 (%@)。 No comment provided by engineer. - + Your contacts can allow full message deletion. - 你的联系人可以允许完全删除消息。 + 您的联系人可以允许完全删除消息。 No comment provided by engineer. - + Your current chat database will be DELETED and REPLACED with the imported one. - 您当前的聊天数据库将被删除并替换为导入的数据库。 + 您当前的聊天数据库将被删除并替换为导入的数据库。 No comment provided by engineer. - + + Your current profile + 您当前的资料 + No comment provided by engineer. + + Your preferences - 您的偏好设置 + 您的偏好设置 No comment provided by engineer. - + Your privacy - 您的隐私设置 + 您的隐私设置 No comment provided by engineer. - + Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile. - 您的资料存储在您的设备上并仅与您的联系人共享。 + 您的资料存储在您的设备上并仅与您的联系人共享。 SimpleX 服务器无法看到您的资料。 No comment provided by engineer. - + Your profile will be sent to the contact that you received this link from - 您的资料将被发送到收到您链接的联系人那里 + 您的个人资料将发送给您收到此链接的联系人 No comment provided by engineer. - + Your profile, contacts and delivered messages are stored on your device. - 您的资料、联系人和发送的消息存储在您的设备上。 + 您的资料、联系人和发送的消息存储在您的设备上。 No comment provided by engineer. - + Your random profile - 您的随机资料 + 您的随机资料 No comment provided by engineer. - + Your server - 你的服务器 + 您的服务器 No comment provided by engineer. - + Your server address - 您的服务器地址 + 您的服务器地址 No comment provided by engineer. - + Your settings - 您的设置 + 您的设置 No comment provided by engineer. - + [Contribute](https://github.com/simplex-chat/simplex-chat#contribute) - [贡献](https://github.com/simplex-chat/simplex-chat#contribute) + [贡献](https://github.com/simplex-chat/simplex-chat#contribute) No comment provided by engineer. - + [Send us email](mailto:chat@simplex.chat) - [发送邮件至](mailto:chat@simplex.chat) + [发送邮件至](mailto:chat@simplex.chat) No comment provided by engineer. - + [Star on GitHub](https://github.com/simplex-chat/simplex-chat) - [在 GitHub 上点赞](https://github.com/simplex-chat/simplex-chat) + [在 GitHub 上加星](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. - + \_italic_ - \_斜体_ + \_斜体_ No comment provided by engineer. - + \`a + b` - \`a + b` + \`a + b` No comment provided by engineer. - + above, then choose: - 上面,然后选择: + 上面,然后选择: No comment provided by engineer. - + accepted call - 已接受通话 + 已接受通话 call status - + admin - 管理员 + 管理员 member role - + always - 一直 + 一直 pref value - + audio call (not e2e encrypted) - 语音通话(非端到端加密) + 语音通话(非端到端加密) No comment provided by engineer. - + bad message ID - 错误消息 ID + 错误消息 ID integrity error chat item - + bad message hash - 错误消息散列 + 错误消息散列 integrity error chat item - + bold - 加粗 + 加粗 No comment provided by engineer. - + call error - 通话错误 + 通话错误 call status - + call in progress - 通话中 + 通话中 call status - + calling… - 呼叫中…… + 呼叫中…… call status - + cancelled %@ - 已取消 %@ + 已取消 %@ feature offered item - + changed address for you - 为您更改地址 + 为您更改地址 chat item text - + changed role of %1$@ to %2$@ - 将 %1$@ 的角色更改为 %2$@ + 将 %1$@ 的角色更改为 %2$@ rcv group event chat item - + changed your role to %@ - 更改您的角色为 %@ + 更改您的角色为 %@ rcv group event chat item - + changing address for %@... - 更改 %@ 的地址中…… + 更改 %@... 的地址中 chat item text - + changing address... - 更改地址中…… + 更改地址中…… chat item text - + colored - 有色 + 有色 No comment provided by engineer. - + complete - 完整的 + 完整的 No comment provided by engineer. - + connect to SimpleX Chat developers. - 连接到SimpleX聊天开发人员。 + 连接到 SimpleX Chat 开发者。 No comment provided by engineer. - + connected - 已连接 + 已连接 No comment provided by engineer. - + connecting - 连接中 + 连接中 No comment provided by engineer. - + connecting (accepted) - 连接中(已接受) + 连接中(已接受) No comment provided by engineer. - + connecting (announced) - 连接中(已宣布) + 连接中(已宣布) No comment provided by engineer. - + connecting (introduced) - 连接中(已介绍) + 连接中(已介绍) No comment provided by engineer. - + connecting (introduction invitation) - 连接(介绍邀请) + 连接(介绍邀请) No comment provided by engineer. - + connecting call… - 连接通话中…… + 连接通话中…… call status - + connecting… - 连接中…… + 连接中…… chat list item title - + connection established - 连接已建立 + 连接已建立 chat list item title (it should not be shown - + connection:%@ - 连接:%@ + 连接:%@ connection information - + contact has e2e encryption - 联系人具有端到端加密 + 联系人具有端到端加密 No comment provided by engineer. - + contact has no e2e encryption - 联系人没有端到端加密 + 联系人没有端到端加密 No comment provided by engineer. - + creator - 创建者 + 创建者 No comment provided by engineer. - + default (%@) - 默认 (%@) + 默认 (%@) pref value - + deleted - 已删除 + 已删除 deleted chat item - + deleted group - 已删除群组 + 已删除群组 rcv group event chat item - + direct - 直接 + 直接 connection level description - + duplicate message - 重复的消息 + 重复的消息 integrity error chat item - + e2e encrypted - 端到端加密 + 端到端加密 No comment provided by engineer. - + enabled - 已启用 + 已启用 enabled status - + enabled for contact - 已为联系人启用 + 已为联系人启用 enabled status - + enabled for you - 为您启用 + 为您启用 enabled status - + ended - 已结束 + 已结束 No comment provided by engineer. - + ended call %@ - 结束通话 %@ + 结束通话 %@ call status - + error - 错误 + 错误 No comment provided by engineer. - + group deleted - 群组已删除 + 群组已删除 No comment provided by engineer. - + group profile updated - 群组资料已更新 + 群组资料已更新 snd group event chat item - + iOS Keychain is used to securely store passphrase - it allows receiving push notifications. - iOS钥匙串用于安全地存储密码——它允许接收推送通知。 + iOS钥匙串用于安全地存储密码——它允许接收推送通知。 No comment provided by engineer. - + iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications. - 在您重启应用或改变密码后,iOS钥匙串将被用来安全地存储密码——它将允许接收推送通知。 + 在您重启应用或改变密码后,iOS钥匙串将被用来安全地存储密码——它将允许接收推送通知。 No comment provided by engineer. - + incognito via contact address link - 通过联系人地址链接隐身聊天 + 通过联系人地址链接隐身聊天 chat list item description - + incognito via group link - 通过群组链接隐身聊天 + 通过群组链接隐身聊天 chat list item description - + incognito via one-time link - 通过一次性链接隐身聊天 + 通过一次性链接隐身聊天 chat list item description - + indirect (%d) - 间接 (%d) + 间接(%d) connection level description - + invalid chat - 无效聊天 + 无效聊天 invalid chat data - + invalid chat data - 无效聊天数据 + 无效聊天数据 No comment provided by engineer. - + invalid data - 无效数据 + 无效数据 invalid chat item - + invitation to group %@ - 邀请您加入群组 %@ + 邀请您加入群组 %@ group name - + invited - 已邀请 + 已邀请 No comment provided by engineer. - + invited %@ - 已邀请 %@ + 已邀请 %@ rcv group event chat item - + invited to connect - 已邀请连接 + 已邀请连接 chat list item title - + invited via your group link - 通过您的群组链接邀请 + 通过您的群组链接邀请 rcv group event chat item - + italic - 斜体 + 斜体 No comment provided by engineer. - + join as %@ - 以 %@ 身份加入 + 以 %@ 身份加入 No comment provided by engineer. - + left - 已离开 + 已离开 rcv group event chat item - + marked deleted - 标记为已删除 + 标记为已删除 marked deleted chat item preview text - + member - 成员 + 成员 member role - + connected - 已连接 + 已连接 rcv group event chat item - + message received - 消息已收到 + 消息已收到 notification - + missed call - 未接来电 + 未接来电 call status - - never - 从不 + + moderated + 已被管理员移除 + moderated chat item + + + moderated by %@ + 由 %@ 审核 No comment provided by engineer. - + + never + 从不 + No comment provided by engineer. + + new message - 新消息 + 新消息 notification - + no - + pref value - + no e2e encryption - 无端到端加密 + 无端到端加密 No comment provided by engineer. - + + observer + 观察者 + member role + + off - 关闭 + 关闭 enabled status group pref value - + offered %@ - 抛出了 %@ + 已提供 %@ feature offered item - + offered %1$@: %2$@ - 提供%1$@:%2$@ + 已提供 %1$@:%2$@ feature offered item - + on - + group pref value - + or chat with the developers - 或与开发者聊天 + 或与开发者聊天 No comment provided by engineer. - + owner - 所有者 + 所有者 member role - + peer-to-peer - 点对点 + 点对点 No comment provided by engineer. - + received answer… - 已收到回复…… + 已收到回复…… No comment provided by engineer. - + received confirmation… - 已受到确认…… + 已受到确认…… No comment provided by engineer. - + rejected call - 拒接来电 + 拒接来电 call status - + removed - 被删除了 + 已删除 No comment provided by engineer. - + removed %@ - 删除 %@ + 已删除 %@ rcv group event chat item - + removed you - 删除了你 + 已将您移除 rcv group event chat item - + sec - sec + network option - + secret - 保密 + 秘密 No comment provided by engineer. - + starting… - 启动中…… + 启动中…… No comment provided by engineer. - + strike - strike + 删去 No comment provided by engineer. - + this contact - 这个联系人 + 这个联系人 notification title - + unknown - 未知 + 未知 connection info - + updated group profile - 已更新的群组资料 + 已更新的群组资料 rcv group event chat item - + v%@ (%@) - v%@ (%@) + v%@ (%@) No comment provided by engineer. - + via contact address link - 通过联系地址链接 + 通过联系地址链接 chat list item description - + via group link - 通过群链接 + 通过群组链接 chat list item description - + via one-time link - 通过一次性链接 + 通过一次性链接 chat list item description - + via relay - 通过中继 + 通过中继 No comment provided by engineer. - + video call (not e2e encrypted) - 视频通话(非端到端加密) + 视频通话(非端到端加密) No comment provided by engineer. - + waiting for answer… - 等待答复中…… + 等待答复中…… No comment provided by engineer. - + waiting for confirmation… - 等待确认中…… + 等待确认中…… No comment provided by engineer. - + wants to connect to you! - 想要与您连接! + 想要与您连接! No comment provided by engineer. - + yes - + pref value - + you are invited to group - 你被邀请加入群组 + 您被邀请加入群组 No comment provided by engineer. - + + you are observer + 您是观察者 + No comment provided by engineer. + + you changed address - 你更改了地址 + 您已更改地址 chat item text - + you changed address for %@ - 你更改了%@的地址 + 您已更改 %@ 的地址 chat item text - + you changed role for yourself to %@ - 你已将自己的角色更改为%@ + 您已将自己的角色更改为 %@ snd group event chat item - + you changed role of %1$@ to %2$@ - 你将 %1$@ 的角色更改为 %2$@ + 您已将 %1$@ 的角色更改为 %2$@ snd group event chat item - + you left - 你已离开 + 您已离开 snd group event chat item - + you removed %@ - 你移除了%@ + 您已移除 %@ snd group event chat item - + you shared one-time link - 您分享了一次性链接 + 您分享了一次性链接 chat list item description - + you shared one-time link incognito - 您分享了一次性链接隐身聊天 + 您分享了一次性链接隐身聊天 chat list item description - + you: - 你: + 您: No comment provided by engineer. - + \~strike~ - \~strike~ + \~删去~ No comment provided by engineer. - - App version - 应用程序版本 - No comment provided by engineer. - - - Add profile - 添加资料 - No comment provided by engineer. - - - All chats and messages will be deleted - this cannot be undone! - 所有聊天记录和消息将被删除——这一行为无法撤销! - No comment provided by engineer. - - - Error deleting user profile - 删除用户资料错误 - No comment provided by engineer. - - - Delete files for all chat profiles - 为所有聊天资料删除文件 - No comment provided by engineer. - - - Delete user profile? - 删除用户资料? - No comment provided by engineer. - - - A separate TCP connection will be used **for each chat profile you have in the app**. - 一个单独的TCP连接将被用于**您在应用程序中的每个聊天资料**。 - No comment provided by engineer. - - - Core built at: %@ - 核心构建于:%@ - No comment provided by engineer. - - - Core version: v%@ - 核心版本: v%@ - No comment provided by engineer. - - - Error creating profile! - 创建资料错误! - No comment provided by engineer. - - - Different names, avatars and transport isolation. - 不同的名字、头像和传输隔离。 - No comment provided by engineer. - - - Duplicate display name! - 重复的显示名! - No comment provided by engineer. - - - Error switching profile! - 切换资料错误! - No comment provided by engineer. - - - Files & media - 文件和媒体 - No comment provided by engineer. - - - Italian interface - 意大利语界面 - No comment provided by engineer. - - - French interface - 法语界面 - No comment provided by engineer. - - - Your chat profiles - 您的聊天资料 - No comment provided by engineer. - - - Your chat profiles are stored locally, only on your device. - 您的聊天资料存储在本地,只在您的设备上。 - No comment provided by engineer. - - - Profile and server connections - 资料和服务器连接 - No comment provided by engineer. - - - Local profile data only - 仅本地配置文件数据 - No comment provided by engineer. - - - Multiple chat profiles - 多个聊天资料 - No comment provided by engineer. - - - User profile - 用户资料 - No comment provided by engineer. - - - By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). - 通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。 - No comment provided by engineer. - - - The servers for new connections of your current chat profile **%@**. - 您当前聊天资料 **%@** 的新连接服务器。 - No comment provided by engineer. - - - You already have a chat profile with the same display name. Please choose another name. - 您已经有一个显示名相同的聊天资料。请选择另一个名字。 - No comment provided by engineer. - - - This setting applies to messages in your current chat profile **%@**. - 此设置适用于您当前聊天资料 **%@** 中的消息。 - No comment provided by engineer. - - - Your current profile - 您当前的资料 - No comment provided by engineer. - - - Delete all files - 删除所有文件 - No comment provided by engineer. - - - Message draft - 消息草稿 - No comment provided by engineer. - - - More improvements are coming soon! - 更多改进即将推出! - No comment provided by engineer. - - - App version: v%@ - 应用版本:v%@ - No comment provided by engineer. - - - App build: %@ - 应用构建:%@ - No comment provided by engineer. - - - A separate TCP connection will be used **for each contact and group member**. -**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. - 每个联系人和群成员将使用一个独立的TCP连接。 -请注意:如果您有许多连接,将会消耗更多的电量和流量,并且某些连接可能会失败。 - No comment provided by engineer. - - - Open user profiles - 打开用户个人资料 - authentication reason - - - Reduced battery usage - 降低电池使用率 - No comment provided by engineer. - - - Preserve the last message draft, with attachments. - 保留最后的消息草稿及其附件。 - No comment provided by engineer. - - - Private filenames - 私密文件名 - No comment provided by engineer. - - - Transport isolation - 传输隔离 - No comment provided by engineer. - - - Thanks to the users – contribute via Weblate! - 感谢用户 - 通过 Weblate 贡献! - No comment provided by engineer. - - - To protect timezone, image/voice files use UTC. - 为了保护时区信息,图像和语音文件使用协调世界时(UTC)时间戳。 - No comment provided by engineer. - - - Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! - 感谢用户 - [通过 Weblate 贡献](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! - No comment provided by engineer. - - - Update transport isolation mode? - 更新传输隔离模式? - No comment provided by engineer. - - - moderated - 审核中 - moderated chat item -
- +
- + SimpleX - SimpleX + SimpleX Bundle name - + SimpleX needs camera access to scan QR codes to connect to other users and for video calls. - SimpleX 需要摄像头访问权限才能扫描二维码以连接到其他用户和进行视频通话。 + SimpleX 需要摄像头访问权限才能扫描二维码以连接到其他用户和进行视频通话。 Privacy - Camera Usage Description - + SimpleX uses Face ID for local authentication - SimpleX 使用Face ID进行本地身份验证 + SimpleX 使用Face ID进行本地身份验证 Privacy - Face ID Usage Description - + SimpleX needs microphone access for audio and video calls, and to record voice messages. - SimpleX 需要麦克风访问权限才能进行音频和视频通话,以及录制语音消息。 + SimpleX 需要麦克风访问权限才能进行音频和视频通话,以及录制语音消息。 Privacy - Microphone Usage Description - + SimpleX needs access to Photo Library for saving captured and received media - SimpleX需要访问照片库以保存已拍摄和接收的媒体 + SimpleX 需要访问照片库以保存已拍摄和接收的媒体 Privacy - Photo Library Additions Usage Description
- +
- + SimpleX NSE - SimpleX NSE + SimpleX NSE Bundle display name - + SimpleX NSE - SimpleX NSE + SimpleX NSE Bundle name - + Copyright © 2022 SimpleX Chat. All rights reserved. - 版权所有 © 2022 SimpleX Chat。保留所有权利。 + 版权所有 © 2022 SimpleX Chat。保留所有权利。 Copyright (human-readable) diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..aaa7f79bc --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.000", + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.533" + } + }, + "idiom" : "universal" + } + ], + "properties" : { + "localizable" : true + }, + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..124ddbcc3 --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "SimpleX NSE"; +/* Bundle name */ +"CFBundleName" = "SimpleX NSE"; +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. All rights reserved."; diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings @@ -0,0 +1 @@ + diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/en.lproj/Localizable.strings b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/en.lproj/Localizable.strings new file mode 100644 index 000000000..cf485752e --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/en.lproj/Localizable.strings @@ -0,0 +1,30 @@ +/* No comment provided by engineer. */ +"_italic_" = "\\_italic_"; + +/* No comment provided by engineer. */ +"**Add new contact**: to create your one-time QR Code for your contact." = "**Add new contact**: to create your one-time QR Code or link for your contact."; + +/* No comment provided by engineer. */ +"*bold*" = "\\*bold*"; + +/* No comment provided by engineer. */ +"`a + b`" = "\\`a + b`"; + +/* No comment provided by engineer. */ +"~strike~" = "\\~strike~"; + +/* call status */ +"connecting call" = "connecting call…"; + +/* No comment provided by engineer. */ +"Connecting server…" = "Connecting to server…"; + +/* No comment provided by engineer. */ +"Connecting server… (error: %@)" = "Connecting to server… (error: %@)"; + +/* rcv group event chat item */ +"member connected" = "connected"; + +/* No comment provided by engineer. */ +"No group!" = "Group not found!"; + diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings new file mode 100644 index 000000000..3af673b19 --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings @@ -0,0 +1,10 @@ +/* Bundle name */ +"CFBundleName" = "SimpleX"; +/* Privacy - Camera Usage Description */ +"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; +/* Privacy - Face ID Usage Description */ +"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; +/* Privacy - Photo Library Additions Usage Description */ +"NSPhotoLibraryAddUsageDescription" = "SimpleX needs access to Photo Library for saving captured and received media"; diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/contents.json b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/contents.json new file mode 100644 index 000000000..1ee239efb --- /dev/null +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/contents.json @@ -0,0 +1,12 @@ +{ + "developmentRegion" : "en", + "project" : "SimpleX.xcodeproj", + "targetLocale" : "zh-Hans", + "toolInfo" : { + "toolBuildNumber" : "14C18", + "toolID" : "com.apple.dt.xcode", + "toolName" : "Xcode", + "toolVersion" : "14.2" + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff b/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff index 28c31ea87..e56d71bd0 100644 --- a/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff @@ -5,25 +5,31 @@ - + + + No comment provided by engineer. - + + No comment provided by engineer. - + + No comment provided by engineer. - + + No comment provided by engineer. - + ( + ( No comment provided by engineer. @@ -3422,8 +3428,34 @@ SimpleX servers cannot see your profile. you: No comment provided by engineer. - + \~strike~ + \~刪除線~ + No comment provided by engineer. + + + Different names, avatars and transport isolation. + 不同的名稱、頭像和傳輸隔離。 + No comment provided by engineer. + + + Thanks to the users – contribute via Weblate! + 感謝用戶使用 Weblate 貢獻翻譯! + No comment provided by engineer. + + + To protect timezone, image/voice files use UTC. + 為隱藏時區資料,圖片及聲音檔案會以 UTC 時區記錄。 + No comment provided by engineer. + + + Open user profiles + 打開用戶個人資料 + authentication reason + + + You already have a chat profile with the same display name. Please choose another name. + 你所選用的新個人檔案顯示名稱和現有的其中一個個人檔案相同。請選擇其他名稱。 No comment provided by engineer. diff --git a/apps/ios/SimpleX NSE/NotificationService.swift b/apps/ios/SimpleX NSE/NotificationService.swift index b6efc2086..5eda201f2 100644 --- a/apps/ios/SimpleX NSE/NotificationService.swift +++ b/apps/ios/SimpleX NSE/NotificationService.swift @@ -8,13 +8,15 @@ import UserNotifications import OSLog +import StoreKit +import CallKit import SimpleXChat let logger = Logger() let suspendingDelay: UInt64 = 2_000_000_000 -typealias NtfStream = AsyncStream +typealias NtfStream = AsyncStream actor PendingNtfs { static let shared = PendingNtfs() @@ -31,13 +33,13 @@ actor PendingNtfs { } } - func readStream(_ id: String, for nse: NotificationService, msgCount: Int = 1) async { + func readStream(_ id: String, for nse: NotificationService, msgCount: Int = 1, showNotifications: Bool) async { logger.debug("PendingNtfs.readStream: \(id, privacy: .public) \(msgCount, privacy: .public)") if let s = ntfStreams[id] { logger.debug("PendingNtfs.readStream: has stream") var rcvCount = max(1, msgCount) for await ntf in s { - nse.setBestAttemptNtf(ntf) + nse.setBestAttemptNtf(showNotifications ? ntf : .empty) rcvCount -= 1 if rcvCount == 0 || ntf.categoryIdentifier == ntfCategoryCallInvitation { break } } @@ -45,7 +47,7 @@ actor PendingNtfs { } } - func writeStream(_ id: String, _ ntf: UNMutableNotificationContent) { + func writeStream(_ id: String, _ ntf: NSENotification) { logger.debug("PendingNtfs.writeStream: \(id, privacy: .public)") if let cont = ntfConts[id] { logger.debug("PendingNtfs.writeStream: writing ntf") @@ -54,16 +56,30 @@ actor PendingNtfs { } } +enum NSENotification { + case nse(notification: UNMutableNotificationContent) + case callkit(invitation: RcvCallInvitation) + case empty + var categoryIdentifier: String? { + switch self { + case let .nse(ntf): return ntf.categoryIdentifier + case .callkit: return ntfCategoryCallInvitation + case .empty: return nil + } + } +} class NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? - var bestAttemptNtf: UNMutableNotificationContent? + var bestAttemptNtf: NSENotification? var badgeCount: Int = 0 override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { logger.debug("NotificationService.didReceive") - setBestAttemptNtf(request.content.mutableCopy() as? UNMutableNotificationContent) + if let ntf = request.content.mutableCopy() as? UNMutableNotificationContent { + setBestAttemptNtf(ntf) + } self.contentHandler = contentHandler registerGroupDefaults() let appState = appStateGroupDefault.get() @@ -110,12 +126,16 @@ class NotificationService: UNNotificationServiceExtension { let ntfMsgInfo = apiGetNtfMessage(nonce: nonce, encNtfInfo: encNtfInfo) { logger.debug("NotificationService: receiveNtfMessages: apiGetNtfMessage \(String(describing: ntfMsgInfo), privacy: .public)") if let connEntity = ntfMsgInfo.connEntity { - setBestAttemptNtf(createConnectionEventNtf(ntfMsgInfo.user, connEntity)) + setBestAttemptNtf( + ntfMsgInfo.user.showNotifications + ? .nse(notification: createConnectionEventNtf(ntfMsgInfo.user, connEntity)) + : .empty + ) if let id = connEntity.id { Task { logger.debug("NotificationService: receiveNtfMessages: in Task, connEntity id \(id, privacy: .public)") await PendingNtfs.shared.createStream(id) - await PendingNtfs.shared.readStream(id, for: self, msgCount: ntfMsgInfo.ntfMessages.count) + await PendingNtfs.shared.readStream(id, for: self, msgCount: ntfMsgInfo.ntfMessages.count, showNotifications: ntfMsgInfo.user.showNotifications) deliverBestAttemptNtf() } } @@ -138,16 +158,40 @@ class NotificationService: UNNotificationServiceExtension { ntfBadgeCountGroupDefault.set(badgeCount) } - func setBestAttemptNtf(_ ntf: UNMutableNotificationContent?) { + func setBestAttemptNtf(_ ntf: UNMutableNotificationContent) { + setBestAttemptNtf(.nse(notification: ntf)) + } + + func setBestAttemptNtf(_ ntf: NSENotification) { logger.debug("NotificationService.setBestAttemptNtf") - bestAttemptNtf = ntf - bestAttemptNtf?.badge = badgeCount as NSNumber + if case let .nse(notification) = ntf { + notification.badge = badgeCount as NSNumber + bestAttemptNtf = .nse(notification: notification) + } else { + bestAttemptNtf = ntf + } } private func deliverBestAttemptNtf() { logger.debug("NotificationService.deliverBestAttemptNtf") - if let handler = contentHandler, let content = bestAttemptNtf { - handler(content) + if let handler = contentHandler, let ntf = bestAttemptNtf { + switch ntf { + case let .nse(content): handler(content) + case let .callkit(invitation): + CXProvider.reportNewIncomingVoIPPushPayload([ + "displayName": invitation.contact.displayName, + "contactId": invitation.contact.id, + "media": invitation.callType.media.rawValue + ]) { error in + if error == nil { + handler(UNMutableNotificationContent()) + } else { + logger.debug("reportNewIncomingVoIPPushPayload success to CallController for \(invitation.contact.id)") + handler(createCallInvitationNtf(invitation)) + } + } + case .empty: handler(UNMutableNotificationContent()) + } bestAttemptNtf = nil } } @@ -206,15 +250,18 @@ func chatRecvMsg() async -> ChatResponse? { } } -func receivedMsgNtf(_ res: ChatResponse) async -> (String, UNMutableNotificationContent)? { +private let isInChina = SKStorefront().countryCode == "CHN" +private func useCallKit() -> Bool { !isInChina && callKitEnabledGroupDefault.get() } + +func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotification)? { logger.debug("NotificationService processReceivedMsg: \(res.responseType)") switch res { case let .contactConnected(user, contact, _): - return (contact.id, createContactConnectedNtf(user, contact)) + return (contact.id, .nse(notification: createContactConnectedNtf(user, contact))) // case let .contactConnecting(contact): // TODO profile update case let .receivedContactRequest(user, contactRequest): - return (UserContact(contactRequest: contactRequest).id, createContactRequestNtf(user, contactRequest)) + return (UserContact(contactRequest: contactRequest).id, .nse(notification: createContactRequestNtf(user, contactRequest))) case let .newChatItem(user, aChatItem): let cInfo = aChatItem.chatInfo var cItem = aChatItem.chatItem @@ -235,9 +282,13 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, UNMutableNotification cItem = apiReceiveFile(fileId: file.fileId)?.chatItem ?? cItem } } - return cItem.showMutableNotification ? (aChatItem.chatId, createMessageReceivedNtf(user, cInfo, cItem)) : nil + return cItem.showMutableNotification ? (aChatItem.chatId, .nse(notification: createMessageReceivedNtf(user, cInfo, cItem))) : nil case let .callInvitation(invitation): - return (invitation.contact.id, createCallInvitationNtf(invitation)) + // Do not post it without CallKit support, iOS will stop launching the app without showing CallKit + return ( + invitation.contact.id, + useCallKit() ? .callkit(invitation: invitation) : .nse(notification: createCallInvitationNtf(invitation)) + ) default: logger.debug("NotificationService processReceivedMsg ignored event: \(res.responseType)") return nil diff --git a/apps/ios/SimpleX NSE/SimpleX NSE.entitlements b/apps/ios/SimpleX NSE/SimpleX NSE.entitlements index 51dea2c80..5793de373 100644 --- a/apps/ios/SimpleX NSE/SimpleX NSE.entitlements +++ b/apps/ios/SimpleX NSE/SimpleX NSE.entitlements @@ -10,5 +10,7 @@ $(AppIdentifierPrefix)chat.simplex.app + com.apple.developer.usernotifications.filtering + diff --git a/apps/ios/SimpleX NSE/es.lproj/InfoPlist.strings b/apps/ios/SimpleX NSE/es.lproj/InfoPlist.strings new file mode 100644 index 000000000..26efde907 --- /dev/null +++ b/apps/ios/SimpleX NSE/es.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "SimpleX NSE"; + +/* Bundle name */ +"CFBundleName" = "SimpleX NSE"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. Todos los derechos reservados."; + diff --git a/apps/ios/SimpleX NSE/es.lproj/Localizable.strings b/apps/ios/SimpleX NSE/es.lproj/Localizable.strings new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/apps/ios/SimpleX NSE/es.lproj/Localizable.strings @@ -0,0 +1 @@ + diff --git a/apps/ios/SimpleX NSE/zh-Hans.lproj/InfoPlist.strings b/apps/ios/SimpleX NSE/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 000000000..5b9d11a6e --- /dev/null +++ b/apps/ios/SimpleX NSE/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "SimpleX NSE"; + +/* Bundle name */ +"CFBundleName" = "SimpleX NSE"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "版权所有 © 2022 SimpleX Chat。保留所有权利。"; + diff --git a/apps/ios/SimpleX NSE/zh-Hans.lproj/Localizable.strings b/apps/ios/SimpleX NSE/zh-Hans.lproj/Localizable.strings new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/apps/ios/SimpleX NSE/zh-Hans.lproj/Localizable.strings @@ -0,0 +1 @@ + diff --git a/apps/ios/SimpleX--iOS--Info.plist b/apps/ios/SimpleX--iOS--Info.plist index 2097b2029..229a137e0 100644 --- a/apps/ios/SimpleX--iOS--Info.plist +++ b/apps/ios/SimpleX--iOS--Info.plist @@ -45,9 +45,14 @@ ITSAppUsesNonExemptEncryption + NSUserActivityTypes + + INStartCallIntent + UIBackgroundModes audio + bluetooth-central fetch remote-notification voip diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 2716ccdfa..b37d37ab8 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 1841594C978674A7B42EF0C0 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1841511920742C6E152E469F /* AnimatedImageView.swift */; }; 18415B0585EB5A9A0A7CA8CD /* PressedButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18415A7F0F189D87DEFEABCA /* PressedButtonStyle.swift */; }; 18415C6C56DBCEC2CBBD2F11 /* WebRTCClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18415323A4082FC92887F906 /* WebRTCClient.swift */; }; + 18415FEFE153C5920BFB7828 /* GroupWelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1841516F0CE5992B0EDFB377 /* GroupWelcomeView.swift */; }; 3C71477A281C0F6800CB4D4B /* www in Resources */ = {isa = PBXBuildFile; fileRef = 3C714779281C0F6800CB4D4B /* www */; }; 3C8C548928133C84000A3EC7 /* PasteToConnectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8C548828133C84000A3EC7 /* PasteToConnectView.swift */; }; 3CDBCF4227FAE51000354CDD /* ComposeLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CDBCF4127FAE51000354CDD /* ComposeLinkView.swift */; }; @@ -52,11 +53,11 @@ 5C5E5D3B2824468B00B0488A /* ActiveCallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5E5D3A2824468B00B0488A /* ActiveCallView.swift */; }; 5C5F2B6D27EBC3FE006A9D5F /* ImagePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5F2B6C27EBC3FE006A9D5F /* ImagePicker.swift */; }; 5C5F2B7027EBC704006A9D5F /* ProfileImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5F2B6F27EBC704006A9D5F /* ProfileImage.swift */; }; - 5C65DACB29C5D0DC003CEE45 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAC629C5D0DC003CEE45 /* libgmpxx.a */; }; - 5C65DACC29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAC729C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS.a */; }; - 5C65DACD29C5D0DC003CEE45 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAC829C5D0DC003CEE45 /* libffi.a */; }; - 5C65DACE29C5D0DC003CEE45 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAC929C5D0DC003CEE45 /* libgmp.a */; }; - 5C65DACF29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DACA29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS-ghc8.10.7.a */; }; + 5C65DAF329CBA429003CEE45 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAEE29CBA429003CEE45 /* libgmp.a */; }; + 5C65DAF429CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAEF29CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU-ghc8.10.7.a */; }; + 5C65DAF529CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAF029CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a */; }; + 5C65DAF629CBA429003CEE45 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAF129CBA429003CEE45 /* libgmpxx.a */; }; + 5C65DAF729CBA429003CEE45 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAF229CBA429003CEE45 /* libffi.a */; }; 5C65F343297D45E100B67AF3 /* VersionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F341297D3F3600B67AF3 /* VersionView.swift */; }; 5C6AD81327A834E300348BD7 /* NewChatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6AD81227A834E300348BD7 /* NewChatButton.swift */; }; 5C6BA667289BD954009B8ECC /* DismissSheets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6BA666289BD954009B8ECC /* DismissSheets.swift */; }; @@ -108,6 +109,7 @@ 5CBD285C29575B8E00EC2CF4 /* WhatsNewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBD285B29575B8E00EC2CF4 /* WhatsNewView.swift */; }; 5CBE6C12294487F7002D9531 /* VerifyCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBE6C11294487F7002D9531 /* VerifyCodeView.swift */; }; 5CBE6C142944CC12002D9531 /* ScanCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBE6C132944CC12002D9531 /* ScanCodeView.swift */; }; + 5CC036E029C488D500C0EF20 /* HiddenProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC036DF29C488D500C0EF20 /* HiddenProfileView.swift */; }; 5CC1C99227A6C7F5000D9FF6 /* QRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC1C99127A6C7F5000D9FF6 /* QRCode.swift */; }; 5CC1C99527A6CF7F000D9FF6 /* ShareSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */; }; 5CC2C0FC2809BF11000C35E3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FA2809BF11000C35E3 /* Localizable.strings */; }; @@ -167,6 +169,8 @@ 64F1CC3B28B39D8600CD1FB1 /* IncognitoHelp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F1CC3A28B39D8600CD1FB1 /* IncognitoHelp.swift */; }; D7197A1829AE89660055C05A /* WebRTC in Frameworks */ = {isa = PBXBuildFile; productRef = D7197A1729AE89660055C05A /* WebRTC */; }; D72A9088294BD7A70047C86D /* NativeTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A9087294BD7A70047C86D /* NativeTextEditor.swift */; }; + D741547829AF89AF0022400A /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547729AF89AF0022400A /* StoreKit.framework */; }; + D741547A29AF90B00022400A /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547929AF90B00022400A /* PushKit.framework */; }; D77B92DC2952372200A5A1CC /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = D77B92DB2952372200A5A1CC /* SwiftyGif */; }; D7F0E33929964E7E0068AF69 /* LZString in Frameworks */ = {isa = PBXBuildFile; productRef = D7F0E33829964E7E0068AF69 /* LZString */; }; /* End PBXBuildFile section */ @@ -229,6 +233,7 @@ /* Begin PBXFileReference section */ 1841511920742C6E152E469F /* AnimatedImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedImageView.swift; sourceTree = ""; }; + 1841516F0CE5992B0EDFB377 /* GroupWelcomeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupWelcomeView.swift; sourceTree = ""; }; 18415323A4082FC92887F906 /* WebRTCClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebRTCClient.swift; sourceTree = ""; }; 18415835CBD939A9ABDC108A /* UserPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserPicker.swift; sourceTree = ""; }; 18415845648CA4F5A8BCA272 /* UserProfilesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfilesView.swift; sourceTree = ""; }; @@ -276,11 +281,19 @@ 5C5E5D3C282447AB00B0488A /* CallTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallTypes.swift; sourceTree = ""; }; 5C5F2B6C27EBC3FE006A9D5F /* ImagePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagePicker.swift; sourceTree = ""; }; 5C5F2B6F27EBC704006A9D5F /* ProfileImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileImage.swift; sourceTree = ""; }; - 5C65DAC629C5D0DC003CEE45 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5C65DAC729C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS.a"; sourceTree = ""; }; - 5C65DAC829C5D0DC003CEE45 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 5C65DAC929C5D0DC003CEE45 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5C65DACA29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS-ghc8.10.7.a"; sourceTree = ""; }; + 5C65DAE429C77136003CEE45 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 5C65DAE529C77136003CEE45 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 5C65DAE629C771B9003CEE45 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; + 5C65DAE729C771B9003CEE45 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; + 5C65DAEA29CB8867003CEE45 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + 5C65DAEB29CB8867003CEE45 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + 5C65DAEC29CB8908003CEE45 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = "es.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; + 5C65DAED29CB8908003CEE45 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 5C65DAEE29CBA429003CEE45 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5C65DAEF29CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU-ghc8.10.7.a"; sourceTree = ""; }; + 5C65DAF029CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a"; sourceTree = ""; }; + 5C65DAF129CBA429003CEE45 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5C65DAF229CBA429003CEE45 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 5C65F341297D3F3600B67AF3 /* VersionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionView.swift; sourceTree = ""; }; 5C6AD81227A834E300348BD7 /* NewChatButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewChatButton.swift; sourceTree = ""; }; 5C6BA666289BD954009B8ECC /* DismissSheets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DismissSheets.swift; sourceTree = ""; }; @@ -353,6 +366,7 @@ 5CBD285B29575B8E00EC2CF4 /* WhatsNewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatsNewView.swift; sourceTree = ""; }; 5CBE6C11294487F7002D9531 /* VerifyCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifyCodeView.swift; sourceTree = ""; }; 5CBE6C132944CC12002D9531 /* ScanCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanCodeView.swift; sourceTree = ""; }; + 5CC036DF29C488D500C0EF20 /* HiddenProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenProfileView.swift; sourceTree = ""; }; 5CC1C99127A6C7F5000D9FF6 /* QRCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCode.swift; sourceTree = ""; }; 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareSheet.swift; sourceTree = ""; }; 5CC2C0FB2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; @@ -411,6 +425,8 @@ 64E972062881BB22008DBC02 /* CIGroupInvitationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIGroupInvitationView.swift; sourceTree = ""; }; 64F1CC3A28B39D8600CD1FB1 /* IncognitoHelp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncognitoHelp.swift; sourceTree = ""; }; D72A9087294BD7A70047C86D /* NativeTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeTextEditor.swift; sourceTree = ""; }; + D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; }; D7AA2C3429A936B400737B40 /* MediaEncryption.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = MediaEncryption.playground; path = Shared/MediaEncryption.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; /* End PBXFileReference section */ @@ -420,9 +436,11 @@ buildActionMask = 2147483647; files = ( 5CE2BA702845308900EC33A6 /* SimpleXChat.framework in Frameworks */, + D741547829AF89AF0022400A /* StoreKit.framework in Frameworks */, D7197A1829AE89660055C05A /* WebRTC in Frameworks */, D77B92DC2952372200A5A1CC /* SwiftyGif in Frameworks */, D7F0E33929964E7E0068AF69 /* LZString in Frameworks */, + D741547A29AF90B00022400A /* PushKit.framework in Frameworks */, 646BB38C283BEEB9001CE359 /* LocalAuthentication.framework in Frameworks */, 5C8F01CD27A6F0D8007D2C8D /* CodeScanner in Frameworks */, ); @@ -447,13 +465,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5C65DACB29C5D0DC003CEE45 /* libgmpxx.a in Frameworks */, + 5C65DAF629CBA429003CEE45 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, + 5C65DAF329CBA429003CEE45 /* libgmp.a in Frameworks */, + 5C65DAF429CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU-ghc8.10.7.a in Frameworks */, + 5C65DAF729CBA429003CEE45 /* libffi.a in Frameworks */, + 5C65DAF529CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 5C65DACD29C5D0DC003CEE45 /* libffi.a in Frameworks */, - 5C65DACE29C5D0DC003CEE45 /* libgmp.a in Frameworks */, - 5C65DACC29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS.a in Frameworks */, - 5C65DACF29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS-ghc8.10.7.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -512,11 +530,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5C65DAC829C5D0DC003CEE45 /* libffi.a */, - 5C65DAC929C5D0DC003CEE45 /* libgmp.a */, - 5C65DAC629C5D0DC003CEE45 /* libgmpxx.a */, - 5C65DACA29C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS-ghc8.10.7.a */, - 5C65DAC729C5D0DC003CEE45 /* libHSsimplex-chat-4.5.4.2-HCtiem6UXOf38lPV2PRbjS.a */, + 5C65DAF229CBA429003CEE45 /* libffi.a */, + 5C65DAEE29CBA429003CEE45 /* libgmp.a */, + 5C65DAF129CBA429003CEE45 /* libgmpxx.a */, + 5C65DAEF29CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU-ghc8.10.7.a */, + 5C65DAF029CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a */, ); path = Libraries; sourceTree = ""; @@ -524,6 +542,8 @@ 5C764E7A279C71D4000C6508 /* Frameworks */ = { isa = PBXGroup; children = ( + D741547929AF90B00022400A /* PushKit.framework */, + D741547729AF89AF0022400A /* StoreKit.framework */, 646BB38B283BEEB9001CE359 /* LocalAuthentication.framework */, 5CDCAD6028187D7900503DA2 /* libz.tbd */, 5CDCAD5E28187D4A00503DA2 /* libiconv.tbd */, @@ -661,6 +681,7 @@ 5CB924E327A8683A00ACCCDD /* UserAddress.swift */, 5CCA7DF22905735700C8FEBA /* AcceptRequestsView.swift */, 5CB924E027A867BA00ACCCDD /* UserProfile.swift */, + 5CC036DF29C488D500C0EF20 /* HiddenProfileView.swift */, 5C577F7C27C83AA10006112D /* MarkdownHelp.swift */, 5C93292E29239A170090FFF9 /* SMPServersView.swift */, 5C93293029239BED0090FFF9 /* SMPServerView.swift */, @@ -784,6 +805,7 @@ 647F090D288EA27B00644C40 /* GroupMemberInfoView.swift */, 5C9C2DA42894777E00CC63B1 /* GroupProfileView.swift */, 6448BBB528FA9D56000D2AB9 /* GroupLinkView.swift */, + 1841516F0CE5992B0EDFB377 /* GroupWelcomeView.swift */, ); path = Group; sourceTree = ""; @@ -928,6 +950,8 @@ it, nl, cs, + "zh-Hans", + es, ); mainGroup = 5CA059BD279559F40002BEB4; packageReferences = ( @@ -1012,6 +1036,7 @@ 5C029EAA283942EA004A9677 /* CallController.swift in Sources */, 5CCA7DF32905735700C8FEBA /* AcceptRequestsView.swift in Sources */, 5CBE6C142944CC12002D9531 /* ScanCodeView.swift in Sources */, + 5CC036E029C488D500C0EF20 /* HiddenProfileView.swift in Sources */, 5C5346A827B59A6A004DF848 /* ChatHelp.swift in Sources */, 5CFA59C42860BC6200863A68 /* MigrateToAppGroupView.swift in Sources */, 648010AB281ADD15009009B9 /* CIFileView.swift in Sources */, @@ -1113,6 +1138,7 @@ 1841560FD1CD447955474C1D /* UserProfilesView.swift in Sources */, 18415C6C56DBCEC2CBBD2F11 /* WebRTCClient.swift in Sources */, 184152CEF68D2336FC2EBCB0 /* CallViewRenderers.swift in Sources */, + 18415FEFE153C5920BFB7828 /* GroupWelcomeView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1188,6 +1214,8 @@ 5CA85D0D297219EF0095AF72 /* it */, 5C84FE9429A2179C00D95B1A /* nl */, 5C8B41CC29AF44CF00888272 /* cs */, + 5C65DAE729C771B9003CEE45 /* zh-Hans */, + 5C65DAED29CB8908003CEE45 /* es */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1202,6 +1230,8 @@ 5CA85D0B297218AA0095AF72 /* it */, 5C84FE9229A216C800D95B1A /* nl */, 5C8B41CA29AF41BC00888272 /* cs */, + 5C65DAE529C77136003CEE45 /* zh-Hans */, + 5C65DAEB29CB8867003CEE45 /* es */, ); name = Localizable.strings; sourceTree = ""; @@ -1216,6 +1246,8 @@ 5CA85D0A297218AA0095AF72 /* it */, 5C84FE9129A216C800D95B1A /* nl */, 5C8B41C929AF41BC00888272 /* cs */, + 5C65DAE429C77136003CEE45 /* zh-Hans */, + 5C65DAEA29CB8867003CEE45 /* es */, ); name = Localizable.strings; sourceTree = ""; @@ -1229,6 +1261,8 @@ 5CA85D0C297219EF0095AF72 /* it */, 5C84FE9329A2179C00D95B1A /* nl */, 5C8B41CB29AF44CF00888272 /* cs */, + 5C65DAE629C771B9003CEE45 /* zh-Hans */, + 5C65DAEC29CB8908003CEE45 /* es */, ); name = "SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; @@ -1362,7 +1396,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 128; + CURRENT_PROJECT_VERSION = 131; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1383,7 +1417,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 4.5.4; + MARKETING_VERSION = 4.6; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app; PRODUCT_NAME = SimpleX; SDKROOT = iphoneos; @@ -1404,7 +1438,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 128; + CURRENT_PROJECT_VERSION = 131; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1425,7 +1459,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 4.5.4; + MARKETING_VERSION = 4.6; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app; PRODUCT_NAME = SimpleX; SDKROOT = iphoneos; @@ -1482,8 +1516,9 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 128; + CURRENT_PROJECT_VERSION = 131; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; @@ -1496,9 +1531,10 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 4.5.4; + MARKETING_VERSION = 4.6; PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; @@ -1512,8 +1548,9 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 128; + CURRENT_PROJECT_VERSION = 131; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; @@ -1526,9 +1563,10 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 4.5.4; + MARKETING_VERSION = 4.6; PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/apps/ios/SimpleX.xcodeproj/xcshareddata/xcschemes/SimpleX NSE.xcscheme b/apps/ios/SimpleX.xcodeproj/xcshareddata/xcschemes/SimpleX NSE.xcscheme new file mode 100644 index 000000000..e01b34199 --- /dev/null +++ b/apps/ios/SimpleX.xcodeproj/xcshareddata/xcschemes/SimpleX NSE.xcscheme @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/ios/SimpleXChat/API.swift b/apps/ios/SimpleXChat/API.swift index 54cdfb2d3..11eec7f87 100644 --- a/apps/ios/SimpleXChat/API.swift +++ b/apps/ios/SimpleXChat/API.swift @@ -151,6 +151,11 @@ public func chatResponse(_ s: String) -> ChatResponse { let chat = try? parseChatData(jChat) { return .apiChat(user: user, chat: chat) } + } else if type == "chatCmdError" { + if let jError = jResp["chatCmdError"] as? NSDictionary { + let user: User? = try? decodeObject(jError["user_"] as Any) + return .chatCmdError(user_: user, chatError: .invalidJSON(json: prettyJSON(jError) ?? "")) + } } } json = prettyJSON(j) @@ -185,12 +190,21 @@ func prettyJSON(_ obj: Any) -> String? { public func responseError(_ err: Error) -> String { if let r = err as? ChatResponse { - return String(describing: r) + switch r { + case let .chatCmdError(_, chatError): return chatErrorString(chatError) + case let .chatError(_, chatError): return chatErrorString(chatError) + default: return String(describing: r) + } } else { - return err.localizedDescription + return String(describing: err) } } +func chatErrorString(_ err: ChatError) -> String { + if case let .invalidJSON(json) = err { return json } + return String(describing: err) +} + public enum DBMigrationResult: Decodable, Equatable { case ok case errorNotADatabase(dbFile: String) diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 6cd1a5a67..ededd5b26 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -16,8 +16,12 @@ public enum ChatCommand { case showActiveUser case createActiveUser(profile: Profile) case listUsers - case apiSetActiveUser(userId: Int64) - case apiDeleteUser(userId: Int64, delSMPQueues: Bool) + case apiSetActiveUser(userId: Int64, viewPwd: String?) + case apiHideUser(userId: Int64, viewPwd: String) + case apiUnhideUser(userId: Int64, viewPwd: String?) + case apiMuteUser(userId: Int64, viewPwd: String?) + case apiUnmuteUser(userId: Int64, viewPwd: String?) + case apiDeleteUser(userId: Int64, delSMPQueues: Bool, viewPwd: String?) case startChat(subscribe: Bool, expire: Bool) case apiStopChat case apiActivateChat @@ -103,8 +107,12 @@ public enum ChatCommand { case .showActiveUser: return "/u" case let .createActiveUser(profile): return "/create user \(profile.displayName) \(profile.fullName)" case .listUsers: return "/users" - case let .apiSetActiveUser(userId): return "/_user \(userId)" - case let .apiDeleteUser(userId, delSMPQueues): return "/_delete user \(userId) del_smp=\(onOff(delSMPQueues))" + case let .apiSetActiveUser(userId, viewPwd): return "/_user \(userId)\(maybePwd(viewPwd))" + case let .apiHideUser(userId, viewPwd): return "/_hide user \(userId) \(encodeJSON(viewPwd))" + case let .apiUnhideUser(userId, viewPwd): return "/_unhide user \(userId)\(maybePwd(viewPwd))" + case let .apiMuteUser(userId, viewPwd): return "/_mute user \(userId)\(maybePwd(viewPwd))" + case let .apiUnmuteUser(userId, viewPwd): return "/_unmute user \(userId)\(maybePwd(viewPwd))" + case let .apiDeleteUser(userId, delSMPQueues, viewPwd): return "/_delete user \(userId) del_smp=\(onOff(delSMPQueues))\(maybePwd(viewPwd))" case let .startChat(subscribe, expire): return "/_start subscribe=\(onOff(subscribe)) expire=\(onOff(expire))" case .apiStopChat: return "/_stop" case .apiActivateChat: return "/_app activate" @@ -202,6 +210,10 @@ public enum ChatCommand { case .createActiveUser: return "createActiveUser" case .listUsers: return "listUsers" case .apiSetActiveUser: return "apiSetActiveUser" + case .apiHideUser: return "apiHideUser" + case .apiUnhideUser: return "apiUnhideUser" + case .apiMuteUser: return "apiMuteUser" + case .apiUnmuteUser: return "apiUnmuteUser" case .apiDeleteUser: return "apiDeleteUser" case .startChat: return "startChat" case .apiStopChat: return "apiStopChat" @@ -304,6 +316,18 @@ public enum ChatCommand { switch self { case let .apiStorageEncryption(cfg): return .apiStorageEncryption(config: DBEncryptionConfig(currentKey: obfuscate(cfg.currentKey), newKey: obfuscate(cfg.newKey))) + case let .apiSetActiveUser(userId, viewPwd): + return .apiSetActiveUser(userId: userId, viewPwd: obfuscate(viewPwd)) + case let .apiHideUser(userId, viewPwd): + return .apiHideUser(userId: userId, viewPwd: obfuscate(viewPwd)) + case let .apiUnhideUser(userId, viewPwd): + return .apiUnhideUser(userId: userId, viewPwd: obfuscate(viewPwd)) + case let .apiMuteUser(userId, viewPwd): + return .apiMuteUser(userId: userId, viewPwd: obfuscate(viewPwd)) + case let .apiUnmuteUser(userId, viewPwd): + return .apiUnmuteUser(userId: userId, viewPwd: obfuscate(viewPwd)) + case let .apiDeleteUser(userId, delSMPQueues, viewPwd): + return .apiDeleteUser(userId: userId, delSMPQueues: delSMPQueues, viewPwd: obfuscate(viewPwd)) default: return self } } @@ -312,9 +336,21 @@ public enum ChatCommand { s == "" ? "" : "***" } + private func obfuscate(_ s: String?) -> String? { + if let s = s { + return obfuscate(s) + } else { + return nil + } + } + private func onOff(_ b: Bool) -> String { b ? "on" : "off" } + + private func maybePwd(_ pwd: String?) -> String { + pwd == "" || pwd == nil ? "" : " " + encodeJSON(pwd) + } } struct APIResponse: Decodable { @@ -348,6 +384,7 @@ public enum ChatResponse: Decodable, Error { case chatCleared(user: User, chatInfo: ChatInfo) case userProfileNoChange(user: User) case userProfileUpdated(user: User, fromProfile: Profile, toProfile: Profile) + case userPrivacy(user: User) case contactAliasUpdated(user: User, toContact: Contact) case connectionAliasUpdated(user: User, toConnection: PendingContactConnection) case contactPrefsUpdated(user: User, fromContact: Contact, toContact: Contact) @@ -424,8 +461,8 @@ public enum ChatResponse: Decodable, Error { case contactConnectionDeleted(user: User, connection: PendingContactConnection) case versionInfo(versionInfo: CoreVersionInfo) case cmdOk(user: User?) - case chatCmdError(user: User?, chatError: ChatError) - case chatError(user: User?, chatError: ChatError) + case chatCmdError(user_: User?, chatError: ChatError) + case chatError(user_: User?, chatError: ChatError) public var responseType: String { get { @@ -456,6 +493,7 @@ public enum ChatResponse: Decodable, Error { case .chatCleared: return "chatCleared" case .userProfileNoChange: return "userProfileNoChange" case .userProfileUpdated: return "userProfileUpdated" + case .userPrivacy: return "userPrivacy" case .contactAliasUpdated: return "contactAliasUpdated" case .connectionAliasUpdated: return "connectionAliasUpdated" case .contactPrefsUpdated: return "contactPrefsUpdated" @@ -564,6 +602,7 @@ public enum ChatResponse: Decodable, Error { case let .chatCleared(u, chatInfo): return withUser(u, String(describing: chatInfo)) case .userProfileNoChange: return noDetails case let .userProfileUpdated(u, _, toProfile): return withUser(u, String(describing: toProfile)) + case let .userPrivacy(u): return withUser(u, "") case let .contactAliasUpdated(u, toContact): return withUser(u, String(describing: toContact)) case let .connectionAliasUpdated(u, toConnection): return withUser(u, String(describing: toConnection)) case let .contactPrefsUpdated(u, fromContact, toContact): return withUser(u, "fromContact: \(String(describing: fromContact))\ntoContact: \(String(describing: toContact))") @@ -1083,6 +1122,7 @@ public enum ChatError: Decodable { case errorAgent(agentError: AgentErrorType) case errorStore(storeError: StoreError) case errorDatabase(databaseError: DatabaseError) + case invalidJSON(json: String) } public enum ChatErrorType: Decodable { diff --git a/apps/ios/SimpleXChat/AppGroup.swift b/apps/ios/SimpleXChat/AppGroup.swift index 6b31d661a..3ea392c22 100644 --- a/apps/ios/SimpleXChat/AppGroup.swift +++ b/apps/ios/SimpleXChat/AppGroup.swift @@ -29,8 +29,9 @@ let GROUP_DEFAULT_NETWORK_TCP_KEEP_CNT = "networkTCPKeepCnt" let GROUP_DEFAULT_INCOGNITO = "incognito" let GROUP_DEFAULT_STORE_DB_PASSPHRASE = "storeDBPassphrase" let GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE = "initialRandomDBPassphrase" +public let GROUP_DEFAULT_CALL_KIT_ENABLED = "callKitEnabled" -let APP_GROUP_NAME = "group.chat.simplex.app" +public let APP_GROUP_NAME = "group.chat.simplex.app" public let groupDefaults = UserDefaults(suiteName: APP_GROUP_NAME)! @@ -50,7 +51,8 @@ public func registerGroupDefaults() { GROUP_DEFAULT_STORE_DB_PASSPHRASE: true, GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE: false, GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES: true, - GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: false + GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: false, + GROUP_DEFAULT_CALL_KIT_ENABLED: true ]) } @@ -119,6 +121,8 @@ public let storeDBPassphraseGroupDefault = BoolDefault(defaults: groupDefaults, public let initialRandomDBPassphraseGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE) +public let callKitEnabledGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_CALL_KIT_ENABLED) + public class DateDefault { var defaults: UserDefaults var key: String diff --git a/apps/ios/SimpleXChat/CallTypes.swift b/apps/ios/SimpleXChat/CallTypes.swift index 915ccbd8f..227a1fbda 100644 --- a/apps/ios/SimpleXChat/CallTypes.swift +++ b/apps/ios/SimpleXChat/CallTypes.swift @@ -40,7 +40,6 @@ public struct WebRTCExtraInfo: Codable { public struct RcvCallInvitation: Decodable { public var user: User public var contact: Contact - public var callkitUUID: UUID? = UUID() public var callType: CallType public var sharedKey: String? public var callTs: Date @@ -53,6 +52,12 @@ public struct RcvCallInvitation: Decodable { } } + public var callkitUUID: UUID? = UUID() + + private enum CodingKeys: String, CodingKey { + case user, contact, callType, sharedKey, callTs + } + public static let sampleData = RcvCallInvitation( user: User.sampleData, contact: Contact.sampleData, diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index d88c4c581..d5c692f1f 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -22,18 +22,33 @@ public struct User: Decodable, NamedChat, Identifiable { public var image: String? { get { profile.image } } public var localAlias: String { get { "" } } + public var showNtfs: Bool + public var viewPwdHash: UserPwdHash? + public var id: Int64 { userId } + public var hidden: Bool { viewPwdHash != nil } + + public var showNotifications: Bool { + activeUser || showNtfs + } + public static let sampleData = User( userId: 1, userContactId: 1, localDisplayName: "alice", profile: LocalProfile.sampleData, fullPreferences: FullPreferences.sampleData, - activeUser: true + activeUser: true, + showNtfs: true ) } +public struct UserPwdHash: Decodable { + public var hash: String + public var salt: String +} + public struct UserInfo: Decodable, Identifiable { public var user: User public var unreadCount: Int @@ -1517,7 +1532,7 @@ public struct GroupMember: Identifiable, Decodable { public func canChangeRoleTo(groupInfo: GroupInfo) -> [GroupMemberRole]? { if !canBeRemoved(groupInfo: groupInfo) { return nil } let userRole = groupInfo.membership.memberRole - return GroupMemberRole.allCases.filter { $0 <= userRole && $0 != .observer } + return GroupMemberRole.allCases.filter { $0 <= userRole } } public var memberIncognito: Bool { diff --git a/apps/ios/SimpleXChat/SimpleX.h b/apps/ios/SimpleXChat/SimpleX.h index 36f716223..5d5f1e355 100644 --- a/apps/ios/SimpleXChat/SimpleX.h +++ b/apps/ios/SimpleXChat/SimpleX.h @@ -22,5 +22,6 @@ extern char *chat_recv_msg(chat_ctrl ctl); extern char *chat_recv_msg_wait(chat_ctrl ctl, int wait); extern char *chat_parse_markdown(char *str); extern char *chat_parse_server(char *str); +extern char *chat_password_hash(char *pwd, char *salt); extern char *chat_encrypt_media(char *key, char *frame, int len); extern char *chat_decrypt_media(char *key, char *frame, int len); diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index a5f9f506e..5d3abdf91 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -212,7 +212,7 @@ "above, then choose:" = "výše, pak vyberte:"; /* No comment provided by engineer. */ -"Accent color" = "Barva přízvuku"; +"Accent color" = "Zbarvení"; /* accept contact request via notification accept incoming call via notification */ @@ -300,7 +300,7 @@ "Allow your contacts to irreversibly delete sent messages." = "Umožněte svým kontaktům nevratně odstranit odeslané zprávy."; /* No comment provided by engineer. */ -"Allow your contacts to send disappearing messages." = "Umožněte svým kontaktům odesílat mizející zprávy."; +"Allow your contacts to send disappearing messages." = "Umožněte svým kontaktům odesílat mizící zprávy."; /* No comment provided by engineer. */ "Allow your contacts to send voice messages." = "Povolte svým kontaktům odesílání hlasových zpráv."; @@ -311,6 +311,9 @@ /* pref value */ "always" = "vždy"; +/* No comment provided by engineer. */ +"Always use relay" = "Spojení přes relé"; + /* No comment provided by engineer. */ "Answer call" = "Přijmout hovor"; @@ -341,6 +344,9 @@ /* No comment provided by engineer. */ "Authentication failed" = "Ověření selhalo"; +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "Před spojením hovoru je vyžadováno ověření, ale můžete zmeškat hovory."; + /* No comment provided by engineer. */ "Authentication unavailable" = "Ověřování není k dispozici"; @@ -369,7 +375,7 @@ "Both you and your contact can irreversibly delete sent messages." = "Vy i váš kontakt můžete nevratně mazat odeslané zprávy."; /* No comment provided by engineer. */ -"Both you and your contact can send disappearing messages." = "Vy i váš kontakt můžete posílat mizející zprávy."; +"Both you and your contact can send disappearing messages." = "Vy i váš kontakt můžete posílat mizící zprávy."; /* No comment provided by engineer. */ "Both you and your contact can send voice messages." = "Hlasové zprávy můžete posílat vy i váš kontakt."; @@ -533,9 +539,6 @@ /* No comment provided by engineer. */ "Connect via one-time link?" = "Připojit se jednorázovým odkazem?"; -/* No comment provided by engineer. */ -"Connect via relay" = "Spojení přes relé"; - /* No comment provided by engineer. */ "connected" = "připojeno"; @@ -591,7 +594,7 @@ "connection:%@" = "připojení:%@"; /* No comment provided by engineer. */ -"Contact allows" = "Kontakt povoluje"; +"Contact allows" = "Kontakt povolil"; /* No comment provided by engineer. */ "Contact already exists" = "Kontakt již existuje"; @@ -744,7 +747,7 @@ "Delete chat archive?" = "Smazat archiv chatu?"; /* No comment provided by engineer. */ -"Delete chat profile?" = "Smazat profil chatu?"; +"Delete chat profile?" = "Smazat chat profil?"; /* No comment provided by engineer. */ "Delete connection" = "Smazat připojení"; @@ -788,6 +791,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Smazat odkaz?"; +/* No comment provided by engineer. */ +"Delete member message?" = "Smazat zprávu člena?"; + /* No comment provided by engineer. */ "Delete message?" = "Smazat zprávu?"; @@ -855,7 +861,7 @@ "Disable SimpleX Lock" = "Vypnutí zámku SimpleX"; /* chat feature */ -"Disappearing messages" = "Zmizení zpráv"; +"Disappearing messages" = "Mizící zprávy"; /* No comment provided by engineer. */ "Disappearing messages are prohibited in this chat." = "Mizící zprávy jsou v tomto chatu zakázány."; @@ -1067,6 +1073,9 @@ /* No comment provided by engineer. */ "Error switching profile!" = "Chyba při přepínání profilu!"; +/* No comment provided by engineer. */ +"Error updating group link" = "Chyba aktualizace odkazu skupiny"; + /* No comment provided by engineer. */ "Error updating message" = "Chyba aktualizace zprávy"; @@ -1164,7 +1173,7 @@ "Group members can send direct messages." = "Členové skupiny mohou posílat přímé zprávy."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Členové skupiny mohou posílat mizející zprávy."; +"Group members can send disappearing messages." = "Členové skupiny mohou posílat mizící zprávy."; /* No comment provided by engineer. */ "Group members can send voice messages." = "Členové skupiny mohou posílat hlasové zprávy."; @@ -1220,9 +1229,6 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "Servery ICE (jeden na řádek)"; -/* No comment provided by engineer. */ -"If the video fails to connect, flip the camera to resolve it." = "Pokud se připojení videa nezdaří, vyřešte to otočením kamery."; - /* No comment provided by engineer. */ "If you can't meet in person, **show QR code in the video call**, or share the link." = "Pokud se nemůžete setkat osobně, **ukažte QR kód ve videohovoru**, nebo sdílejte odkaz."; @@ -1301,6 +1307,9 @@ /* No comment provided by engineer. */ "Instantly" = "Okamžitě"; +/* No comment provided by engineer. */ +"Interface" = "Rozhranní"; + /* invalid chat data */ "invalid chat" = "neplatný chat"; @@ -1502,9 +1511,15 @@ /* call status */ "missed call" = "zmeškané volání"; +/* chat item action */ +"Moderate" = "Moderovat"; + /* moderated chat item */ "moderated" = "moderované"; +/* No comment provided by engineer. */ +"moderated by %@" = "moderovaný %@"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Další vylepšení se chystají již brzy!"; @@ -1589,6 +1604,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Oznámení jsou zakázána!"; +/* member role */ +"observer" = "pozorovatel"; + /* enabled status group pref value */ "off" = "vypnuto"; @@ -1716,6 +1734,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Zkontrolujte prosím nastavení své i svého kontaktu."; +/* No comment provided by engineer. */ +"Please contact group admin." = "Kontaktujte prosím správce skupiny."; + /* No comment provided by engineer. */ "Please enter correct current passphrase." = "Zadejte prosím správnou aktuální přístupovou frázi."; @@ -1765,7 +1786,7 @@ "Prohibit sending direct messages to members." = "Zakázat odesílání přímých zpráv členům."; /* No comment provided by engineer. */ -"Prohibit sending disappearing messages." = "Zakázat posílání mizejících zpráv."; +"Prohibit sending disappearing messages." = "Zakázat posílání mizících zpráv."; /* No comment provided by engineer. */ "Prohibit sending voice messages." = "Zakázat odesílání hlasových zpráv."; @@ -2037,6 +2058,9 @@ /* No comment provided by engineer. */ "Share one-time invitation link" = "Jednorázový zvací odkaz"; +/* No comment provided by engineer. */ +"Show calls in phone history" = "Ukaž hovory v historii telefonu"; + /* No comment provided by engineer. */ "Show preview" = "Zobrazení náhledu"; @@ -2185,7 +2209,10 @@ "The group is fully decentralized – it is visible only to the members." = "Skupina je plně decentralizovaná - je viditelná pouze pro členy."; /* No comment provided by engineer. */ -"The microphone does not work when the app is in the background." = "Mikrofon nefunguje, pokud je aplikace na pozadí."; +"The message will be deleted for all members." = "Zpráva bude smazána pro všechny členy."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Zpráva bude pro všechny členy označena jako moderovaná."; /* No comment provided by engineer. */ "The next generation of private messaging" = "Nová generace soukromých zpráv"; @@ -2235,9 +2262,6 @@ /* No comment provided by engineer. */ "To make a new connection" = "Vytvoření nového připojení"; -/* No comment provided by engineer. */ -"To prevent the call interruption, enable Do Not Disturb mode." = "K zabránění přerušení hovoru, povolte režim Nerušit."; - /* No comment provided by engineer. */ "To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Pro ochranu soukromí namísto ID uživatelů používaných všemi ostatními platformami má SimpleX identifikátory pro fronty zpráv, oddělené pro každý z vašich kontaktů."; @@ -2286,12 +2310,18 @@ /* connection info */ "unknown" = "neznámý"; +/* callkit banner */ +"Unknown caller" = "Neznámý volající"; + /* No comment provided by engineer. */ "Unknown database error: %@" = "Neznámá chyba databáze: %@"; /* No comment provided by engineer. */ "Unknown error" = "Neznámá chyba"; +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Při nepoužívání rozhraní volání iOS, povolte režim Nerušit, abyste se vyhnuli vyrušování."; + /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Pokud váš kontakt neodstranil připojení nebo tento odkaz již nebyl použit, může se jednat o chybu – nahlaste ji.\nChcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu na připojení a zkontrolujte, zda máte stabilní připojení k síti."; @@ -2337,6 +2367,9 @@ /* No comment provided by engineer. */ "Use for new connections" = "Použít pro nová připojení"; +/* No comment provided by engineer. */ +"Use iOS call interface" = "Použít rozhraní volání iOS"; + /* No comment provided by engineer. */ "Use server" = "Použít server"; @@ -2371,7 +2404,7 @@ "via group link" = "prostřednictvím skupinového odkazu"; /* chat list item description */ -"via one-time link" = "prostřednictvím jednorázového odkazu"; +"via one-time link" = "jednorázovým odkazem"; /* No comment provided by engineer. */ "via relay" = "přes relé"; @@ -2469,6 +2502,12 @@ /* No comment provided by engineer. */ "You are invited to group" = "Jste pozváni do skupiny"; +/* No comment provided by engineer. */ +"you are observer" = "jste pozorovatel"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Můžete přijímat hovory z obrazovky zámku, bez ověření zařízení a aplikace."; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Můžete se také připojit kliknutím na odkaz. Pokud se otevře v prohlížeči, klikněte na tlačítko **Otevřít v mobilní aplikaci**."; @@ -2490,6 +2529,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "K formátování zpráv můžete použít markdown:"; +/* No comment provided by engineer. */ +"You can't send messages!" = "Nemůžete posílat zprávy!"; + /* chat item text */ "you changed address" = "změnili jste adresu"; @@ -2584,34 +2626,31 @@ "Your chat database is not encrypted - set passphrase to encrypt it." = "Vaše chat databáze není šifrována – nastavte přístupovou frázi pro její šifrování."; /* No comment provided by engineer. */ -"Your chat profile will be sent to group members" = "Váš profil v chatu bude zaslán členům skupiny"; +"Your chat profile will be sent to group members" = "Váš chat profil bude zaslán členům skupiny"; /* No comment provided by engineer. */ -"Your chat profile will be sent to your contact" = "Váš profil v chatu bude odeslán vašemu kontaktu"; +"Your chat profile will be sent to your contact" = "Váš chat profil bude odeslán vašemu kontaktu"; /* No comment provided by engineer. */ -"Your chat profiles" = "Vaše profily v chatu"; - -/* No comment provided by engineer. */ -"Your chat profiles are stored locally, only on your device." = "Vaše profily v chatu jsou uloženy lokálně, pouze ve vašem zařízení."; +"Your chat profiles" = "Vaše chat profily"; /* No comment provided by engineer. */ "Your chats" = "Vaše konverzace"; /* No comment provided by engineer. */ -"Your contact address" = "Vaše kontaktní adresa"; +"Your contact address" = "Vaše adresa"; /* No comment provided by engineer. */ "Your contact can scan it from the app." = "Váš kontakt jej může naskenovat z aplikace."; /* No comment provided by engineer. */ -"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Aby se připojení dokončilo, musí být váš kontakt online.\nToto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem)."; +"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "K dokončení připojení, musí být váš kontakt online.\nToto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem)."; /* No comment provided by engineer. */ "Your contact sent a file that is larger than currently supported maximum size (%@)." = "Kontakt odeslal soubor, který je větší než aktuálně podporovaná maximální velikost (%@)."; /* No comment provided by engineer. */ -"Your contacts can allow full message deletion." = "Vaše kontakty mohou povolit úplné vymazání zpráv."; +"Your contacts can allow full message deletion." = "Vaše kontakty mohou povolit úplné mazání zpráv."; /* No comment provided by engineer. */ "Your current chat database will be DELETED and REPLACED with the imported one." = "Vaše aktuální chat databáze bude ODSTRANĚNA a NAHRAZENA importovanou."; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 8d568c9d5..48ca38b07 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -311,6 +311,9 @@ /* pref value */ "always" = "Immer"; +/* No comment provided by engineer. */ +"Always use relay" = "Über ein Relais verbinden"; + /* No comment provided by engineer. */ "Answer call" = "Anruf annehmen"; @@ -341,6 +344,9 @@ /* No comment provided by engineer. */ "Authentication failed" = "Authentifizierung fehlgeschlagen"; +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "Bevor der Anruf verbunden wird, ist eine Authentifizierung erforderlich, aber Sie könnten Anrufe verpassen."; + /* No comment provided by engineer. */ "Authentication unavailable" = "Authentifizierung nicht verfügbar"; @@ -402,7 +408,7 @@ "Cancel" = "Abbrechen"; /* feature offered item */ -"cancelled %@" = "Beende %@"; +"cancelled %@" = "abgebrochen %@"; /* No comment provided by engineer. */ "Cannot access keychain to save database password" = "Die App kann nicht auf den Schlüsselbund zugreifen, um das Datenbank-Passwort zu speichern"; @@ -533,9 +539,6 @@ /* No comment provided by engineer. */ "Connect via one-time link?" = "Über einen Einmal-Link verbinden?"; -/* No comment provided by engineer. */ -"Connect via relay" = "Über ein Relais verbinden"; - /* No comment provided by engineer. */ "connected" = "Verbunden"; @@ -788,6 +791,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Link löschen?"; +/* No comment provided by engineer. */ +"Delete member message?" = "Nachricht des Mitglieds löschen?"; + /* No comment provided by engineer. */ "Delete message?" = "Die Nachricht löschen?"; @@ -1067,6 +1073,9 @@ /* No comment provided by engineer. */ "Error switching profile!" = "Fehler beim Umschalten des Profils!"; +/* No comment provided by engineer. */ +"Error updating group link" = "Fehler beim Aktualisieren des Gruppen-Links"; + /* No comment provided by engineer. */ "Error updating message" = "Fehler beim Aktualisieren der Nachricht"; @@ -1220,9 +1229,6 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "ICE-Server (einer pro Zeile)"; -/* No comment provided by engineer. */ -"If the video fails to connect, flip the camera to resolve it." = "Wenn der Videoanruf nicht funktioniert, wechseln Sie die Kamera, um das Problem zu lösen."; - /* No comment provided by engineer. */ "If you can't meet in person, **show QR code in the video call**, or share the link." = "Wenn Sie sich nicht persönlich treffen können, kann der **QR-Code während eines Videoanrufs angezeigt werden**, oder der Einladungslink über einen anderen Kanal mit Ihrem Kontakt geteilt werden."; @@ -1301,6 +1307,9 @@ /* No comment provided by engineer. */ "Instantly" = "Sofort"; +/* No comment provided by engineer. */ +"Interface" = "Schnittstelle"; + /* invalid chat data */ "invalid chat" = "Ungültiger Chat"; @@ -1502,9 +1511,15 @@ /* call status */ "missed call" = "Anruf verpasst"; +/* chat item action */ +"Moderate" = "Moderieren"; + /* moderated chat item */ "moderated" = "Moderiert"; +/* No comment provided by engineer. */ +"moderated by %@" = "von %@ moderiert"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Weitere Verbesserungen sind bald verfügbar!"; @@ -1589,6 +1604,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Benachrichtigungen sind deaktiviert!"; +/* member role */ +"observer" = "Beobachter"; + /* enabled status group pref value */ "off" = "Aus"; @@ -1597,10 +1615,10 @@ "Off (Local)" = "Aus (Lokal)"; /* feature offered item */ -"offered %@" = "Beginne %@"; +"offered %@" = "angeboten %@"; /* feature offered item */ -"offered %@: %@" = "Beginne %1$@: %2$@"; +"offered %@: %@" = "angeboten %1$@: %2$@"; /* No comment provided by engineer. */ "Ok" = "Ok"; @@ -1716,6 +1734,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Bitte überprüfen sie sowohl Ihre, als auch die Präferenzen Ihres Kontakts."; +/* No comment provided by engineer. */ +"Please contact group admin." = "Bitte kontaktieren Sie den Gruppen-Administrator."; + /* No comment provided by engineer. */ "Please enter correct current passphrase." = "Bitte geben Sie das korrekte, aktuelle Passwort ein."; @@ -2037,6 +2058,9 @@ /* No comment provided by engineer. */ "Share one-time invitation link" = "Einmal-Einladungslink teilen"; +/* No comment provided by engineer. */ +"Show calls in phone history" = "Anrufliste zeigen"; + /* No comment provided by engineer. */ "Show preview" = "Vorschau anzeigen"; @@ -2185,7 +2209,10 @@ "The group is fully decentralized – it is visible only to the members." = "Die Gruppe ist vollständig dezentralisiert – sie ist nur für Mitglieder sichtbar."; /* No comment provided by engineer. */ -"The microphone does not work when the app is in the background." = "Das Mikrofon wird nicht funktionieren, wenn sich die App im Hintergrund befindet."; +"The message will be deleted for all members." = "Diese Nachricht wird für alle Gruppenmitglieder gelöscht."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet."; /* No comment provided by engineer. */ "The next generation of private messaging" = "Die nächste Generation von privatem Messaging"; @@ -2235,9 +2262,6 @@ /* No comment provided by engineer. */ "To make a new connection" = "Um eine Verbindung mit einem neuen Kontakt zu erstellen"; -/* No comment provided by engineer. */ -"To prevent the call interruption, enable Do Not Disturb mode." = "Aktivieren Sie den \"Nicht stören\" Modus, um Anruf-Unterbrechungen zu vermeiden."; - /* No comment provided by engineer. */ "To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Zum Schutz Ihrer Privatsphäre verwendet SimpleX an Stelle von Benutzerkennungen, die von allen anderen Plattformen verwendet werden, Kennungen für Nachrichtenwarteschlangen, die für jeden Ihrer Kontakte individuell sind."; @@ -2286,12 +2310,18 @@ /* connection info */ "unknown" = "Unbekannt"; +/* callkit banner */ +"Unknown caller" = "Anrufer unbekannt"; + /* No comment provided by engineer. */ "Unknown database error: %@" = "Unbekannter Datenbankfehler: %@"; /* No comment provided by engineer. */ "Unknown error" = "Unbekannter Fehler"; +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Aktivieren Sie den Modus \"Bitte nicht stören\", um Unterbrechungen zu vermeiden, es sei denn, Sie verwenden die iOS Anrufschnittstelle."; + /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Entweder hat Ihr Kontakt die Verbindung gelöscht, oder dieser Link wurde bereits verwendet, es könnte sich um einen Fehler handeln - Bitte melden Sie es uns.\nBitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um sich neu verbinden zu können und stellen Sie sicher, dass Sie eine stabile Netzwerk-Verbindung haben."; @@ -2337,6 +2367,9 @@ /* No comment provided by engineer. */ "Use for new connections" = "Für neue Verbindungen nutzen"; +/* No comment provided by engineer. */ +"Use iOS call interface" = "Benutzen Sie die iOS Anrufschnittstelle"; + /* No comment provided by engineer. */ "Use server" = "Server nutzen"; @@ -2469,6 +2502,12 @@ /* No comment provided by engineer. */ "You are invited to group" = "Sie sind zu der Gruppe eingeladen"; +/* No comment provided by engineer. */ +"you are observer" = "Sie sind Beobachter"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Sie können Anrufe ohne Geräte- und App-Authentifizierung vom Sperrbildschirm aus annehmen."; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Sie können sich auch verbinden, indem Sie auf den Link klicken. Wenn er im Browser geöffnet wird, klicken Sie auf die Schaltfläche **In mobiler App öffnen**."; @@ -2490,6 +2529,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Um Nachrichteninhalte zu formatieren, können Sie Markdowns verwenden:"; +/* No comment provided by engineer. */ +"You can't send messages!" = "Sie können keine Nachrichten versenden!"; + /* chat item text */ "you changed address" = "Sie haben die Adresse gewechselt"; @@ -2592,9 +2634,6 @@ /* No comment provided by engineer. */ "Your chat profiles" = "Meine Chat-Profile"; -/* No comment provided by engineer. */ -"Your chat profiles are stored locally, only on your device." = "Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert."; - /* No comment provided by engineer. */ "Your chats" = "Meine Chats"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings new file mode 100644 index 000000000..f29712eb8 --- /dev/null +++ b/apps/ios/es.lproj/Localizable.strings @@ -0,0 +1,2696 @@ +/* No comment provided by engineer. */ +"\n" = "\n"; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" (" = " ("; + +/* No comment provided by engineer. */ +" (can be copied)" = " (puede copiarse)"; + +/* No comment provided by engineer. */ +"_italic_" = "\\_italic_"; + +/* No comment provided by engineer. */ +", " = ", "; + +/* No comment provided by engineer. */ +": " = ": "; + +/* No comment provided by engineer. */ +"!1 colored!" = "!1 coloreado!"; + +/* No comment provided by engineer. */ +"." = "."; + +/* No comment provided by engineer. */ +"(" = "("; + +/* No comment provided by engineer. */ +")" = ")"; + +/* No comment provided by engineer. */ +"[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" = "[Contribuye](https://github.com/simplex-chat/simplex-chat#contribute)"; + +/* No comment provided by engineer. */ +"[Send us email](mailto:chat@simplex.chat)" = "[Contacta por email](mailto:chat@simplex.chat)"; + +/* No comment provided by engineer. */ +"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Comienza en GitHub] (https://github.com/simplex-chat/simplex-chat)"; + +/* No comment provided by engineer. */ +"**Add new contact**: to create your one-time QR Code for your contact." = "**Añadir nuevo contacto**: para crear tu código QR único o un enlace para tu contacto."; + +/* No comment provided by engineer. */ +"**Create link / QR code** for your contact to use." = "**Crea enlace / código QR** para que tu contacto lo use."; + +/* No comment provided by engineer. */ +"**e2e encrypted** audio call" = "**Cifrado e2e ** en llamada"; + +/* No comment provided by engineer. */ +"**e2e encrypted** video call" = "**Cifrado e2e** en videollamada"; + +/* No comment provided by engineer. */ +"**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**Más privado**: comprueba los mensajes nuevos cada 20 minutos. El token del dispositivo se comparte con el servidor de SimpleX Chat, pero no cuántos contactos o mensajes tienes."; + +/* No comment provided by engineer. */ +"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Más privado**: no se usa el servidor de notificaciones de SimpleX Chat, los mensajes se comprueban periódicamente en segundo plano (dependiendo de la frecuencia con la que utilices la aplicación)."; + +/* No comment provided by engineer. */ +"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Pega el enlace recibido** o ábrelo en el navegador y pulsa **Abrir en aplicación móvil**."; + +/* No comment provided by engineer. */ +"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Importante**: NO podrás recuperar o cambiar la contraseña si la pierdes."; + +/* No comment provided by engineer. */ +"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Recomendado**: el token del dispositivo y las notificaciones se envían al servidor de notificaciones de SimpleX Chat, pero no el contenido del mensaje, su tamaño o su procedencia."; + +/* No comment provided by engineer. */ +"**Scan QR code**: to connect to your contact in person or via video call." = "**Escanea el código QR**: en persona para conectar con tu contacto o mediante videollamada."; + +/* No comment provided by engineer. */ +"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Advertencia**: Las notificaciones automáticas instantáneas requieren una contraseña guardada en Keychain."; + +/* No comment provided by engineer. */ +"*bold*" = "\\*bold*"; + +/* No comment provided by engineer. */ +"#secret#" = "#secreto#"; + +/* No comment provided by engineer. */ +"%@" = "%@"; + +/* No comment provided by engineer. */ +"%@ / %@" = "%@ / %@"; + +/* No comment provided by engineer. */ +"%@ %@" = "%@ %@"; + +/* notification title */ +"%@ is connected!" = "%@ ¡está conectado!"; + +/* No comment provided by engineer. */ +"%@ is not verified" = "%@ no está verificado"; + +/* No comment provided by engineer. */ +"%@ is verified" = "%@ está verificado"; + +/* notification title */ +"%@ wants to connect!" = "%@ ¡quiere conectar!"; + +/* message ttl */ +"%d days" = "%d días"; + +/* message ttl */ +"%d hours" = "%d horas"; + +/* message ttl */ +"%d min" = "%d minutos"; + +/* message ttl */ +"%d months" = "%d meses"; + +/* message ttl */ +"%d sec" = "%d segundos"; + +/* integrity error chat item */ +"%d skipped message(s)" = "%d mensaje(s) saltado(s"; + +/* No comment provided by engineer. */ +"%lld" = "%lld"; + +/* No comment provided by engineer. */ +"%lld %@" = "%lld %@"; + +/* No comment provided by engineer. */ +"%lld contact(s) selected" = "%lld contacto(s) seleccionado(s)"; + +/* No comment provided by engineer. */ +"%lld file(s) with total size of %@" = "%lld archivo(s) con un tamaño total de %@"; + +/* No comment provided by engineer. */ +"%lld members" = "%lld miembros"; + +/* No comment provided by engineer. */ +"%lld second(s)" = "%lld segundo(s)"; + +/* No comment provided by engineer. */ +"%lldd" = "%lldd"; + +/* No comment provided by engineer. */ +"%lldh" = "%lldh"; + +/* No comment provided by engineer. */ +"%lldk" = "%lldk"; + +/* No comment provided by engineer. */ +"%lldm" = "%lldm"; + +/* No comment provided by engineer. */ +"%lldmth" = "%lldmth"; + +/* No comment provided by engineer. */ +"%llds" = "%llds"; + +/* No comment provided by engineer. */ +"%lldw" = "%lldw"; + +/* No comment provided by engineer. */ +"`a + b`" = "\\`a + b`"; + +/* No comment provided by engineer. */ +"~strike~" = "\\~strike~"; + +/* message ttl */ +"1 day" = "un dia"; + +/* message ttl */ +"1 hour" = "una hora"; + +/* message ttl */ +"1 month" = "un mes"; + +/* message ttl */ +"1 week" = "una semana"; + +/* message ttl */ +"2 weeks" = "dos semanas"; + +/* No comment provided by engineer. */ +"6" = "6"; + +/* notification title */ +"A new contact" = "Contacto nuevo"; + +/* No comment provided by engineer. */ +"A random profile will be sent to the contact that you received this link from" = "Se enviará un perfil aleatorio al contacto del que recibió este enlace"; + +/* No comment provided by engineer. */ +"A random profile will be sent to your contact" = "Se enviará un perfil aleatorio a tu contacto"; + +/* No comment provided by engineer. */ +"A separate TCP connection will be used **for each chat profile you have in the app**." = "Se utilizará una conexión TCP distinta **para cada perfil que tengas en la aplicación**."; + +/* No comment provided by engineer. */ +"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "Se utilizará una conexión TCP independiente **para cada contacto y miembro de grupo**.\n**Ten en cuenta**: si tienes muchas conexiones, tu consumo de batería y tráfico puede ser sustancialmente mayor y algunas conexiones pueden fallar."; + +/* No comment provided by engineer. */ +"About SimpleX" = "Acerca de SimpleX"; + +/* No comment provided by engineer. */ +"About SimpleX Chat" = "Acerca de SimpleX Chat"; + +/* No comment provided by engineer. */ +"above, then choose:" = "arriba, luego elige:"; + +/* No comment provided by engineer. */ +"Accent color" = "Acentuar el color"; + +/* accept contact request via notification + accept incoming call via notification */ +"Accept" = "Aceptar"; + +/* No comment provided by engineer. */ +"Accept contact" = "Aceptar contacto"; + +/* notification body */ +"Accept contact request from %@?" = "¿Aceptar solicitud de contacto de %@?"; + +/* No comment provided by engineer. */ +"Accept incognito" = "Aceptar incógnito"; + +/* No comment provided by engineer. */ +"Accept requests" = "Aceptar solicitudes"; + +/* call status */ +"accepted call" = "llamada aceptada"; + +/* No comment provided by engineer. */ +"Add preset servers" = "Añadir servidores predefinidos"; + +/* No comment provided by engineer. */ +"Add profile" = "Añadir perfil"; + +/* No comment provided by engineer. */ +"Add server…" = "Añadir servidor…"; + +/* No comment provided by engineer. */ +"Add servers by scanning QR codes." = "Añadir servidores escaneando códigos QR."; + +/* No comment provided by engineer. */ +"Add to another device" = "Añadir a otro dispositivo"; + +/* member role */ +"admin" = "administrador"; + +/* No comment provided by engineer. */ +"Admins can create the links to join groups." = "Los administradores pueden crear los enlaces para unirse a los grupos."; + +/* No comment provided by engineer. */ +"Advanced network settings" = "Configuración de red avanzada"; + +/* No comment provided by engineer. */ +"All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No puede deshacerse!"; + +/* No comment provided by engineer. */ +"All group members will remain connected." = "Todos los miembros del grupo permanecerán conectados."; + +/* No comment provided by engineer. */ +"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Se eliminarán todos los mensajes SOLO para tí. ¡No puede deshacerse!"; + +/* No comment provided by engineer. */ +"All your contacts will remain connected" = "Todos tus contactos permanecerán conectados"; + +/* No comment provided by engineer. */ +"Allow" = "Permitir"; + +/* No comment provided by engineer. */ +"Allow disappearing messages only if your contact allows it to you." = "Permitir mensajes temporales sólo si tu contacto también los permite para tí."; + +/* No comment provided by engineer. */ +"Allow irreversible message deletion only if your contact allows it to you." = "Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí."; + +/* No comment provided by engineer. */ +"Allow sending direct messages to members." = "Permitir el envío de mensajes directos a los miembros."; + +/* No comment provided by engineer. */ +"Allow sending disappearing messages." = "Permitir el envío de mensajes temporales."; + +/* No comment provided by engineer. */ +"Allow to irreversibly delete sent messages." = "Permitir la eliminación irreversible de los mensajes enviados."; + +/* No comment provided by engineer. */ +"Allow to send voice messages." = "Permitir enviar mensajes de voz."; + +/* No comment provided by engineer. */ +"Allow voice messages only if your contact allows them." = "Permitir mensajes de voz sólo si tu contacto los permite."; + +/* No comment provided by engineer. */ +"Allow voice messages?" = "¿Permitir mensajes de voz?"; + +/* No comment provided by engineer. */ +"Allow your contacts to irreversibly delete sent messages." = "Permitir a tus contactos eliminar irreversiblemente los mensajes enviados."; + +/* No comment provided by engineer. */ +"Allow your contacts to send disappearing messages." = "Permitir a tus contactos enviar mensajes que desaparecen."; + +/* No comment provided by engineer. */ +"Allow your contacts to send voice messages." = "Permitir a tus contactos enviar mensajes de voz."; + +/* No comment provided by engineer. */ +"Already connected?" = "¿Ya está conectado?"; + +/* pref value */ +"always" = "siempre"; + +/* No comment provided by engineer. */ +"Always use relay" = "Siempre usa relay"; + +/* No comment provided by engineer. */ +"Answer call" = "Responder llamada"; + +/* No comment provided by engineer. */ +"App build: %@" = "Compilación app: %@"; + +/* No comment provided by engineer. */ +"App icon" = "Icono app"; + +/* No comment provided by engineer. */ +"App version" = "Versión de la aplicación"; + +/* No comment provided by engineer. */ +"App version: v%@" = "Versión: v%@"; + +/* No comment provided by engineer. */ +"Appearance" = "Apariencia"; + +/* No comment provided by engineer. */ +"Attach" = "Adjuntar"; + +/* No comment provided by engineer. */ +"Audio & video calls" = "Llamadas de audio y vídeo"; + +/* No comment provided by engineer. */ +"audio call (not e2e encrypted)" = "llamada de audio (sin cifrado e2e)"; + +/* No comment provided by engineer. */ +"Authentication failed" = "Autenticación fallida"; + +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "La autenticación es necesaria antes de establecer la llamada, pero podrías perder llamadas."; + +/* No comment provided by engineer. */ +"Authentication unavailable" = "Autenticación no disponible"; + +/* No comment provided by engineer. */ +"Auto-accept contact requests" = "Aceptar automáticamente solicitudes del contacto"; + +/* No comment provided by engineer. */ +"Auto-accept images" = "Aceptar automáticamente imágenes"; + +/* No comment provided by engineer. */ +"Automatically" = "Automáticamente"; + +/* No comment provided by engineer. */ +"Back" = "Volver"; + +/* integrity error chat item */ +"bad message hash" = "hash de mensaje erróneo"; + +/* integrity error chat item */ +"bad message ID" = "ID de mensaje erróneo"; + +/* No comment provided by engineer. */ +"bold" = "negrita"; + +/* No comment provided by engineer. */ +"Both you and your contact can irreversibly delete sent messages." = "Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados."; + +/* No comment provided by engineer. */ +"Both you and your contact can send disappearing messages." = "Tanto tú como tu contacto podéis enviar mensajes temporales."; + +/* No comment provided by engineer. */ +"Both you and your contact can send voice messages." = "Tanto tú como tu contacto podéis enviar mensajes de voz."; + +/* No comment provided by engineer. */ +"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Por perfil de Chat (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; + +/* No comment provided by engineer. */ +"Call already ended!" = "¡La llamada ha terminado!"; + +/* call status */ +"call error" = "error en la llamada"; + +/* call status */ +"call in progress" = "llamada en curso"; + +/* call status */ +"calling…" = "llamando…"; + +/* No comment provided by engineer. */ +"Calls" = "Llamadas"; + +/* No comment provided by engineer. */ +"Can't invite contact!" = "¡No se puede invitar el contacto!"; + +/* No comment provided by engineer. */ +"Can't invite contacts!" = "¡No se puede invitar a los contactos!"; + +/* No comment provided by engineer. */ +"Cancel" = "Cancelar"; + +/* feature offered item */ +"cancelled %@" = "cancelado %@"; + +/* No comment provided by engineer. */ +"Cannot access keychain to save database password" = "Keychain inaccesible para guardar la contraseña de la base de datos"; + +/* No comment provided by engineer. */ +"Cannot receive file" = "No se puede recibir el archivo"; + +/* No comment provided by engineer. */ +"Change" = "Cambiar"; + +/* No comment provided by engineer. */ +"Change database passphrase?" = "¿Cambiar contraseña de la base de datos?"; + +/* No comment provided by engineer. */ +"Change member role?" = "¿Cambiar el rol del miembro?"; + +/* No comment provided by engineer. */ +"Change receiving address" = "Cambiar la dirección de recepción"; + +/* No comment provided by engineer. */ +"Change receiving address?" = "¿Cambiar la dirección de recepción?"; + +/* No comment provided by engineer. */ +"Change role" = "Cambiar rol"; + +/* chat item text */ +"changed address for you" = "su dirección ha cambiado para tí"; + +/* rcv group event chat item */ +"changed role of %@ to %@" = "rol cambiado de %1$@ a %2$@"; + +/* rcv group event chat item */ +"changed your role to %@" = "ha cambiado tu rol a %@"; + +/* chat item text */ +"changing address for %@..." = "la dirección ha cambiado para %@..."; + +/* chat item text */ +"changing address..." = "cambiando la dirección..."; + +/* No comment provided by engineer. */ +"Chat archive" = "Archivo del chat"; + +/* No comment provided by engineer. */ +"Chat console" = "Consola del chat"; + +/* No comment provided by engineer. */ +"Chat database" = "Base de datos del chat"; + +/* No comment provided by engineer. */ +"Chat database deleted" = "Base de datos eliminada"; + +/* No comment provided by engineer. */ +"Chat database imported" = "Base de datos importada"; + +/* No comment provided by engineer. */ +"Chat is running" = "El chat está en ejecución"; + +/* No comment provided by engineer. */ +"Chat is stopped" = "El chat está detenido"; + +/* No comment provided by engineer. */ +"Chat preferences" = "Preferencias de chat"; + +/* No comment provided by engineer. */ +"Chats" = "Chats"; + +/* No comment provided by engineer. */ +"Check server address and try again." = "Comprueba la dirección del servidor e inténtalo de nuevo."; + +/* No comment provided by engineer. */ +"Choose file" = "Elije archivo"; + +/* No comment provided by engineer. */ +"Choose from library" = "Elige de la biblioteca"; + +/* No comment provided by engineer. */ +"Clear" = "Eliminar"; + +/* No comment provided by engineer. */ +"Clear conversation" = "Eliminar conversación"; + +/* No comment provided by engineer. */ +"Clear conversation?" = "¿Eliminar conversación?"; + +/* No comment provided by engineer. */ +"Clear verification" = "Eliminar verificación"; + +/* No comment provided by engineer. */ +"colored" = "coloreado"; + +/* No comment provided by engineer. */ +"Colors" = "Colores"; + +/* No comment provided by engineer. */ +"Compare security codes with your contacts." = "Compare los códigos de seguridad con sus contactos."; + +/* No comment provided by engineer. */ +"complete" = "completado"; + +/* No comment provided by engineer. */ +"Configure ICE servers" = "Configure servidores ICE"; + +/* No comment provided by engineer. */ +"Confirm" = "Confirmar"; + +/* No comment provided by engineer. */ +"Confirm new passphrase…" = "Confirme nueva contraseña…"; + +/* server test step */ +"Connect" = "Conectar"; + +/* No comment provided by engineer. */ +"connect to SimpleX Chat developers." = "contacta con los desarrolladores de SimpleX Chat."; + +/* No comment provided by engineer. */ +"Connect via contact link?" = "¿Conectar mediante enlace de contacto?"; + +/* No comment provided by engineer. */ +"Connect via group link?" = "¿Conectar mediante enlace de grupo?"; + +/* No comment provided by engineer. */ +"Connect via link" = "Conectar mediante enlace"; + +/* No comment provided by engineer. */ +"Connect via link / QR code" = "Conectar mediante enlace / Código QR"; + +/* No comment provided by engineer. */ +"Connect via one-time link?" = "¿Conectar mediante enlace único?"; + +/* No comment provided by engineer. */ +"connected" = "conectado"; + +/* No comment provided by engineer. */ +"connecting" = "conectando"; + +/* No comment provided by engineer. */ +"connecting (accepted)" = "conectando (aceptado)"; + +/* No comment provided by engineer. */ +"connecting (announced)" = "conectando (anunciado)"; + +/* No comment provided by engineer. */ +"connecting (introduced)" = "conectando (presentado)"; + +/* No comment provided by engineer. */ +"connecting (introduction invitation)" = "conectando (invitación de presentación )"; + +/* call status */ +"connecting call" = "conectando llamada…"; + +/* No comment provided by engineer. */ +"Connecting server…" = "Conectando con el servidor…"; + +/* No comment provided by engineer. */ +"Connecting server… (error: %@)" = "Conectando con el servidor... (error: %@)"; + +/* chat list item title */ +"connecting…" = "conectando…"; + +/* No comment provided by engineer. */ +"Connection" = "Conexión"; + +/* No comment provided by engineer. */ +"Connection error" = "Error de conexión"; + +/* No comment provided by engineer. */ +"Connection error (AUTH)" = "Error de conexión (Autenticación)"; + +/* chat list item title (it should not be shown */ +"connection established" = "conexión establecida"; + +/* No comment provided by engineer. */ +"Connection request" = "Solicitud de conexión"; + +/* No comment provided by engineer. */ +"Connection request sent!" = "¡Solicitud de conexión enviada!"; + +/* No comment provided by engineer. */ +"Connection timeout" = "Tiempo de conexión expirado"; + +/* connection information */ +"connection:%@" = "conexión: % @"; + +/* No comment provided by engineer. */ +"Contact allows" = "El contacto permite"; + +/* No comment provided by engineer. */ +"Contact already exists" = "El contácto ya existe"; + +/* No comment provided by engineer. */ +"Contact and all messages will be deleted - this cannot be undone!" = "El contacto y todos los mensajes serán eliminados. ¡No puede deshacerse!"; + +/* No comment provided by engineer. */ +"contact has e2e encryption" = "El contacto dispone de cifrado e2e"; + +/* No comment provided by engineer. */ +"contact has no e2e encryption" = "El contacto no dispone de cifrado e2e"; + +/* notification */ +"Contact hidden:" = "Contacto oculto:"; + +/* notification */ +"Contact is connected" = "El contacto está en línea"; + +/* No comment provided by engineer. */ +"Contact is not connected yet!" = "¡El contacto aun no se ha conectado!"; + +/* No comment provided by engineer. */ +"Contact name" = "Nombre del contacto"; + +/* No comment provided by engineer. */ +"Contact preferences" = "Preferencias de contacto"; + +/* No comment provided by engineer. */ +"Contact requests" = "Solicitud del contacto"; + +/* No comment provided by engineer. */ +"Contacts can mark messages for deletion; you will be able to view them." = "El contacto puede marcar los mensajes para eliminar; tu podrás verlos."; + +/* chat item action */ +"Copy" = "Copiar"; + +/* No comment provided by engineer. */ +"Core built at: %@" = "Core compilado en: %@"; + +/* No comment provided by engineer. */ +"Core version: v%@" = "Versión Core: v%@"; + +/* No comment provided by engineer. */ +"Create" = "Crear"; + +/* No comment provided by engineer. */ +"Create address" = "Crear dirección"; + +/* No comment provided by engineer. */ +"Create group link" = "Crear enlace de grupo"; + +/* No comment provided by engineer. */ +"Create link" = "Crear enlace"; + +/* No comment provided by engineer. */ +"Create one-time invitation link" = "Crear enlace único de invitación"; + +/* server test step */ +"Create queue" = "Crear cola"; + +/* No comment provided by engineer. */ +"Create secret group" = "Crear grupo secreto"; + +/* No comment provided by engineer. */ +"Create your profile" = "Crear tu perfil"; + +/* No comment provided by engineer. */ +"Created on %@" = "Creado en %@"; + +/* No comment provided by engineer. */ +"creator" = "creador"; + +/* No comment provided by engineer. */ +"Current passphrase…" = "Contraseña actual…"; + +/* No comment provided by engineer. */ +"Currently maximum supported file size is %@." = "El tamaño máximo de archivo admitido es %@."; + +/* No comment provided by engineer. */ +"Dark" = "Oscuro"; + +/* No comment provided by engineer. */ +"Database encrypted!" = "¡Base de datos cifrada!"; + +/* No comment provided by engineer. */ +"Database encryption passphrase will be updated and stored in the keychain.\n" = "La contraseña de cifrado de la base de datos será actualizada y almacenada en Keychain.\n"; + +/* No comment provided by engineer. */ +"Database encryption passphrase will be updated.\n" = "La contraseña de cifrado de la base de datos será actualizada.\n"; + +/* No comment provided by engineer. */ +"Database error" = "Error de la base de datos"; + +/* No comment provided by engineer. */ +"Database ID" = "ID de la base de datos"; + +/* No comment provided by engineer. */ +"Database is encrypted using a random passphrase, you can change it." = "La base de datos está cifrada con una contraseña aleatoria, puedes cambiarla."; + +/* No comment provided by engineer. */ +"Database is encrypted using a random passphrase. Please change it before exporting." = "La base de datos está cifrada con una contraseña aleatoria. Cámbiala antes de exportar."; + +/* No comment provided by engineer. */ +"Database passphrase" = "Contraseña de la base de datos"; + +/* No comment provided by engineer. */ +"Database passphrase & export" = "Contraseña y exportar la base de datos"; + +/* No comment provided by engineer. */ +"Database passphrase is different from saved in the keychain." = "La contraseña es distinta a la almacenada en Keychain."; + +/* No comment provided by engineer. */ +"Database passphrase is required to open chat." = "Para abrir la aplicación se requiere la contraseña de la base de datos."; + +/* No comment provided by engineer. */ +"Database will be encrypted and the passphrase stored in the keychain.\n" = "La base de datos será cifrada y la contraseña se guardará en Keychain.\n"; + +/* No comment provided by engineer. */ +"Database will be encrypted.\n" = "La base de datos será cifrada.\n"; + +/* No comment provided by engineer. */ +"Database will be migrated when the app restarts" = "La base de datos migrará cuando se reinicie la aplicación"; + +/* No comment provided by engineer. */ +"Decentralized" = "Descentralizado"; + +/* pref value */ +"default (%@)" = "por defecto (%@)"; + +/* chat item action */ +"Delete" = "Eliminar"; + +/* No comment provided by engineer. */ +"Delete address" = "Eliminar dirección"; + +/* No comment provided by engineer. */ +"Delete address?" = "¿Eliminar la dirección?"; + +/* No comment provided by engineer. */ +"Delete after" = "Eliminar después"; + +/* No comment provided by engineer. */ +"Delete all files" = "Eliminar todos los archivos"; + +/* No comment provided by engineer. */ +"Delete archive" = "Eliminar archivo"; + +/* No comment provided by engineer. */ +"Delete chat archive?" = "¿Eliminar archivo del chat?"; + +/* No comment provided by engineer. */ +"Delete chat profile?" = "¿Eliminar el perfil de chat?"; + +/* No comment provided by engineer. */ +"Delete connection" = "Eliminar conexión"; + +/* No comment provided by engineer. */ +"Delete contact" = "Eliminar contacto"; + +/* No comment provided by engineer. */ +"Delete Contact" = "Eliminar contacto"; + +/* No comment provided by engineer. */ +"Delete contact?" = "Eliminar contacto?"; + +/* No comment provided by engineer. */ +"Delete database" = "Eliminar base de datos"; + +/* No comment provided by engineer. */ +"Delete files and media?" = "Eliminar archivos y multimedia?"; + +/* No comment provided by engineer. */ +"Delete files for all chat profiles" = "Eliminar archivos para todos los perfiles de chat"; + +/* chat feature */ +"Delete for everyone" = "Eliminar para todos"; + +/* No comment provided by engineer. */ +"Delete for me" = "Eliminar para mí"; + +/* No comment provided by engineer. */ +"Delete group" = "Eliminar grupo"; + +/* No comment provided by engineer. */ +"Delete group?" = "¿Eliminar grupo?"; + +/* No comment provided by engineer. */ +"Delete invitation" = "Eliminar invitación"; + +/* No comment provided by engineer. */ +"Delete link" = "Eliminar enlace"; + +/* No comment provided by engineer. */ +"Delete link?" = "¿Eliminar enlace?"; + +/* No comment provided by engineer. */ +"Delete member message?" = "¿Eliminar el mensaje de miembro?"; + +/* No comment provided by engineer. */ +"Delete message?" = "¿Eliminar mensaje?"; + +/* No comment provided by engineer. */ +"Delete messages" = "Eliminar mensaje"; + +/* No comment provided by engineer. */ +"Delete messages after" = "Eliminar mensaje después"; + +/* No comment provided by engineer. */ +"Delete old database" = "Eliminar base de datos antigua"; + +/* No comment provided by engineer. */ +"Delete old database?" = "¿Eliminar base de datos antígua?"; + +/* No comment provided by engineer. */ +"Delete pending connection" = "Eliminar conexión pendiente"; + +/* No comment provided by engineer. */ +"Delete pending connection?" = "¿Eliminar conexion pendiente?"; + +/* server test step */ +"Delete queue" = "Eliminar cola"; + +/* No comment provided by engineer. */ +"Delete user profile?" = "¿Eliminar perfil de usuario?"; + +/* deleted chat item */ +"deleted" = "eliminado"; + +/* rcv group event chat item */ +"deleted group" = "grupo eliminado"; + +/* No comment provided by engineer. */ +"Description" = "Descripción"; + +/* No comment provided by engineer. */ +"Develop" = "Desarrollo"; + +/* No comment provided by engineer. */ +"Developer tools" = "Herramientas desarrollo"; + +/* No comment provided by engineer. */ +"Device" = "Dispositivo"; + +/* No comment provided by engineer. */ +"Device authentication is disabled. Turning off SimpleX Lock." = "Autenticación de dispositivo desactivada. SimpleX Lock deshabilitado."; + +/* No comment provided by engineer. */ +"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Autenticación de dispositivo desactivada. Puedes habilitar SimpleX Lock en Configuración, después de activar la autenticación de dispositivo."; + +/* No comment provided by engineer. */ +"Different names, avatars and transport isolation." = "Nombre y avatar diferentes, aislamiento de transporte."; + +/* connection level description */ +"direct" = "directo"; + +/* chat feature */ +"Direct messages" = "Mensajes directos"; + +/* No comment provided by engineer. */ +"Direct messages between members are prohibited in this group." = "Los mensajes directos entre miembros del grupo están prohibidos."; + +/* authentication reason */ +"Disable SimpleX Lock" = "Desactivar SimpleX Lock"; + +/* chat feature */ +"Disappearing messages" = "Mensajes temporales"; + +/* No comment provided by engineer. */ +"Disappearing messages are prohibited in this chat." = "Los mensajes temporales están prohibidos en este chat."; + +/* No comment provided by engineer. */ +"Disappearing messages are prohibited in this group." = "Los mensajes temporales están prohibidos en este grupo."; + +/* server test step */ +"Disconnect" = "Desconectar"; + +/* No comment provided by engineer. */ +"Display name" = "Nombre mostrado"; + +/* No comment provided by engineer. */ +"Display name:" = "Nombre mostrado:"; + +/* No comment provided by engineer. */ +"Do it later" = "Hacer más tarde"; + +/* No comment provided by engineer. */ +"Do NOT use SimpleX for emergency calls." = "NO uses SimpleX para llamadas de emergencia."; + +/* No comment provided by engineer. */ +"Duplicate display name!" = "¡Nombre mostrado duplicado!"; + +/* integrity error chat item */ +"duplicate message" = "mensaje duplicado"; + +/* No comment provided by engineer. */ +"e2e encrypted" = "Cifrado e2e"; + +/* chat item action */ +"Edit" = "Editar"; + +/* No comment provided by engineer. */ +"Edit group profile" = "Editar perfil de grupo"; + +/* No comment provided by engineer. */ +"Enable" = "Activar"; + +/* No comment provided by engineer. */ +"Enable automatic message deletion?" = "¿Activar eliminación automática de mensajes?"; + +/* No comment provided by engineer. */ +"Enable instant notifications?" = "¿Activar notificación instantánea?"; + +/* No comment provided by engineer. */ +"Enable notifications" = "Activar notificaciones"; + +/* No comment provided by engineer. */ +"Enable periodic notifications?" = "¿Activar notificaciones periódicas?"; + +/* authentication reason */ +"Enable SimpleX Lock" = "Activar SimpleX Lock"; + +/* No comment provided by engineer. */ +"Enable TCP keep-alive" = "Activar TCP keep-alive"; + +/* enabled status */ +"enabled" = "activado"; + +/* enabled status */ +"enabled for contact" = "activado para el contacto"; + +/* enabled status */ +"enabled for you" = "activado para tí"; + +/* No comment provided by engineer. */ +"Encrypt" = "Cifrar"; + +/* No comment provided by engineer. */ +"Encrypt database?" = "¿Cifrar base de datos?"; + +/* No comment provided by engineer. */ +"Encrypted database" = "Base de datos cifrada"; + +/* notification */ +"Encrypted message or another event" = "Mensaje cifrado u otro evento"; + +/* notification */ +"Encrypted message: database error" = "Mensaje cifrado: error en base de datos"; + +/* notification */ +"Encrypted message: keychain error" = "Mensaje cifrado: error en Keychain"; + +/* notification */ +"Encrypted message: no passphrase" = "Mensaje cifrado: sin contraseña"; + +/* notification */ +"Encrypted message: unexpected error" = "Mensaje cifrado: error inesperado"; + +/* No comment provided by engineer. */ +"ended" = "finalizado"; + +/* call status */ +"ended call %@" = "llamada finalizada %@"; + +/* No comment provided by engineer. */ +"Enter correct passphrase." = "Introduce la contraseña correcta."; + +/* No comment provided by engineer. */ +"Enter passphrase…" = "Introduce la contraseña…"; + +/* No comment provided by engineer. */ +"Enter server manually" = "Introduce el servidor manualmente"; + +/* No comment provided by engineer. */ +"error" = "error"; + +/* No comment provided by engineer. */ +"Error" = "Error"; + +/* No comment provided by engineer. */ +"Error accepting contact request" = "Error aceptando la solicitud del contacto"; + +/* No comment provided by engineer. */ +"Error accessing database file" = "Error de acceso al archivo de base de datos"; + +/* No comment provided by engineer. */ +"Error adding member(s)" = "Error al añadir miembro(s)"; + +/* No comment provided by engineer. */ +"Error changing address" = "Error cambiando la dirección"; + +/* No comment provided by engineer. */ +"Error changing role" = "Error cambiando rol"; + +/* No comment provided by engineer. */ +"Error changing setting" = "Error cambiando configuración"; + +/* No comment provided by engineer. */ +"Error creating address" = "Error creando dirección"; + +/* No comment provided by engineer. */ +"Error creating group" = "Error creando grupo"; + +/* No comment provided by engineer. */ +"Error creating group link" = "Error al crear enlace de grupo"; + +/* No comment provided by engineer. */ +"Error creating profile!" = "Error creando perfil!"; + +/* No comment provided by engineer. */ +"Error deleting chat database" = "Error eliminando la base de datos"; + +/* No comment provided by engineer. */ +"Error deleting chat!" = "¡Error eliminando chat!"; + +/* No comment provided by engineer. */ +"Error deleting connection" = "Error eliminando conexión"; + +/* No comment provided by engineer. */ +"Error deleting contact" = "Error eliminando contacto"; + +/* No comment provided by engineer. */ +"Error deleting database" = "Error eliminando base de datos"; + +/* No comment provided by engineer. */ +"Error deleting old database" = "Error eliminando base de datos antígua"; + +/* No comment provided by engineer. */ +"Error deleting token" = "Error eliminando token"; + +/* No comment provided by engineer. */ +"Error deleting user profile" = "Error eliminando perfil de usuario"; + +/* No comment provided by engineer. */ +"Error enabling notifications" = "Error activando notificaciones"; + +/* No comment provided by engineer. */ +"Error encrypting database" = "Error cifrando la base de datos"; + +/* No comment provided by engineer. */ +"Error exporting chat database" = "Error exportando la base de datos"; + +/* No comment provided by engineer. */ +"Error importing chat database" = "Error importando la base de datos"; + +/* No comment provided by engineer. */ +"Error joining group" = "Error uniéndose al grupo"; + +/* No comment provided by engineer. */ +"Error receiving file" = "Error recibiendo archivo"; + +/* No comment provided by engineer. */ +"Error removing member" = "Error eliminando miembro"; + +/* No comment provided by engineer. */ +"Error saving group profile" = "Error guardando perfil de grupo"; + +/* No comment provided by engineer. */ +"Error saving ICE servers" = "Error guardando servidores ICE"; + +/* No comment provided by engineer. */ +"Error saving passphrase to keychain" = "Error guardando contraseña en Keychain"; + +/* No comment provided by engineer. */ +"Error saving SMP servers" = "Error guardando servidores SMP"; + +/* No comment provided by engineer. */ +"Error sending message" = "Error enviando mensaje"; + +/* No comment provided by engineer. */ +"Error starting chat" = "Error iniciando chat"; + +/* No comment provided by engineer. */ +"Error stopping chat" = "Error deteniendo el chat"; + +/* No comment provided by engineer. */ +"Error switching profile!" = "¡Error cambiando perfil!"; + +/* No comment provided by engineer. */ +"Error updating group link" = "Error actualizando el enlace de grupo"; + +/* No comment provided by engineer. */ +"Error updating message" = "Error actualizando mensaje"; + +/* No comment provided by engineer. */ +"Error updating settings" = "Error actualizando configuración"; + +/* No comment provided by engineer. */ +"Error: %@" = "Error: %@"; + +/* No comment provided by engineer. */ +"Error: no database file" = "Error: sin archivo de base de datos"; + +/* No comment provided by engineer. */ +"Error: URL is invalid" = "Error: la URL no es válida"; + +/* No comment provided by engineer. */ +"Exit without saving" = "Salir sin guardar"; + +/* No comment provided by engineer. */ +"Export database" = "Exportar base de datos"; + +/* No comment provided by engineer. */ +"Export error:" = "Error exportando:"; + +/* No comment provided by engineer. */ +"Exported database archive." = "Archivo de base de datos exportado."; + +/* No comment provided by engineer. */ +"Exporting database archive..." = "Exportando archivo de base de datos..."; + +/* No comment provided by engineer. */ +"Failed to remove passphrase" = "Error eliminando la contraseña"; + +/* No comment provided by engineer. */ +"File will be received when your contact is online, please wait or check later!" = "El archivo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde."; + +/* No comment provided by engineer. */ +"File: %@" = "Archivo: %@"; + +/* No comment provided by engineer. */ +"Files & media" = "Archivo y multimedia"; + +/* No comment provided by engineer. */ +"For console" = "Para consola"; + +/* No comment provided by engineer. */ +"French interface" = "Interfaz en francés"; + +/* No comment provided by engineer. */ +"Full link" = "Enlace completo"; + +/* No comment provided by engineer. */ +"Full name (optional)" = "Nombre completo (opcional)"; + +/* No comment provided by engineer. */ +"Full name:" = "Nombre completo:"; + +/* No comment provided by engineer. */ +"GIFs and stickers" = "GIFs y stickers"; + +/* No comment provided by engineer. */ +"Group" = "Grupo"; + +/* No comment provided by engineer. */ +"group deleted" = "grupo eliminado"; + +/* No comment provided by engineer. */ +"Group display name" = "Nombre mostrado del grupo"; + +/* No comment provided by engineer. */ +"Group full name (optional)" = "Nombre completo del grupo (opcional)"; + +/* No comment provided by engineer. */ +"Group image" = "Imágen del grupo"; + +/* No comment provided by engineer. */ +"Group invitation" = "Invitación de grupo"; + +/* No comment provided by engineer. */ +"Group invitation expired" = "Invitación de grupo caducada"; + +/* No comment provided by engineer. */ +"Group invitation is no longer valid, it was removed by sender." = "La invitación al grupo ya no es válida, ha sido eliminada por el remitente."; + +/* No comment provided by engineer. */ +"Group link" = "Enlace de grupo"; + +/* No comment provided by engineer. */ +"Group links" = "Enlaces de grupo"; + +/* No comment provided by engineer. */ +"Group members can irreversibly delete sent messages." = "Los miembros del grupo pueden eliminar mensajes de forma irreversible."; + +/* No comment provided by engineer. */ +"Group members can send direct messages." = "Los miembros del grupo pueden enviar mensajes directos."; + +/* No comment provided by engineer. */ +"Group members can send disappearing messages." = "Los miembros del grupo pueden enviar mensajes temporales."; + +/* No comment provided by engineer. */ +"Group members can send voice messages." = "Los miembros del grupo pueden mandar mensajes de voz."; + +/* notification */ +"Group message:" = "Mensaje de grupo:"; + +/* No comment provided by engineer. */ +"Group preferences" = "Preferencias del grupo"; + +/* No comment provided by engineer. */ +"Group profile" = "Perfil de grupo"; + +/* No comment provided by engineer. */ +"Group profile is stored on members' devices, not on the servers." = "El perfil de grupo se almacena en los dispositivos, no en los servidores."; + +/* snd group event chat item */ +"group profile updated" = "perfil de grupo actualizado"; + +/* No comment provided by engineer. */ +"Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminará para todos los miembros. ¡No puede deshacerse!"; + +/* No comment provided by engineer. */ +"Group will be deleted for you - this cannot be undone!" = "El grupo se eliminará para tí. ¡No puede deshacerse!"; + +/* No comment provided by engineer. */ +"Help" = "Ayuda"; + +/* No comment provided by engineer. */ +"Hidden" = "Oculto"; + +/* chat item action */ +"Hide" = "Ocultar"; + +/* No comment provided by engineer. */ +"Hide app screen in the recent apps." = "Ocultar pantalla de aplicaciones en aplicaciones recientes."; + +/* No comment provided by engineer. */ +"How it works" = "Cómo funciona"; + +/* No comment provided by engineer. */ +"How SimpleX works" = "Cómo funciona SimpleX"; + +/* No comment provided by engineer. */ +"How to" = "Cómo"; + +/* No comment provided by engineer. */ +"How to use it" = "Cómo usar"; + +/* No comment provided by engineer. */ +"How to use your servers" = "Cómo usar tus servidores"; + +/* No comment provided by engineer. */ +"ICE servers (one per line)" = "Servidores ICE (uno por línea)"; + +/* No comment provided by engineer. */ +"If you can't meet in person, **show QR code in the video call**, or share the link." = "Si no puedes reunirte en persona, **muestra el código QR por videollamada**, o comparte el enlace."; + +/* No comment provided by engineer. */ +"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Si no puedes reunirte en persona, puedes **escanear el código QR por videollamada**, o tu contacto puede compartir un enlace de invitación."; + +/* No comment provided by engineer. */ +"If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Si necesitas usar el chat ahora pulsa **Hacerlo más tarde** más abajo (se ofrecerá migrar la base de datos cuando se reinicie la aplicación)."; + +/* No comment provided by engineer. */ +"Ignore" = "Ignorar"; + +/* No comment provided by engineer. */ +"Image will be received when your contact is online, please wait or check later!" = "La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde."; + +/* No comment provided by engineer. */ +"Immune to spam and abuse" = "Inmune a spam y abuso"; + +/* No comment provided by engineer. */ +"Import" = "Importar"; + +/* No comment provided by engineer. */ +"Import chat database?" = "¿Importar base de datos?"; + +/* No comment provided by engineer. */ +"Import database" = "Importar base de datos"; + +/* No comment provided by engineer. */ +"Improved privacy and security" = "Seguridad y privacidad mejoradas"; + +/* No comment provided by engineer. */ +"Improved server configuration" = "Configuración del servidor mejorada"; + +/* No comment provided by engineer. */ +"Incognito" = "Incógnito"; + +/* No comment provided by engineer. */ +"Incognito mode" = "Modo incógnito"; + +/* No comment provided by engineer. */ +"Incognito mode is not supported here - your main profile will be sent to group members" = "El modo incógnito no se admite aquí, tu perfil principal aparecerá en miembros del grupo"; + +/* No comment provided by engineer. */ +"Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." = "El modo incógnito protege la identidad del perfil principal, por cada contacto nuevo se genera un perfil nuevo aleatorio."; + +/* chat list item description */ +"incognito via contact address link" = "Incógnito mediante enlace de dirección del contacto"; + +/* chat list item description */ +"incognito via group link" = "Incógnito mediante enlace de grupo"; + +/* chat list item description */ +"incognito via one-time link" = "Incógnito mediante enlace único"; + +/* notification */ +"Incoming audio call" = "Llamada entrante"; + +/* notification */ +"Incoming call" = "Llamada entrante"; + +/* notification */ +"Incoming video call" = "Videollamada entrante"; + +/* No comment provided by engineer. */ +"Incorrect security code!" = "¡Código de seguridad incorrecto!"; + +/* connection level description */ +"indirect (%d)" = "indirecto (%d)"; + +/* No comment provided by engineer. */ +"Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Instalar [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)"; + +/* No comment provided by engineer. */ +"Instant push notifications will be hidden!\n" = "¡Las notificaciones automáticas estarán ocultas!\n"; + +/* No comment provided by engineer. */ +"Instantly" = "Al instante"; + +/* No comment provided by engineer. */ +"Interface" = "Interfaz"; + +/* invalid chat data */ +"invalid chat" = "chat no válido"; + +/* No comment provided by engineer. */ +"invalid chat data" = "datos Chat no válidos"; + +/* No comment provided by engineer. */ +"Invalid connection link" = "Enlace de conexión no válido"; + +/* invalid chat item */ +"invalid data" = "datos no válidos"; + +/* No comment provided by engineer. */ +"Invalid server address!" = "¡Dirección de servidor no válida!"; + +/* No comment provided by engineer. */ +"Invitation expired!" = "¡Invitación caducada!"; + +/* group name */ +"invitation to group %@" = "invitación al grupo %@"; + +/* No comment provided by engineer. */ +"Invite members" = "Invitar miembros"; + +/* No comment provided by engineer. */ +"Invite to group" = "Invitar al grupo"; + +/* No comment provided by engineer. */ +"invited" = "invitado"; + +/* rcv group event chat item */ +"invited %@" = "invitado %@"; + +/* chat list item title */ +"invited to connect" = "invitado a conectarse"; + +/* rcv group event chat item */ +"invited via your group link" = "Invitado mediante tu enlace de grupo"; + +/* No comment provided by engineer. */ +"iOS Keychain is used to securely store passphrase - it allows receiving push notifications." = "iOS Keychain se usa para almacenar la contraseña de forma segura. Esto permite recibir notificaciones automáticas."; + +/* No comment provided by engineer. */ +"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "iOS Keychain se usará para almacenar la contraseña de forma segura después de reiniciar la aplicación o cambiar la contraseña. Esto permitirá recibir notificaciones automáticas."; + +/* No comment provided by engineer. */ +"Irreversible message deletion" = "Eliminación del mensaje irreversible"; + +/* No comment provided by engineer. */ +"Irreversible message deletion is prohibited in this chat." = "La eliminación irreversible de mensajes está prohibida en este chat."; + +/* No comment provided by engineer. */ +"Irreversible message deletion is prohibited in this group." = "La eliminación irreversible de mensajes está prohibida en este grupo."; + +/* No comment provided by engineer. */ +"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat."; + +/* No comment provided by engineer. */ +"It can happen when:\n1. The messages expire on the server if they were not received for 30 days,\n2. The server you use to receive the messages from this contact was updated and restarted.\n3. The connection is compromised.\nPlease connect to the developers via Settings to receive the updates about the servers.\nWe will be adding server redundancy to prevent lost messages." = "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."; + +/* No comment provided by engineer. */ +"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Parece que ya está conectado mediante este enlace. Si no es así ha habido un error (%@)."; + +/* No comment provided by engineer. */ +"Italian interface" = "Interfaz en italiano"; + +/* No comment provided by engineer. */ +"italic" = "cursiva"; + +/* No comment provided by engineer. */ +"Join" = "Únete"; + +/* No comment provided by engineer. */ +"join as %@" = "unirte como %@"; + +/* No comment provided by engineer. */ +"Join group" = "Únete al grupo"; + +/* No comment provided by engineer. */ +"Join incognito" = "Únete en modo incógnito"; + +/* No comment provided by engineer. */ +"Joining group" = "Únete al grupo"; + +/* No comment provided by engineer. */ +"Keychain error" = "Error en Keychain"; + +/* No comment provided by engineer. */ +"Large file!" = "¡Archivo grande!"; + +/* No comment provided by engineer. */ +"Leave" = "Salir"; + +/* No comment provided by engineer. */ +"Leave group" = "Salir del grupo"; + +/* No comment provided by engineer. */ +"Leave group?" = "¿Salir del grupo?"; + +/* rcv group event chat item */ +"left" = "ha salido"; + +/* No comment provided by engineer. */ +"Light" = "Claro"; + +/* No comment provided by engineer. */ +"Limitations" = "Limitaciones"; + +/* No comment provided by engineer. */ +"LIVE" = "EN VIVO"; + +/* No comment provided by engineer. */ +"Live message!" = "¡Mensaje en vivo!"; + +/* No comment provided by engineer. */ +"Live messages" = "Mensajes en vivo"; + +/* No comment provided by engineer. */ +"Local name" = "Nombre local"; + +/* No comment provided by engineer. */ +"Local profile data only" = "Sólo datos del perfil local"; + +/* No comment provided by engineer. */ +"Make a private connection" = "Establecer una conexión privada"; + +/* No comment provided by engineer. */ +"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas (%@)."; + +/* No comment provided by engineer. */ +"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas."; + +/* No comment provided by engineer. */ +"Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" = "Muchos se preguntarán: *si SimpleX no tiene identificadores de usuario, ¿cómo puede entregar los mensajes?*"; + +/* No comment provided by engineer. */ +"Mark deleted for everyone" = "Marcar como eliminado para todos"; + +/* No comment provided by engineer. */ +"Mark read" = "Marcar como leído"; + +/* No comment provided by engineer. */ +"Mark verified" = "Marcar como verificado"; + +/* No comment provided by engineer. */ +"Markdown in messages" = "Marcadores en mensajes"; + +/* marked deleted chat item preview text */ +"marked deleted" = "marcado eliminado"; + +/* No comment provided by engineer. */ +"Max 30 seconds, received instantly." = "Máximo 30 segundos, recibido al instante."; + +/* member role */ +"member" = "miembro"; + +/* No comment provided by engineer. */ +"Member" = "Miembro"; + +/* rcv group event chat item */ +"member connected" = "conectado"; + +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All group members will be notified." = "El rol de miembro cambiará a \"%@\". Todos los miembros del grupo serán notificados."; + +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". The member will receive a new invitation." = "El rol del miembro cambiará a \"%@\". El miembro recibirá una invitación nueva."; + +/* No comment provided by engineer. */ +"Member will be removed from group - this cannot be undone!" = "El miembro será eliminado del grupo. ¡No puede deshacerse!"; + +/* No comment provided by engineer. */ +"Message delivery error" = "Error en la entrega del mensaje"; + +/* No comment provided by engineer. */ +"Message draft" = "Borrador de mensaje"; + +/* notification */ +"message received" = "mensaje recibido"; + +/* No comment provided by engineer. */ +"Message text" = "Texto del mensaje"; + +/* No comment provided by engineer. */ +"Messages" = "Mensajes"; + +/* No comment provided by engineer. */ +"Migrating database archive..." = "Migrando la base de datos..."; + +/* No comment provided by engineer. */ +"Migration error:" = "Error de migración:"; + +/* No comment provided by engineer. */ +"Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." = "Error de migración. A continuación pulsa **Omitir** para seguir usando la base de datos actual. Informa del problema a los desarrolladores de la aplicación a través de SimpleX o por correo electrónico a [chat@simplex.chat](mailto:chat@simplex.chat)."; + +/* No comment provided by engineer. */ +"Migration is completed" = "Migración completada"; + +/* call status */ +"missed call" = "llamada perdida"; + +/* chat item action */ +"Moderate" = "Moderar"; + +/* moderated chat item */ +"moderated" = "moderado"; + +/* No comment provided by engineer. */ +"moderated by %@" = "moderado por %@"; + +/* No comment provided by engineer. */ +"More improvements are coming soon!" = "¡Pronto habrá más mejoras!"; + +/* No comment provided by engineer. */ +"Most likely this contact has deleted the connection with you." = "Lo más probable es que este contacto haya eliminado la conexión contigo."; + +/* No comment provided by engineer. */ +"Multiple chat profiles" = "Múltiples perfiles de chat"; + +/* No comment provided by engineer. */ +"Mute" = "Silenciar"; + +/* No comment provided by engineer. */ +"Name" = "Nombre"; + +/* No comment provided by engineer. */ +"Network & servers" = "Redes y servidores"; + +/* No comment provided by engineer. */ +"Network settings" = "Configuración de red"; + +/* No comment provided by engineer. */ +"Network status" = "Estado de la red"; + +/* No comment provided by engineer. */ +"never" = "nunca"; + +/* notification */ +"New contact request" = "Nueva solicitud de contacto"; + +/* notification */ +"New contact:" = "Contacto nuevo:"; + +/* No comment provided by engineer. */ +"New database archive" = "Nuevo archivo de bases de datos"; + +/* No comment provided by engineer. */ +"New in %@" = "Nuevo en %@"; + +/* No comment provided by engineer. */ +"New member role" = "Nuevo rol de miembro"; + +/* notification */ +"new message" = "mensaje nuevo"; + +/* notification */ +"New message" = "mensaje nuevo"; + +/* No comment provided by engineer. */ +"New passphrase…" = "Contraseña nueva…"; + +/* pref value */ +"no" = "no"; + +/* No comment provided by engineer. */ +"No" = "No"; + +/* No comment provided by engineer. */ +"No contacts selected" = "Ningún contacto seleccionado"; + +/* No comment provided by engineer. */ +"No contacts to add" = "Sin contactos que añadir"; + +/* No comment provided by engineer. */ +"No device token!" = "¡Sin dispositivo token!"; + +/* No comment provided by engineer. */ +"no e2e encryption" = "sin cifrado e2e"; + +/* No comment provided by engineer. */ +"No group!" = "¡Grupo no encontrado!"; + +/* No comment provided by engineer. */ +"No permission to record voice message" = "Sin permiso para grabar mensajes de voz"; + +/* No comment provided by engineer. */ +"No received or sent files" = "Sin archivos recibidos o enviados"; + +/* No comment provided by engineer. */ +"Notifications" = "Notificaciones"; + +/* No comment provided by engineer. */ +"Notifications are disabled!" = "¡Las notificaciones están desactivadas!"; + +/* member role */ +"observer" = "observador"; + +/* enabled status + group pref value */ +"off" = "apagado"; + +/* No comment provided by engineer. */ +"Off (Local)" = "Apagado (Local)"; + +/* feature offered item */ +"offered %@" = "ofrecido %@"; + +/* feature offered item */ +"offered %@: %@" = "ofrecido %1$@: %2$@"; + +/* No comment provided by engineer. */ +"Ok" = "Ok"; + +/* No comment provided by engineer. */ +"Old database" = "Base de datos antígua"; + +/* No comment provided by engineer. */ +"Old database archive" = "Archivo de base de datos antiguo"; + +/* group pref value */ +"on" = "Activado"; + +/* No comment provided by engineer. */ +"One-time invitation link" = "Enlace único de invitación"; + +/* No comment provided by engineer. */ +"Onion hosts will be required for connection. Requires enabling VPN." = "Se requieren hosts .onion para la conexión. Requiere activación de la VPN."; + +/* No comment provided by engineer. */ +"Onion hosts will be used when available. Requires enabling VPN." = "Se usarán hosts .onion cuando estén disponibles. Requiere activación de la VPN."; + +/* No comment provided by engineer. */ +"Onion hosts will not be used." = "No se usarán hosts .onion."; + +/* No comment provided by engineer. */ +"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con **cifrado de extremo a extremo de 2 capas**."; + +/* No comment provided by engineer. */ +"Only group owners can change group preferences." = "Sólo los propietarios del grupo pueden cambiar las preferencias de grupo."; + +/* No comment provided by engineer. */ +"Only group owners can enable voice messages." = "Sólo los propietarios del grupo pueden activar los mensajes de voz."; + +/* No comment provided by engineer. */ +"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcar para eliminar)."; + +/* No comment provided by engineer. */ +"Only you can send disappearing messages." = "Sólo tú puedes enviar mensajes temporales."; + +/* No comment provided by engineer. */ +"Only you can send voice messages." = "Sólo tú puedes enviar mensajes de voz."; + +/* No comment provided by engineer. */ +"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcar para eliminar)."; + +/* No comment provided by engineer. */ +"Only your contact can send disappearing messages." = "Sólo tu contacto puede enviar mensajes temporales."; + +/* No comment provided by engineer. */ +"Only your contact can send voice messages." = "Sólo tu contacto puede enviar mensajes de voz."; + +/* No comment provided by engineer. */ +"Open chat" = "Abrir chat"; + +/* authentication reason */ +"Open chat console" = "Abrir la consola de chat"; + +/* No comment provided by engineer. */ +"Open Settings" = "Abrir Configuración"; + +/* authentication reason */ +"Open user profiles" = "Abrir perfil de usuario"; + +/* No comment provided by engineer. */ +"Open-source protocol and code – anybody can run the servers." = "Protocolo y código abiertos: cualquiera puede usar los servidores."; + +/* No comment provided by engineer. */ +"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo."; + +/* No comment provided by engineer. */ +"or chat with the developers" = "o habla con los desarrolladores"; + +/* member role */ +"owner" = "propietario"; + +/* No comment provided by engineer. */ +"Paste" = "Pegar"; + +/* No comment provided by engineer. */ +"Paste image" = "Pegar imagen"; + +/* No comment provided by engineer. */ +"Paste received link" = "Pegar enlace recibido"; + +/* No comment provided by engineer. */ +"Paste the link you received into the box below to connect with your contact." = "Pega el enlace que has recibido en el recuadro para conectar con tu contacto."; + +/* No comment provided by engineer. */ +"peer-to-peer" = "entre particulares"; + +/* No comment provided by engineer. */ +"People can connect to you only via the links you share." = "Las personas pueden conectarse contigo solo mediante los enlaces que compartes."; + +/* No comment provided by engineer. */ +"Periodically" = "Periódico"; + +/* No comment provided by engineer. */ +"PING count" = "Contador PING"; + +/* No comment provided by engineer. */ +"PING interval" = "Intervalo PING"; + +/* No comment provided by engineer. */ +"Please ask your contact to enable sending voice messages." = "Solicita que tu contacto habilite el envío de mensajes de voz."; + +/* No comment provided by engineer. */ +"Please check that you used the correct link or ask your contact to send you another one." = "Comprueba que has usado el enlace correcto o pide a tu contacto que te envíe otro."; + +/* No comment provided by engineer. */ +"Please check your network connection with %@ and try again." = "Comprueba tu conexión de red con %@ e inténtalo de nuevo."; + +/* No comment provided by engineer. */ +"Please check yours and your contact preferences." = "Comprueba tus preferencias y las de tu contacto."; + +/* No comment provided by engineer. */ +"Please contact group admin." = "Póngase en contacto con el administrador del grupo."; + +/* No comment provided by engineer. */ +"Please enter correct current passphrase." = "Introduce la contraseña actual correcta."; + +/* No comment provided by engineer. */ +"Please enter the previous password after restoring database backup. This action can not be undone." = "Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer."; + +/* No comment provided by engineer. */ +"Please restart the app and migrate the database to enable push notifications." = "Reinicia la aplicación y migra la base de datos para activar las notificaciones automáticas."; + +/* No comment provided by engineer. */ +"Please store passphrase securely, you will NOT be able to access chat if you lose it." = "Guarda la contraseña de forma segura, NO podrás acceder al chat si la pierdes."; + +/* No comment provided by engineer. */ +"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes."; + +/* server test error */ +"Possibly, certificate fingerprint in server address is incorrect" = "Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta"; + +/* No comment provided by engineer. */ +"Preserve the last message draft, with attachments." = "Conserva el último borrador del mensaje con los datos adjuntos."; + +/* No comment provided by engineer. */ +"Preset server" = "Servidor predefinido"; + +/* No comment provided by engineer. */ +"Preset server address" = "Dirección del servidor predefinida"; + +/* No comment provided by engineer. */ +"Privacy & security" = "Privacidad y seguridad"; + +/* No comment provided by engineer. */ +"Privacy redefined" = "Privacidad redefinida"; + +/* No comment provided by engineer. */ +"Private filenames" = "Nombres de archivos privados"; + +/* No comment provided by engineer. */ +"Profile and server connections" = "Perfil y conexiones de servidor"; + +/* No comment provided by engineer. */ +"Profile image" = "Imagen del perfil"; + +/* No comment provided by engineer. */ +"Prohibit irreversible message deletion." = "Prohibir la eliminación irreversible de mensajes."; + +/* No comment provided by engineer. */ +"Prohibit sending direct messages to members." = "Prohibir el envío de mensajes directos a los miembros."; + +/* No comment provided by engineer. */ +"Prohibit sending disappearing messages." = "Prohibir el envío de mensajes temporales."; + +/* No comment provided by engineer. */ +"Prohibit sending voice messages." = "Prohibir el envío de mensajes de voz."; + +/* No comment provided by engineer. */ +"Protect app screen" = "Proteger la pantalla de la aplicación"; + +/* No comment provided by engineer. */ +"Protocol timeout" = "Tiempo de espera del protocolo"; + +/* No comment provided by engineer. */ +"Push notifications" = "Notificaciones automáticas"; + +/* No comment provided by engineer. */ +"Rate the app" = "Valora la aplicación"; + +/* No comment provided by engineer. */ +"Read" = "Leer"; + +/* No comment provided by engineer. */ +"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Más información en nuestro [repositorio GitHub](https://github.com/simplex-chat/simplex-chat#readme)."; + +/* No comment provided by engineer. */ +"Read more in our GitHub repository." = "Más información en nuestro repositorio GitHub."; + +/* No comment provided by engineer. */ +"received answer…" = "respuesta recibida…"; + +/* No comment provided by engineer. */ +"received confirmation…" = "confirmación recibida…"; + +/* notification */ +"Received file event" = "Evento de archivo recibido"; + +/* No comment provided by engineer. */ +"Receiving via" = "Recibiendo mediante"; + +/* No comment provided by engineer. */ +"Recipients see updates as you type them." = "Los destinatarios ven la actualizacion mientras escribes."; + +/* No comment provided by engineer. */ +"Reduced battery usage" = "Reducción del uso de la batería"; + +/* reject incoming call via notification */ +"Reject" = "Rechazar"; + +/* No comment provided by engineer. */ +"Reject contact (sender NOT notified)" = "Rechazar contacto (NO se notifica al remitente)"; + +/* No comment provided by engineer. */ +"Reject contact request" = "Rechazar solicitud de contacto"; + +/* call status */ +"rejected call" = "llamada rechazada"; + +/* No comment provided by engineer. */ +"Relay server is only used if necessary. Another party can observe your IP address." = "El servidor de retransmisión sólo se utiliza en caso necesario. Una tercera persona puede observar tu dirección IP."; + +/* No comment provided by engineer. */ +"Relay server protects your IP address, but it can observe the duration of the call." = "El servidor de retransmisión protege tu IP pero puede observar la duración de la llamada."; + +/* No comment provided by engineer. */ +"Remove" = "Eliminar"; + +/* No comment provided by engineer. */ +"Remove member" = "Eliminar miembro"; + +/* No comment provided by engineer. */ +"Remove member?" = "¿Eliminar miembro?"; + +/* No comment provided by engineer. */ +"Remove passphrase from keychain?" = "¿Eliminar contraseña de Keychain?"; + +/* No comment provided by engineer. */ +"removed" = "eliminado"; + +/* rcv group event chat item */ +"removed %@" = "eliminado %@"; + +/* rcv group event chat item */ +"removed you" = "te ha eliminado"; + +/* chat item action */ +"Reply" = "Responder"; + +/* No comment provided by engineer. */ +"Required" = "Obligatorio"; + +/* No comment provided by engineer. */ +"Reset" = "Restablecer"; + +/* No comment provided by engineer. */ +"Reset colors" = "Restablecer colores"; + +/* No comment provided by engineer. */ +"Reset to defaults" = "Restablecer valores por defecto"; + +/* No comment provided by engineer. */ +"Restart the app to create a new chat profile" = "Reinicia la aplicación para crear un perfil nuevo"; + +/* No comment provided by engineer. */ +"Restart the app to use imported chat database" = "Reinicia la aplicación para utilizar la base de datos importada"; + +/* No comment provided by engineer. */ +"Restore" = "Restaurar"; + +/* No comment provided by engineer. */ +"Restore database backup" = "Restaurar copia de seguridad de la base de datos"; + +/* No comment provided by engineer. */ +"Restore database backup?" = "¿Restaurar copia de seguridad de la base de datos?"; + +/* No comment provided by engineer. */ +"Restore database error" = "Error al restaurar la base de datos"; + +/* chat item action */ +"Reveal" = "Revelar"; + +/* No comment provided by engineer. */ +"Revert" = "Revertir"; + +/* No comment provided by engineer. */ +"Role" = "Rol"; + +/* No comment provided by engineer. */ +"Run chat" = "Ejecutar Chat"; + +/* chat item action */ +"Save" = "Guardar"; + +/* No comment provided by engineer. */ +"Save (and notify contacts)" = "Guardar (y notificar contactos)"; + +/* No comment provided by engineer. */ +"Save and notify contact" = "Guardar y notificar contacto"; + +/* No comment provided by engineer. */ +"Save and notify group members" = "Guardar y notificar a los miembros del grupo"; + +/* No comment provided by engineer. */ +"Save archive" = "Guardar archivo"; + +/* No comment provided by engineer. */ +"Save group profile" = "Guardar perfil de grupo"; + +/* No comment provided by engineer. */ +"Save passphrase and open chat" = "Guardar contraseña y abrir el chat"; + +/* No comment provided by engineer. */ +"Save passphrase in Keychain" = "Guardar la contraseña en Keychain"; + +/* No comment provided by engineer. */ +"Save preferences?" = "¿Guardar preferencias?"; + +/* No comment provided by engineer. */ +"Save servers" = "Guardar servidores"; + +/* No comment provided by engineer. */ +"Saved WebRTC ICE servers will be removed" = "Los servidores WebRTC ICE guardados serán eliminados"; + +/* No comment provided by engineer. */ +"Scan code" = "Escanear código"; + +/* No comment provided by engineer. */ +"Scan QR code" = "Escanear código QR"; + +/* No comment provided by engineer. */ +"Scan security code from your contact's app." = "Escanea el código de seguridad desde la aplicación de tu contacto."; + +/* No comment provided by engineer. */ +"Scan server QR code" = "Escanear código QR del servidor"; + +/* No comment provided by engineer. */ +"Search" = "Buscar"; + +/* network option */ +"sec" = "seg"; + +/* No comment provided by engineer. */ +"secret" = "secreto"; + +/* server test step */ +"Secure queue" = "Cola segura"; + +/* No comment provided by engineer. */ +"Security assessment" = "Evaluación de la seguridad"; + +/* No comment provided by engineer. */ +"Security code" = "Código de seguridad"; + +/* No comment provided by engineer. */ +"Send" = "Enviar"; + +/* No comment provided by engineer. */ +"Send a live message - it will update for the recipient(s) as you type it" = "Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe"; + +/* No comment provided by engineer. */ +"Send direct message" = "Enviar mensaje directo"; + +/* No comment provided by engineer. */ +"Send link previews" = "Enviar previsualizaciones de enlaces"; + +/* No comment provided by engineer. */ +"Send live message" = "Enviar mensaje en vivo"; + +/* No comment provided by engineer. */ +"Send notifications" = "Enviar notificaciones"; + +/* No comment provided by engineer. */ +"Send notifications:" = "Enviar notificaciones:"; + +/* No comment provided by engineer. */ +"Send questions and ideas" = "Envía preguntas e ideas"; + +/* No comment provided by engineer. */ +"Send them from gallery or custom keyboards." = "Envíalos desde la galería o desde teclados personalizados."; + +/* No comment provided by engineer. */ +"Sender cancelled file transfer." = "El remitente ha cancelado la transferencia de archivos."; + +/* No comment provided by engineer. */ +"Sender may have deleted the connection request." = "El remitente puede haber eliminado la solicitud de conexión."; + +/* No comment provided by engineer. */ +"Sending via" = "Envando mediante"; + +/* notification */ +"Sent file event" = "Evento de archivo enviado"; + +/* No comment provided by engineer. */ +"Sent messages will be deleted after set time." = "Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido."; + +/* server test error */ +"Server requires authorization to create queues, check password" = "El servidor requiere autorización para crear colas, comprueba la contraseña"; + +/* No comment provided by engineer. */ +"Server test failed!" = "¡Error en prueba del servidor!"; + +/* No comment provided by engineer. */ +"Servers" = "Servidores"; + +/* No comment provided by engineer. */ +"Set 1 day" = "Establecer 1 día"; + +/* No comment provided by engineer. */ +"Set contact name…" = "Introduce el nombre del contacto…"; + +/* No comment provided by engineer. */ +"Set group preferences" = "Establecer preferencias de grupo"; + +/* No comment provided by engineer. */ +"Set passphrase to export" = "Seleccióna contraseña para exportar"; + +/* No comment provided by engineer. */ +"Set timeouts for proxy/VPN" = "Establecer tiempos de espera para proxy/VPN"; + +/* No comment provided by engineer. */ +"Settings" = "Configuración"; + +/* chat item action */ +"Share" = "Compartir"; + +/* No comment provided by engineer. */ +"Share invitation link" = "Compartir enlace de invitación"; + +/* No comment provided by engineer. */ +"Share link" = "Compartir enlace"; + +/* No comment provided by engineer. */ +"Share one-time invitation link" = "Compartir enlace único de invitación"; + +/* No comment provided by engineer. */ +"Show calls in phone history" = "Mostrar llamadas en el historial del teléfono"; + +/* No comment provided by engineer. */ +"Show preview" = "Mostrar vista previa"; + +/* No comment provided by engineer. */ +"Show QR code" = "Mostrar código QR"; + +/* No comment provided by engineer. */ +"SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)." = "La seguridad de SimpleX Chat fue [auditada por Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)."; + +/* simplex link type */ +"SimpleX contact address" = "Dirección de contacto SimpleX"; + +/* notification */ +"SimpleX encrypted message or connection event" = "Mensaje cifrado SimpleX o evento de conexión"; + +/* simplex link type */ +"SimpleX group link" = "Enlace de grupo SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX links" = "Enlaces SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Lock" = "Bloqueo SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Lock turned on" = "Bloqueo SimpleX activado"; + +/* simplex link type */ +"SimpleX one-time invitation" = "Invitación única SimpleX"; + +/* No comment provided by engineer. */ +"Skip" = "Omitir"; + +/* No comment provided by engineer. */ +"Skipped messages" = "Mensajes omitidos"; + +/* No comment provided by engineer. */ +"SMP servers" = "Servidores SMP"; + +/* notification title */ +"Somebody" = "Alguien"; + +/* No comment provided by engineer. */ +"Start a new chat" = "Iniciar chat nuevo"; + +/* No comment provided by engineer. */ +"Start chat" = "Iniciar chat"; + +/* No comment provided by engineer. */ +"Start migration" = "Iniciar migración"; + +/* No comment provided by engineer. */ +"starting…" = "inicializando…"; + +/* No comment provided by engineer. */ +"Stop" = "Detener"; + +/* No comment provided by engineer. */ +"Stop chat to enable database actions" = "Detener Chat para habilitar acciones sobre la base de datos"; + +/* No comment provided by engineer. */ +"Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped." = "Detener Chat para exportar, importar o eliminar la base de datos del chat. No podrá recibir ni enviar mensajes mientras el chat esté detenido."; + +/* No comment provided by engineer. */ +"Stop chat?" = "¿Detener Chat?"; + +/* authentication reason */ +"Stop SimpleX" = "Detener SimpleX"; + +/* No comment provided by engineer. */ +"strike" = "tachado"; + +/* No comment provided by engineer. */ +"Support SimpleX Chat" = "Soporte SimpleX Chat"; + +/* No comment provided by engineer. */ +"System" = "Sistema"; + +/* No comment provided by engineer. */ +"Take picture" = "Tomar foto"; + +/* No comment provided by engineer. */ +"Tap button " = "Pulsa el botón "; + +/* No comment provided by engineer. */ +"Tap to join" = "Pulsa para unirse"; + +/* No comment provided by engineer. */ +"Tap to join incognito" = "Pulsa para unirte en modo incógnito"; + +/* No comment provided by engineer. */ +"Tap to start a new chat" = "Pulsa para iniciar chat nuevo"; + +/* No comment provided by engineer. */ +"TCP connection timeout" = "Tiempo de espera de la conexión TCP agotado"; + +/* No comment provided by engineer. */ +"TCP_KEEPCNT" = "TCP_KEEPCNT"; + +/* No comment provided by engineer. */ +"TCP_KEEPIDLE" = "TCP_KEEPIDLE"; + +/* No comment provided by engineer. */ +"TCP_KEEPINTVL" = "TCP_KEEPINTVL"; + +/* server test failure */ +"Test failed at step %@." = "La prueba ha fallado en el paso %@."; + +/* No comment provided by engineer. */ +"Test server" = "Probar servidor"; + +/* No comment provided by engineer. */ +"Test servers" = "Probar servidores"; + +/* No comment provided by engineer. */ +"Tests failed!" = "¡Pruebas fallidas!"; + +/* No comment provided by engineer. */ +"Thank you for installing SimpleX Chat!" = "¡Gracias por instalar SimpleX Chat!"; + +/* No comment provided by engineer. */ +"Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Gracias a los usuarios: [contribuye vía Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#traducir-el-aplicaciones)!"; + +/* No comment provided by engineer. */ +"Thanks to the users – contribute via Weblate!" = "Gracias a los usuarios: ¡contribuye a través de Weblate!"; + +/* No comment provided by engineer. */ +"The 1st platform without any user identifiers – private by design." = "La primera plataforma sin identificadores de usuario: diseñada para la privacidad."; + +/* No comment provided by engineer. */ +"The app can notify you when you receive messages or contact requests - please open settings to enable." = "La aplicación puede notificarte cuando recibas mensajes o solicitudes de contacto: abre la configuración para habilitar."; + +/* No comment provided by engineer. */ +"The attempt to change database passphrase was not completed." = "El intento de cambiar la contraseña de la base de datos no se ha completado."; + +/* No comment provided by engineer. */ +"The connection you accepted will be cancelled!" = "¡La conexión que has aceptado se cancelará!"; + +/* No comment provided by engineer. */ +"The contact you shared this link with will NOT be able to connect!" = "¡El contacto con el que has compartido este enlace NO podrá conectarse!"; + +/* No comment provided by engineer. */ +"The created archive is available via app Settings / Database / Old database archive." = "El archivo creado está disponible a través de Configuración / Base de datos / Archivo de base de datos antigua."; + +/* No comment provided by engineer. */ +"The group is fully decentralized – it is visible only to the members." = "El grupo está totalmente descentralizado: sólo es visible para los miembros."; + +/* No comment provided by engineer. */ +"The message will be deleted for all members." = "El mensaje se eliminará para todos los miembros."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "El mensaje será marcado como moderado para todos los miembros."; + +/* No comment provided by engineer. */ +"The next generation of private messaging" = "La próxima generación de mensajería privada"; + +/* No comment provided by engineer. */ +"The old database was not removed during the migration, it can be deleted." = "La base de datos antigua no se eliminó durante la migración, puede eliminarse."; + +/* No comment provided by engineer. */ +"The profile is only shared with your contacts." = "El perfil sólo se comparte con tus contactos."; + +/* No comment provided by engineer. */ +"The sender will NOT be notified" = "El remitente NO será notificado"; + +/* No comment provided by engineer. */ +"The servers for new connections of your current chat profile **%@**." = "Los servidores para nuevas conexiones de tu perfil de Chat actual **%@**."; + +/* No comment provided by engineer. */ +"Theme" = "Tema"; + +/* No comment provided by engineer. */ +"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "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."; + +/* No comment provided by engineer. */ +"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos."; + +/* No comment provided by engineer. */ +"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente."; + +/* notification title */ +"this contact" = "este contacto"; + +/* No comment provided by engineer. */ +"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo)."; + +/* No comment provided by engineer. */ +"This group no longer exists." = "Este grupo ya no existe."; + +/* No comment provided by engineer. */ +"This setting applies to messages in your current chat profile **%@**." = "Esta configuración se aplica a los mensajes en su perfil actual de Chat **%@**."; + +/* No comment provided by engineer. */ +"To ask any questions and to receive updates:" = "Para consultar cualquier duda y recibir actualizaciones:"; + +/* No comment provided by engineer. */ +"To find the profile used for an incognito connection, tap the contact or group name on top of the chat." = "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."; + +/* No comment provided by engineer. */ +"To make a new connection" = "Para hacer una conexión nueva"; + +/* No comment provided by engineer. */ +"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Para proteger la privacidad, en lugar de los identificadores de usuario que utilizan el resto de plataformas, SimpleX dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos."; + +/* No comment provided by engineer. */ +"To protect timezone, image/voice files use UTC." = "Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC."; + +/* No comment provided by engineer. */ +"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Para proteger tu información, activa SimpleX Lock.\nSe te pedirá que completes la autenticación antes de activar esta función."; + +/* No comment provided by engineer. */ +"To record voice message please grant permission to use Microphone." = "Para grabar el mensaje de voz concede permiso para usar el micrófono."; + +/* No comment provided by engineer. */ +"To support instant push notifications the chat database has to be migrated." = "Para permitir las notificaciones automáticas instantáneas, la base de datos se debe migrar."; + +/* No comment provided by engineer. */ +"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos."; + +/* No comment provided by engineer. */ +"Transport isolation" = "Aislamiento de transporte"; + +/* No comment provided by engineer. */ +"Trying to connect to the server used to receive messages from this contact (error: %@)." = "Intentando conectar con el servidor usado para recibir mensajes de este contacto (error: %@)."; + +/* No comment provided by engineer. */ +"Trying to connect to the server used to receive messages from this contact." = "Intentando conectar con el servidor utilizado para recibir mensajes de este contacto."; + +/* No comment provided by engineer. */ +"Turn off" = "Desactivar"; + +/* No comment provided by engineer. */ +"Turn off notifications?" = "¿Desactivar notificaciones?"; + +/* No comment provided by engineer. */ +"Turn on" = "Activar"; + +/* No comment provided by engineer. */ +"Unable to record voice message" = "No se puede grabar mensaje de voz"; + +/* No comment provided by engineer. */ +"Unexpected error: %@" = "Error inesperado: %@"; + +/* No comment provided by engineer. */ +"Unexpected migration state" = "Estado de migración inesperado"; + +/* connection info */ +"unknown" = "desconocido"; + +/* callkit banner */ +"Unknown caller" = "Llamada desconocida"; + +/* No comment provided by engineer. */ +"Unknown database error: %@" = "Error desconocido en base de datos: %@"; + +/* No comment provided by engineer. */ +"Unknown error" = "Error desconocido"; + +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "A menos que utilices la interfaz de llamadas de iOS, activa el modo No molestar para evitar interrupciones."; + +/* No comment provided by engineer. */ +"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A menos que tu contacto haya eliminado la conexión o\nque 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."; + +/* authentication reason */ +"Unlock" = "Desbloquear"; + +/* No comment provided by engineer. */ +"Unmute" = "Activar audio"; + +/* No comment provided by engineer. */ +"Unread" = "No leído"; + +/* No comment provided by engineer. */ +"Update" = "Actualizar"; + +/* No comment provided by engineer. */ +"Update .onion hosts setting?" = "¿Actualizar la configuración de los hosts .onion?"; + +/* No comment provided by engineer. */ +"Update database passphrase" = "Actualizar contraseña de la base de datos"; + +/* No comment provided by engineer. */ +"Update network settings?" = "¿Actualizar la configuración de red?"; + +/* No comment provided by engineer. */ +"Update transport isolation mode?" = "¿Actualizar el modo de aislamiento de transporte?"; + +/* rcv group event chat item */ +"updated group profile" = "perfil de grupo actualizado"; + +/* No comment provided by engineer. */ +"Updating settings will re-connect the client to all servers." = "Al actualizar la configuración el cliente se reconectará a todos los servidores."; + +/* No comment provided by engineer. */ +"Updating this setting will re-connect the client to all servers." = "Al actualizar esta configuración el cliente se reconectará a todos los servidores."; + +/* No comment provided by engineer. */ +"Use .onion hosts" = "Usar hosts .onion"; + +/* No comment provided by engineer. */ +"Use chat" = "Usar Chat"; + +/* No comment provided by engineer. */ +"Use for new connections" = "Usar para conexiones nuevas"; + +/* No comment provided by engineer. */ +"Use iOS call interface" = "Usar interfaz de llamada de iOS"; + +/* No comment provided by engineer. */ +"Use server" = "Usar servidor"; + +/* No comment provided by engineer. */ +"Use SimpleX Chat servers?" = "¿Usar servidores SimpleX Chat?"; + +/* No comment provided by engineer. */ +"User profile" = "Perfil de usuario"; + +/* No comment provided by engineer. */ +"Using .onion hosts requires compatible VPN provider." = "Utilizar hosts .onion requiere un proveedor VPN compatible."; + +/* No comment provided by engineer. */ +"Using SimpleX Chat servers." = "Usar servidores SimpleX Chat."; + +/* No comment provided by engineer. */ +"v%@ (%@)" = "v%@ (%@)"; + +/* No comment provided by engineer. */ +"Verify connection security" = "Comprobar la seguridad de la conexión"; + +/* No comment provided by engineer. */ +"Verify security code" = "Comprobar código de seguridad"; + +/* No comment provided by engineer. */ +"Via browser" = "Mediante navegador"; + +/* chat list item description */ +"via contact address link" = "mediante enlace de dirección de contacto"; + +/* chat list item description */ +"via group link" = "mediante enlace de grupo"; + +/* chat list item description */ +"via one-time link" = "mediante enlace único"; + +/* No comment provided by engineer. */ +"via relay" = "mediante servidor de retransmisión"; + +/* No comment provided by engineer. */ +"Video call" = "Videollamada"; + +/* No comment provided by engineer. */ +"video call (not e2e encrypted)" = "videollamada (sin cifrado e2e)"; + +/* No comment provided by engineer. */ +"View security code" = "Ver código de seguridad"; + +/* No comment provided by engineer. */ +"Voice message…" = "Mensaje de voz…"; + +/* chat feature */ +"Voice messages" = "Mensajes de voz"; + +/* No comment provided by engineer. */ +"Voice messages are prohibited in this chat." = "Los mensajes de voz están prohibidos en este chat."; + +/* No comment provided by engineer. */ +"Voice messages are prohibited in this group." = "Los mensajes de voz están prohibidos en este grupo."; + +/* No comment provided by engineer. */ +"Voice messages prohibited!" = "¡Mensajes de voz prohibidos!"; + +/* No comment provided by engineer. */ +"waiting for answer…" = "esperando respuesta…"; + +/* No comment provided by engineer. */ +"waiting for confirmation…" = "esperando confirmación…"; + +/* No comment provided by engineer. */ +"Waiting for file" = "Esperando archivo"; + +/* No comment provided by engineer. */ +"Waiting for image" = "Esperando imagen"; + +/* No comment provided by engineer. */ +"wants to connect to you!" = "¡quiere contactar contigo!"; + +/* No comment provided by engineer. */ +"WebRTC ICE servers" = "Servidores WebRTC ICE"; + +/* No comment provided by engineer. */ +"Welcome %@!" = "¡Bienvenido %@!"; + +/* No comment provided by engineer. */ +"Welcome message" = "Mensaje de bienvenida"; + +/* No comment provided by engineer. */ +"What's new" = "Novedades"; + +/* No comment provided by engineer. */ +"When available" = "Cuando esté disponible"; + +/* No comment provided by engineer. */ +"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Cuando compartes un perfil incógnito con alguien, este perfil se usará para los grupos a los que te inviten."; + +/* No comment provided by engineer. */ +"With optional welcome message." = "Con mensaje de bienvenida opcional."; + +/* No comment provided by engineer. */ +"Wrong database passphrase" = "Contraseña de base de datos incorrecta"; + +/* No comment provided by engineer. */ +"Wrong passphrase!" = "¡Contraseña incorrecta!"; + +/* pref value */ +"yes" = "sí"; + +/* No comment provided by engineer. */ +"You" = "Tú"; + +/* No comment provided by engineer. */ +"You accepted connection" = "Has aceptado la conexión"; + +/* No comment provided by engineer. */ +"You allow" = "Permites"; + +/* No comment provided by engineer. */ +"You already have a chat profile with the same display name. Please choose another name." = "Tienes un perfil de chat con el mismo nombre mostrado. Debes elegir otro nombre."; + +/* No comment provided by engineer. */ +"You are already connected to %@." = "Ya estás conectado a %@."; + +/* No comment provided by engineer. */ +"You are connected to the server used to receive messages from this contact." = "Estás conectado al servidor utilizado para recibir mensajes de este contacto."; + +/* No comment provided by engineer. */ +"you are invited to group" = "has sido invitado al grupo"; + +/* No comment provided by engineer. */ +"You are invited to group" = "Has sido invitado al grupo"; + +/* No comment provided by engineer. */ +"you are observer" = "Tu rol es observador"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Puede aceptar llamadas desde la pantalla de bloqueo, sin autenticación de dispositivos y aplicaciones."; + +/* No comment provided by engineer. */ +"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en el botón **Abrir en aplicación móvil**."; + +/* notification body */ +"You can now send messages to %@" = "Ya puedes enviar mensajes a %@"; + +/* No comment provided by engineer. */ +"You can set lock screen notification preview via settings." = "Puedes configurar las notificaciones de la pantalla de bloqueo desde Configuración."; + +/* No comment provided by engineer. */ +"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." = "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."; + +/* No comment provided by engineer. */ +"You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it." = "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."; + +/* No comment provided by engineer. */ +"You can start chat via app Settings / Database or by restarting the app" = "Puede iniciar Chat a través de la Configuración / base de datos de la aplicación o reiniciando la aplicación"; + +/* No comment provided by engineer. */ +"You can use markdown to format messages:" = "Puedes usar marcadores para dar formato a los mensajes:"; + +/* No comment provided by engineer. */ +"You can't send messages!" = "¡No puedes enviar mensajes!"; + +/* chat item text */ +"you changed address" = "has cambiado la dirección"; + +/* chat item text */ +"you changed address for %@" = "has cambiado la dirección por %@"; + +/* snd group event chat item */ +"you changed role for yourself to %@" = "has cambiado tu rol a %@"; + +/* snd group event chat item */ +"you changed role of %@ to %@" = "has cambiado el rol de %1$@ a %2$@"; + +/* No comment provided by engineer. */ +"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Tú controlas a través de qué servidor(es) **recibes** los mensajes. Tus contactos controlan a través de qué servidor(es) **envías** tus mensajes."; + +/* No comment provided by engineer. */ +"You could not be verified; please try again." = "No has podido ser verificado. Inténtelo de nuevo."; + +/* No comment provided by engineer. */ +"You have no chats" = "No tienes chats"; + +/* No comment provided by engineer. */ +"You have to enter passphrase every time the app starts - it is not stored on the device." = "La contraseña no se almacena en el dispositivo, tienes que introducirla cada vez que inicies la aplicación."; + +/* No comment provided by engineer. */ +"You invited your contact" = "Has invitado a tu contacto"; + +/* No comment provided by engineer. */ +"You joined this group" = "Te has unido a este grupo"; + +/* No comment provided by engineer. */ +"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con miembro del grupo invitado."; + +/* snd group event chat item */ +"you left" = "has salido"; + +/* No comment provided by engineer. */ +"You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." = "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."; + +/* No comment provided by engineer. */ +"You need to allow your contact to send voice messages to be able to send them." = "Para poder enviar mensajes de voz debes permitir que tu contacto pueda enviarlos."; + +/* No comment provided by engineer. */ +"You rejected group invitation" = "Has rechazado la invitación del grupo"; + +/* snd group event chat item */ +"you removed %@" = "has eliminado %@"; + +/* No comment provided by engineer. */ +"You sent group invitation" = "Has enviado una invitación de grupo"; + +/* chat list item description */ +"you shared one-time link" = "has compartido un enlace único"; + +/* chat list item description */ +"you shared one-time link incognito" = "has compartido un enlace único en módo incógnito"; + +/* No comment provided by engineer. */ +"You will be connected to group when the group host's device is online, please wait or check later!" = "Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde."; + +/* No comment provided by engineer. */ +"You will be connected when your connection request is accepted, please wait or check later!" = "Te conectarás cuando se acepte tu solicitud de conexión, por favor espere o compruébalo más tarde."; + +/* No comment provided by engineer. */ +"You will be connected when your contact's device is online, please wait or check later!" = "Te conectarás cuando el dispositivo de tu contacto esté en línea, por favor espera o compruébalo más tarde."; + +/* No comment provided by engineer. */ +"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano."; + +/* No comment provided by engineer. */ +"You will join a group this link refers to and connect to its group members." = "Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros."; + +/* No comment provided by engineer. */ +"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á."; + +/* No comment provided by engineer. */ +"you: " = "tú: "; + +/* No comment provided by engineer. */ +"You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" = "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"; + +/* No comment provided by engineer. */ +"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido"; + +/* No comment provided by engineer. */ +"Your calls" = "Tus llamadas"; + +/* No comment provided by engineer. */ +"Your chat database" = "Base de datos"; + +/* No comment provided by engineer. */ +"Your chat database is not encrypted - set passphrase to encrypt it." = "La base de datos no está cifrada - establece una contraseña para cifrarla."; + +/* No comment provided by engineer. */ +"Your chat profile will be sent to group members" = "Tu perfil de chat se enviará a los miembros del grupo"; + +/* No comment provided by engineer. */ +"Your chat profile will be sent to your contact" = "Tu perfil de chat se enviará a tu contacto"; + +/* No comment provided by engineer. */ +"Your chat profiles" = "Tus perfiles de chat"; + +/* No comment provided by engineer. */ +"Your chats" = "Tus chats"; + +/* No comment provided by engineer. */ +"Your contact address" = "Tu dirección de contacto"; + +/* No comment provided by engineer. */ +"Your contact can scan it from the app." = "Tu contacto puede escanearlo desde la aplicación."; + +/* No comment provided by engineer. */ +"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Tu contacto debe estar en línea para que se complete la conexión.\nPuedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo)."; + +/* No comment provided by engineer. */ +"Your contact sent a file that is larger than currently supported maximum size (%@)." = "El contacto ha enviado un archivo mayor al máximo admitido (%@)."; + +/* No comment provided by engineer. */ +"Your contacts can allow full message deletion." = "Tus contactos pueden permitir la eliminación completa de mensajes."; + +/* No comment provided by engineer. */ +"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."; + +/* No comment provided by engineer. */ +"Your current profile" = "Tu perfil actual"; + +/* No comment provided by engineer. */ +"Your ICE servers" = "Tus servidores ICE"; + +/* No comment provided by engineer. */ +"Your preferences" = "Tus preferencias"; + +/* No comment provided by engineer. */ +"Your privacy" = "Tu privacidad"; + +/* No comment provided by engineer. */ +"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos.\nLos servidores de SimpleX no pueden ver tu perfil."; + +/* No comment provided by engineer. */ +"Your profile will be sent to the contact that you received this link from" = "Tu perfil se enviará al contacto del que has recibido este enlace"; + +/* No comment provided by engineer. */ +"Your profile, contacts and delivered messages are stored on your device." = "Tu perfil, contactos y mensajes entregados se almacenan en tu dispositivo."; + +/* No comment provided by engineer. */ +"Your random profile" = "Tu perfil aleatorio"; + +/* No comment provided by engineer. */ +"Your server" = "Tu servidor"; + +/* No comment provided by engineer. */ +"Your server address" = "Dirección de tu servidor"; + +/* No comment provided by engineer. */ +"Your settings" = "Tu configuración"; + +/* No comment provided by engineer. */ +"Your SimpleX contact address" = "Tu dirección de contacto SimpleX"; + +/* No comment provided by engineer. */ +"Your SMP servers" = "Tus servidores SMP"; + diff --git a/apps/ios/es.lproj/SimpleX--iOS--InfoPlist.strings b/apps/ios/es.lproj/SimpleX--iOS--InfoPlist.strings new file mode 100644 index 000000000..b2dad8ada --- /dev/null +++ b/apps/ios/es.lproj/SimpleX--iOS--InfoPlist.strings @@ -0,0 +1,15 @@ +/* Bundle name */ +"CFBundleName" = "SimpleX"; + +/* Privacy - Camera Usage Description */ +"NSCameraUsageDescription" = "SimpleX necesita acceso a la cámara para escanear códigos QR para conectarse con otros usuarios y para las videollamadas."; + +/* Privacy - Face ID Usage Description */ +"NSFaceIDUsageDescription" = "SimpleX usa reconocimiento facial para la autenticación local"; + +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "SimpleX necesita acceso al micrófono para las llamadas de audio, vídeo y para grabar mensajes de voz."; + +/* Privacy - Photo Library Additions Usage Description */ +"NSPhotoLibraryAddUsageDescription" = "SimpleX necesita acceso a la galería de fotos para guardar los medios capturados y recibidos"; + diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 45daa5b2b..657399536 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -311,6 +311,9 @@ /* pref value */ "always" = "toujours"; +/* No comment provided by engineer. */ +"Always use relay" = "Se connecter via relais"; + /* No comment provided by engineer. */ "Answer call" = "Répondre à l'appel"; @@ -341,6 +344,9 @@ /* No comment provided by engineer. */ "Authentication failed" = "Échec de l'authentification"; +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "L'authentification est requise avant que l'appel ne soit connecté, mais vous risquez de manquer des appels."; + /* No comment provided by engineer. */ "Authentication unavailable" = "Authentification indisponible"; @@ -533,9 +539,6 @@ /* No comment provided by engineer. */ "Connect via one-time link?" = "Se connecter via un lien unique ?"; -/* No comment provided by engineer. */ -"Connect via relay" = "Se connecter via relais"; - /* No comment provided by engineer. */ "connected" = "connecté"; @@ -788,6 +791,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Supprimer le lien ?"; +/* No comment provided by engineer. */ +"Delete member message?" = "Supprimer le message de ce membre ?"; + /* No comment provided by engineer. */ "Delete message?" = "Supprimer le message ?"; @@ -1067,6 +1073,9 @@ /* No comment provided by engineer. */ "Error switching profile!" = "Erreur lors du changement de profil !"; +/* No comment provided by engineer. */ +"Error updating group link" = "Erreur lors de la mise à jour du lien de groupe"; + /* No comment provided by engineer. */ "Error updating message" = "Erreur lors de la mise à jour du message"; @@ -1220,9 +1229,6 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "Serveurs ICE (un par ligne)"; -/* No comment provided by engineer. */ -"If the video fails to connect, flip the camera to resolve it." = "Si la vidéo ne se connecte pas, retournez la caméra."; - /* No comment provided by engineer. */ "If you can't meet in person, **show QR code in the video call**, or share the link." = "Si vous ne pouvez pas voir la personne, **montrez lui le code QR dans un appel vidéo**, ou partagez lui le lien."; @@ -1301,6 +1307,9 @@ /* No comment provided by engineer. */ "Instantly" = "Instantané"; +/* No comment provided by engineer. */ +"Interface" = "Interface"; + /* invalid chat data */ "invalid chat" = "chat invalide"; @@ -1502,9 +1511,15 @@ /* call status */ "missed call" = "appel manqué"; +/* chat item action */ +"Moderate" = "Modéré"; + /* moderated chat item */ "moderated" = "modéré"; +/* No comment provided by engineer. */ +"moderated by %@" = "modéré par %@"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Plus d'améliorations à venir !"; @@ -1589,6 +1604,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Les notifications sont désactivées !"; +/* member role */ +"observer" = "observateur"; + /* enabled status group pref value */ "off" = "off"; @@ -1716,6 +1734,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Veuillez vérifier vos préférences ainsi que celles de votre contact."; +/* No comment provided by engineer. */ +"Please contact group admin." = "Veuillez contacter l'administrateur du groupe."; + /* No comment provided by engineer. */ "Please enter correct current passphrase." = "Veuillez entrer la phrase secrète actuelle correcte."; @@ -2037,6 +2058,9 @@ /* No comment provided by engineer. */ "Share one-time invitation link" = "Partager un lien d'invitation unique"; +/* No comment provided by engineer. */ +"Show calls in phone history" = "Afficher les appels dans l'historique du téléphone"; + /* No comment provided by engineer. */ "Show preview" = "Montrer l'aperçu"; @@ -2185,7 +2209,10 @@ "The group is fully decentralized – it is visible only to the members." = "Le groupe est entièrement décentralisé – il n'est visible que par ses membres."; /* No comment provided by engineer. */ -"The microphone does not work when the app is in the background." = "Le microphone ne fonctionne pas lorsque l'application est en arrière-plan."; +"The message will be deleted for all members." = "Le message sera supprimé pour tous les membres."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Le message sera marqué comme modéré pour tous les membres."; /* No comment provided by engineer. */ "The next generation of private messaging" = "La nouvelle génération de messagerie privée"; @@ -2235,9 +2262,6 @@ /* No comment provided by engineer. */ "To make a new connection" = "Pour établir une nouvelle connexion"; -/* No comment provided by engineer. */ -"To prevent the call interruption, enable Do Not Disturb mode." = "Pour éviter l'interruption des appels, activez le mode Ne pas déranger."; - /* No comment provided by engineer. */ "To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Pour protéger votre vie privée, au lieu d’IDs utilisés par toutes les autres plateformes, SimpleX a des IDs pour les queues de messages, distinctes pour chacun de vos contacts."; @@ -2286,12 +2310,18 @@ /* connection info */ "unknown" = "inconnu"; +/* callkit banner */ +"Unknown caller" = "Appel inconnu"; + /* No comment provided by engineer. */ "Unknown database error: %@" = "Erreur inconnue de la base de données : %@"; /* No comment provided by engineer. */ "Unknown error" = "Erreur inconnue"; +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "À moins que vous utilisiez l'interface d'appel d'iOS, activez le mode \"Ne pas déranger\" pour éviter les interruptions."; + /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A moins que votre contact ait supprimé la connexion ou que ce lien ait déjà été utilisé, il peut s'agir d'un bug - veuillez le signaler.\nPour vous connecter, veuillez demander à votre contact de créer un autre lien de connexion et vérifiez que vous disposez d'une connexion réseau stable."; @@ -2337,6 +2367,9 @@ /* No comment provided by engineer. */ "Use for new connections" = "Utiliser pour les nouvelles connexions"; +/* No comment provided by engineer. */ +"Use iOS call interface" = "Utiliser l'interface d'appel d'iOS"; + /* No comment provided by engineer. */ "Use server" = "Utiliser ce serveur"; @@ -2469,6 +2502,12 @@ /* No comment provided by engineer. */ "You are invited to group" = "Vous êtes invité·e au groupe"; +/* No comment provided by engineer. */ +"you are observer" = "vous êtes observateur"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Vous pouvez accepter des appels à partir de l'écran de verrouillage, sans authentification de l'appareil ou de l'application."; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Vous pouvez également vous connecter en cliquant sur le lien. S'il s'ouvre dans le navigateur, cliquez sur le bouton **Open in mobile app**."; @@ -2490,6 +2529,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Vous pouvez utiliser le format markdown pour mettre en forme les messages :"; +/* No comment provided by engineer. */ +"You can't send messages!" = "Vous ne pouvez pas envoyer de messages !"; + /* chat item text */ "you changed address" = "vous avez changé d'adresse"; @@ -2592,9 +2634,6 @@ /* No comment provided by engineer. */ "Your chat profiles" = "Vos profils de chat"; -/* No comment provided by engineer. */ -"Your chat profiles are stored locally, only on your device." = "Vos profils de chat sont stockés localement, uniquement sur votre appareil."; - /* No comment provided by engineer. */ "Your chats" = "Vos chats"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index c8806ab7a..bee480668 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -311,6 +311,9 @@ /* pref value */ "always" = "sempre"; +/* No comment provided by engineer. */ +"Always use relay" = "Connetti via relay"; + /* No comment provided by engineer. */ "Answer call" = "Rispondi alla chiamata"; @@ -341,6 +344,9 @@ /* No comment provided by engineer. */ "Authentication failed" = "Autenticazione fallita"; +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "L'autenticazione è necessaria prima che la chiamata sia connessa, ma potresti perdere le chiamate."; + /* No comment provided by engineer. */ "Authentication unavailable" = "Autenticazione non disponibile"; @@ -533,9 +539,6 @@ /* No comment provided by engineer. */ "Connect via one-time link?" = "Connettere via link una tantum?"; -/* No comment provided by engineer. */ -"Connect via relay" = "Connetti via relay"; - /* No comment provided by engineer. */ "connected" = "connesso"; @@ -788,6 +791,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Eliminare il link?"; +/* No comment provided by engineer. */ +"Delete member message?" = "Eliminare il messaggio del membro?"; + /* No comment provided by engineer. */ "Delete message?" = "Eliminare il messaggio?"; @@ -1067,6 +1073,9 @@ /* No comment provided by engineer. */ "Error switching profile!" = "Errore nel cambio di profilo!"; +/* No comment provided by engineer. */ +"Error updating group link" = "Errore nell'aggiornamento del link del gruppo"; + /* No comment provided by engineer. */ "Error updating message" = "Errore nell'aggiornamento del messaggio"; @@ -1220,9 +1229,6 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "Server ICE (uno per riga)"; -/* No comment provided by engineer. */ -"If the video fails to connect, flip the camera to resolve it." = "Se il video non riesce a connettersi, cambia la fotocamera (frontale/posteriore) per risolvere."; - /* No comment provided by engineer. */ "If you can't meet in person, **show QR code in the video call**, or share the link." = "Se non potete incontrarvi di persona, **mostra il codice QR durante la videochiamata** o condividi il link."; @@ -1301,6 +1307,9 @@ /* No comment provided by engineer. */ "Instantly" = "Istantaneamente"; +/* No comment provided by engineer. */ +"Interface" = "Interfaccia"; + /* invalid chat data */ "invalid chat" = "chat non valida"; @@ -1502,9 +1511,15 @@ /* call status */ "missed call" = "chiamata persa"; +/* chat item action */ +"Moderate" = "Modera"; + /* moderated chat item */ "moderated" = "moderato"; +/* No comment provided by engineer. */ +"moderated by %@" = "moderato da %@"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Altri miglioramenti sono in arrivo!"; @@ -1589,6 +1604,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Le notifiche sono disattivate!"; +/* member role */ +"observer" = "osservatore"; + /* enabled status group pref value */ "off" = "off"; @@ -1716,6 +1734,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Controlla le preferenze tue e del tuo contatto."; +/* No comment provided by engineer. */ +"Please contact group admin." = "Contatta l'amministratore del gruppo."; + /* No comment provided by engineer. */ "Please enter correct current passphrase." = "Inserisci la password attuale corretta."; @@ -2037,6 +2058,9 @@ /* No comment provided by engineer. */ "Share one-time invitation link" = "Condividi link di invito una tantum"; +/* No comment provided by engineer. */ +"Show calls in phone history" = "Mostra le chiamate nella cronologia del telefono"; + /* No comment provided by engineer. */ "Show preview" = "Mostra anteprima"; @@ -2185,7 +2209,10 @@ "The group is fully decentralized – it is visible only to the members." = "Il gruppo è completamente decentralizzato: è visibile solo ai membri."; /* No comment provided by engineer. */ -"The microphone does not work when the app is in the background." = "Il microfono non funziona quando l'app è in secondo piano."; +"The message will be deleted for all members." = "Il messaggio verrà eliminato per tutti i membri."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Il messaggio sarà segnato come moderato per tutti i membri."; /* No comment provided by engineer. */ "The next generation of private messaging" = "La nuova generazione di messaggistica privata"; @@ -2235,9 +2262,6 @@ /* No comment provided by engineer. */ "To make a new connection" = "Per creare una nuova connessione"; -/* No comment provided by engineer. */ -"To prevent the call interruption, enable Do Not Disturb mode." = "Per evitare l'interruzione della chiamata, attiva la modalità Non disturbare."; - /* No comment provided by engineer. */ "To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Per proteggere la privacy, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX ha identificatori per le code di messaggi, separati per ciascuno dei tuoi contatti."; @@ -2286,12 +2310,18 @@ /* connection info */ "unknown" = "sconosciuto"; +/* callkit banner */ +"Unknown caller" = "Chiamante sconosciuto"; + /* No comment provided by engineer. */ "Unknown database error: %@" = "Errore del database sconosciuto: %@"; /* No comment provided by engineer. */ "Unknown error" = "Errore sconosciuto"; +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "A meno che non utilizzi l'interfaccia di chiamata iOS, attiva la modalità Non disturbare per evitare interruzioni."; + /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A meno che il tuo contatto non abbia eliminato la connessione o che questo link non sia già stato usato, potrebbe essere un errore; per favore segnalalo.\nPer connetterti, chiedi al tuo contatto di creare un altro link di connessione e controlla di avere una connessione di rete stabile."; @@ -2337,6 +2367,9 @@ /* No comment provided by engineer. */ "Use for new connections" = "Usa per connessioni nuove"; +/* No comment provided by engineer. */ +"Use iOS call interface" = "Usa interfaccia di chiamata iOS"; + /* No comment provided by engineer. */ "Use server" = "Usa il server"; @@ -2469,6 +2502,12 @@ /* No comment provided by engineer. */ "You are invited to group" = "Sei stato/a invitato/a al gruppo"; +/* No comment provided by engineer. */ +"you are observer" = "sei un osservatore"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Puoi accettare chiamate dalla schermata di blocco, senza l'autenticazione del dispositivo e dell'app."; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Puoi anche connetterti cliccando il link. Se si apre nel browser, clicca il pulsante **Apri nell'app mobile**."; @@ -2490,6 +2529,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Puoi usare il markdown per formattare i messaggi:"; +/* No comment provided by engineer. */ +"You can't send messages!" = "Non puoi inviare messaggi!"; + /* chat item text */ "you changed address" = "hai cambiato indirizzo"; @@ -2592,9 +2634,6 @@ /* No comment provided by engineer. */ "Your chat profiles" = "I tuoi profili di chat"; -/* No comment provided by engineer. */ -"Your chat profiles are stored locally, only on your device." = "I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo."; - /* No comment provided by engineer. */ "Your chats" = "Le tue chat"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index 1112caf9d..b5d1b449d 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -258,13 +258,13 @@ "Advanced network settings" = "Geavanceerde netwerk instellingen"; /* No comment provided by engineer. */ -"All chats and messages will be deleted - this cannot be undone!" = "Alle chats en berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!"; +"All chats and messages will be deleted - this cannot be undone!" = "Alle chats en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!"; /* No comment provided by engineer. */ "All group members will remain connected." = "Alle groepsleden blijven verbonden."; /* No comment provided by engineer. */ -"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd."; +"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd."; /* No comment provided by engineer. */ "All your contacts will remain connected" = "Al uw contacten blijven verbonden"; @@ -311,6 +311,9 @@ /* pref value */ "always" = "altijd"; +/* No comment provided by engineer. */ +"Always use relay" = "Verbinden via relais"; + /* No comment provided by engineer. */ "Answer call" = "Beantwoord oproep"; @@ -324,7 +327,7 @@ "App version" = "App versie"; /* No comment provided by engineer. */ -"App version: v%@" = "App-versie: v%@"; +"App version: v%@" = "App versie: v%@"; /* No comment provided by engineer. */ "Appearance" = "Uiterlijk"; @@ -341,11 +344,14 @@ /* No comment provided by engineer. */ "Authentication failed" = "Verificatie mislukt"; +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "Verificatie is vereist voordat het gesprek wordt verbonden, maar u kunt gesprekken missen."; + /* No comment provided by engineer. */ "Authentication unavailable" = "Verificatie niet beschikbaar"; /* No comment provided by engineer. */ -"Auto-accept contact requests" = "Contactverzoeken automatisch accepteren"; +"Auto-accept contact requests" = "Contact verzoeken automatisch accepteren"; /* No comment provided by engineer. */ "Auto-accept images" = "Afbeeldingen automatisch accepteren"; @@ -357,10 +363,10 @@ "Back" = "Terug"; /* integrity error chat item */ -"bad message hash" = "Onjuiste bericht-hash"; +"bad message hash" = "Onjuiste bericht hash"; /* integrity error chat item */ -"bad message ID" = "Onjuiste bericht-ID"; +"bad message ID" = "Onjuiste bericht ID"; /* No comment provided by engineer. */ "bold" = "vetgedrukt"; @@ -459,7 +465,7 @@ "Chat database imported" = "Chat database geïmporteerd"; /* No comment provided by engineer. */ -"Chat is running" = "Chat is aktief"; +"Chat is running" = "Chat is actief"; /* No comment provided by engineer. */ "Chat is stopped" = "Chat is gestopt"; @@ -471,7 +477,7 @@ "Chats" = "Gesprekken"; /* No comment provided by engineer. */ -"Check server address and try again." = "Controleer het serveradres en probeer het opnieuw."; +"Check server address and try again." = "Controleer het server adres en probeer het opnieuw."; /* No comment provided by engineer. */ "Choose file" = "Kies bestand"; @@ -504,7 +510,7 @@ "complete" = "compleet"; /* No comment provided by engineer. */ -"Configure ICE servers" = "ICE-servers configureren"; +"Configure ICE servers" = "ICE servers configureren"; /* No comment provided by engineer. */ "Confirm" = "Bevestigen"; @@ -533,9 +539,6 @@ /* No comment provided by engineer. */ "Connect via one-time link?" = "Verbinden via een eenmalige link?"; -/* No comment provided by engineer. */ -"Connect via relay" = "Verbinden via relais"; - /* No comment provided by engineer. */ "connected" = "verbonden"; @@ -585,7 +588,7 @@ "Connection request sent!" = "Verbindingsverzoek verzonden!"; /* No comment provided by engineer. */ -"Connection timeout" = "Time-out verbinding"; +"Connection timeout" = "Timeout verbinding"; /* connection information */ "connection:%@" = "verbinding:%@"; @@ -597,13 +600,13 @@ "Contact already exists" = "Contact bestaat al"; /* No comment provided by engineer. */ -"Contact and all messages will be deleted - this cannot be undone!" = "Contact en alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!"; +"Contact and all messages will be deleted - this cannot be undone!" = "Contact en alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!"; /* No comment provided by engineer. */ "contact has e2e encryption" = "contact heeft e2e-codering"; /* No comment provided by engineer. */ -"contact has no e2e encryption" = "contact heeft geen e2e-encryptie"; +"contact has no e2e encryption" = "contact heeft geen e2e versleuteling"; /* notification */ "Contact hidden:" = "Contact verborgen:"; @@ -788,6 +791,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Link verwijderen?"; +/* No comment provided by engineer. */ +"Delete member message?" = "Bericht van lid verwijderen?"; + /* No comment provided by engineer. */ "Delete message?" = "Verwijder bericht?"; @@ -834,10 +840,10 @@ "Device" = "Apparaat"; /* No comment provided by engineer. */ -"Device authentication is disabled. Turning off SimpleX Lock." = "Apparaatverificatie is uitgeschakeld. SimpleX Lock uitschakelen."; +"Device authentication is disabled. Turning off SimpleX Lock." = "Apparaatverificatie is uitgeschakeld. SimpleX Vergrendelen uitschakelen."; /* No comment provided by engineer. */ -"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Lock inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld."; +"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld."; /* No comment provided by engineer. */ "Different names, avatars and transport isolation." = "Verschillende namen, avatars en transportisolatie."; @@ -852,7 +858,7 @@ "Direct messages between members are prohibited in this group." = "Directe berichten tussen leden zijn verboden in deze groep."; /* authentication reason */ -"Disable SimpleX Lock" = "SimpleX Lock uitschakelen"; +"Disable SimpleX Lock" = "SimpleX Vergrendelen uitschakelen"; /* chat feature */ "Disappearing messages" = "Verdwijnende berichten"; @@ -909,10 +915,10 @@ "Enable periodic notifications?" = "Periodieke meldingen inschakelen?"; /* authentication reason */ -"Enable SimpleX Lock" = "SimpleX Lock inschakelen"; +"Enable SimpleX Lock" = "SimpleX Vergrendelen inschakelen"; /* No comment provided by engineer. */ -"Enable TCP keep-alive" = "Schakel TCP-keep-alive in"; +"Enable TCP keep-alive" = "Schakel TCP keep-alive in"; /* enabled status */ "enabled" = "ingeschakeld"; @@ -1047,13 +1053,13 @@ "Error saving group profile" = "Fout bij opslaan van groep profiel"; /* No comment provided by engineer. */ -"Error saving ICE servers" = "Fout bij opslaan van ICE-servers"; +"Error saving ICE servers" = "Fout bij opslaan van ICE servers"; /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Fout bij opslaan van wachtwoord in de keychain"; /* No comment provided by engineer. */ -"Error saving SMP servers" = "Fout bij opslaan van SMP-servers"; +"Error saving SMP servers" = "Fout bij opslaan van SMP servers"; /* No comment provided by engineer. */ "Error sending message" = "Fout bij verzenden van bericht"; @@ -1067,6 +1073,9 @@ /* No comment provided by engineer. */ "Error switching profile!" = "Fout bij wisselen van profiel!"; +/* No comment provided by engineer. */ +"Error updating group link" = "Fout bij bijwerken van groep link"; + /* No comment provided by engineer. */ "Error updating message" = "Fout bij updaten van bericht"; @@ -1083,7 +1092,7 @@ "Error: URL is invalid" = "Fout: URL is ongeldig"; /* No comment provided by engineer. */ -"Exit without saving" = "Afsluiten zonder op te slaan"; +"Exit without saving" = "Afsluiten zonder opslaan"; /* No comment provided by engineer. */ "Export database" = "Database exporteren"; @@ -1185,10 +1194,10 @@ "group profile updated" = "groep profiel bijgewerkt"; /* No comment provided by engineer. */ -"Group will be deleted for all members - this cannot be undone!" = "Groep wordt verwijderd voor alle leden - dit kan niet ongedaan worden gemaakt!"; +"Group will be deleted for all members - this cannot be undone!" = "Groep wordt verwijderd voor alle leden, dit kan niet ongedaan worden gemaakt!"; /* No comment provided by engineer. */ -"Group will be deleted for you - this cannot be undone!" = "De groep wordt voor u verwijderd - dit kan niet ongedaan worden gemaakt!"; +"Group will be deleted for you - this cannot be undone!" = "De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt!"; /* No comment provided by engineer. */ "Help" = "Help"; @@ -1200,7 +1209,7 @@ "Hide" = "Verbergen"; /* No comment provided by engineer. */ -"Hide app screen in the recent apps." = "App-scherm verbergen in de recente apps."; +"Hide app screen in the recent apps." = "App scherm verbergen in de recente apps."; /* No comment provided by engineer. */ "How it works" = "Hoe het werkt"; @@ -1218,10 +1227,7 @@ "How to use your servers" = "Hoe u uw servers gebruikt"; /* No comment provided by engineer. */ -"ICE servers (one per line)" = "ICE-servers (één per lijn)"; - -/* No comment provided by engineer. */ -"If the video fails to connect, flip the camera to resolve it." = "Als de video geen verbinding kan maken, draait u de camera om om het probleem op te lossen."; +"ICE servers (one per line)" = "ICE servers (één per lijn)"; /* No comment provided by engineer. */ "If you can't meet in person, **show QR code in the video call**, or share the link." = "Als je elkaar niet persoonlijk kunt ontmoeten, **toon QR-code in het video gesprek** of deel de link."; @@ -1263,13 +1269,13 @@ "Incognito mode" = "Incognito modus"; /* No comment provided by engineer. */ -"Incognito mode is not supported here - your main profile will be sent to group members" = "Incognito modus wordt hier niet ondersteund - uw hoofdprofiel wordt naar groepsleden verzonden"; +"Incognito mode is not supported here - your main profile will be sent to group members" = "Incognito modus wordt hier niet ondersteund, uw hoofdprofiel wordt naar groepsleden verzonden"; /* No comment provided by engineer. */ -"Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." = "De incognito modus beschermt de privacy van uw hoofdprofielnaam en -afbeelding - voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt."; +"Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." = "De incognito modus beschermt de privacy van uw hoofdprofielnaam en afbeelding, voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt."; /* chat list item description */ -"incognito via contact address link" = "incognito via link naar contactadres"; +"incognito via contact address link" = "incognito via contact adres link"; /* chat list item description */ "incognito via group link" = "incognito via groep link"; @@ -1301,6 +1307,9 @@ /* No comment provided by engineer. */ "Instantly" = "Meteen"; +/* No comment provided by engineer. */ +"Interface" = "Interface"; + /* invalid chat data */ "invalid chat" = "ongeldige gesprek"; @@ -1314,7 +1323,7 @@ "invalid data" = "ongeldige gegevens"; /* No comment provided by engineer. */ -"Invalid server address!" = "Ongeldig serveradres!"; +"Invalid server address!" = "Ongeldig server adres!"; /* No comment provided by engineer. */ "Invitation expired!" = "Uitnodiging verlopen!"; @@ -1341,10 +1350,10 @@ "invited via your group link" = "uitgenodigd via je groep link"; /* No comment provided by engineer. */ -"iOS Keychain is used to securely store passphrase - it allows receiving push notifications." = "iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan - het maakt het ontvangen van push meldingen mogelijk."; +"iOS Keychain is used to securely store passphrase - it allows receiving push notifications." = "iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan, het maakt het ontvangen van push meldingen mogelijk."; /* No comment provided by engineer. */ -"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord hebt gewijzigd - hiermee kunt u push meldingen ontvangen."; +"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "iOS-keychain wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord hebt gewijzigd, hiermee kunt u push meldingen ontvangen."; /* No comment provided by engineer. */ "Irreversible message deletion" = "Onomkeerbare berichtverwijdering"; @@ -1428,13 +1437,13 @@ "Make a private connection" = "Maak een privéverbinding"; /* No comment provided by engineer. */ -"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Zorg ervoor dat SMP-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn (%@)."; +"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@)."; /* No comment provided by engineer. */ -"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Zorg ervoor dat WebRTC ICE-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn."; +"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Zorg ervoor dat WebRTC ICE server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn."; /* No comment provided by engineer. */ -"Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" = "Veel mensen vroegen: *als SimpleX geen gebruikers-ID's heeft, hoe kan het dan berichten bezorgen?*"; +"Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" = "Veel mensen vroegen: *als SimpleX geen gebruikers ID's heeft, hoe kan het dan berichten bezorgen?*"; /* No comment provided by engineer. */ "Mark deleted for everyone" = "Markeer verwijderd voor iedereen"; @@ -1470,7 +1479,7 @@ "Member role will be changed to \"%@\". The member will receive a new invitation." = "De rol van gebruiker wordt gewijzigd in \"%@\". Het lid ontvangt een nieuwe uitnodiging."; /* No comment provided by engineer. */ -"Member will be removed from group - this cannot be undone!" = "Gebruiker wordt uit de groep verwijderd - dit kan niet ongedaan worden gemaakt!"; +"Member will be removed from group - this cannot be undone!" = "Gebruiker wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt!"; /* No comment provided by engineer. */ "Message delivery error" = "Fout bij bezorging van bericht"; @@ -1502,9 +1511,15 @@ /* call status */ "missed call" = "gemiste oproep"; +/* chat item action */ +"Moderate" = "Modereren"; + /* moderated chat item */ "moderated" = "gemodereerd"; +/* No comment provided by engineer. */ +"moderated by %@" = "gemodereerd door %@"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Meer verbeteringen volgen snel!"; @@ -1545,7 +1560,7 @@ "New in %@" = "Nieuw in %@"; /* No comment provided by engineer. */ -"New member role" = "Nieuwe ledenrol"; +"New member role" = "Nieuwe leden rol"; /* notification */ "new message" = "nieuw bericht"; @@ -1572,7 +1587,7 @@ "No device token!" = "Geen apparaattoken!"; /* No comment provided by engineer. */ -"no e2e encryption" = "geen e2e-encryptie"; +"no e2e encryption" = "geen e2e versleuteling"; /* No comment provided by engineer. */ "No group!" = "Groep niet gevonden!"; @@ -1589,6 +1604,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Meldingen zijn uitgeschakeld!"; +/* member role */ +"observer" = "waarnemer"; + /* enabled status group pref value */ "off" = "uit"; @@ -1597,10 +1615,10 @@ "Off (Local)" = "Uit (lokaal)"; /* feature offered item */ -"offered %@" = "aangeboden %@"; +"offered %@" = "voorgesteld %@"; /* feature offered item */ -"offered %@: %@" = "aangeboden %1$@: %2$@"; +"offered %@: %@" = "voorgesteld %1$@: %2$@"; /* No comment provided by engineer. */ "Ok" = "OK"; @@ -1627,7 +1645,7 @@ "Onion hosts will not be used." = "Onion hosts worden niet gebruikt."; /* No comment provided by engineer. */ -"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Alleen client-apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**."; +"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Alleen client apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**."; /* No comment provided by engineer. */ "Only group owners can change group preferences." = "Alleen groep eigenaren kunnen groep voorkeuren wijzigen."; @@ -1666,7 +1684,7 @@ "Open user profiles" = "Gebruikersprofielen openen"; /* No comment provided by engineer. */ -"Open-source protocol and code – anybody can run the servers." = "Open-source protocol en code – iedereen kan de servers draaien."; +"Open-source protocol and code – anybody can run the servers." = "Open-source protocol en code. Iedereen kan de servers draaien."; /* No comment provided by engineer. */ "Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven."; @@ -1699,10 +1717,10 @@ "Periodically" = "Periodiek"; /* No comment provided by engineer. */ -"PING count" = "PING-telling"; +"PING count" = "PING telling"; /* No comment provided by engineer. */ -"PING interval" = "PING-interval"; +"PING interval" = "PING interval"; /* No comment provided by engineer. */ "Please ask your contact to enable sending voice messages." = "Vraag uw contactpersoon om het verzenden van spraak berichten in te schakelen."; @@ -1716,6 +1734,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Controleer de uwe en uw contact voorkeuren."; +/* No comment provided by engineer. */ +"Please contact group admin." = "Neem contact op met de groep beheerder."; + /* No comment provided by engineer. */ "Please enter correct current passphrase." = "Voer het juiste huidige wachtwoord in."; @@ -1732,7 +1753,7 @@ "Please store passphrase securely, you will NOT be able to change it if you lose it." = "Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u het kwijtraakt."; /* server test error */ -"Possibly, certificate fingerprint in server address is incorrect" = "Mogelijk is de certificaatvingerafdruk in het serveradres onjuist"; +"Possibly, certificate fingerprint in server address is incorrect" = "Mogelijk is de certificaat vingerafdruk in het server adres onjuist"; /* No comment provided by engineer. */ "Preserve the last message draft, with attachments." = "Bewaar het laatste berichtconcept, met bijlagen."; @@ -1741,7 +1762,7 @@ "Preset server" = "Vooraf ingestelde server"; /* No comment provided by engineer. */ -"Preset server address" = "Vooraf ingesteld serveradres"; +"Preset server address" = "Vooraf ingesteld server adres"; /* No comment provided by engineer. */ "Privacy & security" = "Privacy en beveiliging"; @@ -1774,10 +1795,10 @@ "Protect app screen" = "App scherm verbergen"; /* No comment provided by engineer. */ -"Protocol timeout" = "Protocol time-out"; +"Protocol timeout" = "Protocol timeout"; /* No comment provided by engineer. */ -"Push notifications" = "Push-meldingen"; +"Push notifications" = "Push meldingen"; /* No comment provided by engineer. */ "Rate the app" = "Beoordeel de app"; @@ -1789,7 +1810,7 @@ "Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Lees meer in onze [GitHub-repository](https://github.com/simplex-chat/simplex-chat#readme)."; /* No comment provided by engineer. */ -"Read more in our GitHub repository." = "Lees meer in onze GitHub-repository."; +"Read more in our GitHub repository." = "Lees meer in onze GitHub repository."; /* No comment provided by engineer. */ "received answer…" = "antwoord gekregen…"; @@ -1822,10 +1843,10 @@ "rejected call" = "geweigerde oproep"; /* No comment provided by engineer. */ -"Relay server is only used if necessary. Another party can observe your IP address." = "Relay-server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien."; +"Relay server is only used if necessary. Another party can observe your IP address." = "Relay server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien."; /* No comment provided by engineer. */ -"Relay server protects your IP address, but it can observe the duration of the call." = "Relay-server beschermt uw IP-adres, maar kan de duur van het gesprek observeren."; +"Relay server protects your IP address, but it can observe the duration of the call." = "Relay server beschermt uw IP-adres, maar kan de duur van het gesprek observeren."; /* No comment provided by engineer. */ "Remove" = "Verwijderen"; @@ -1924,7 +1945,7 @@ "Save servers" = "Bewaar servers"; /* No comment provided by engineer. */ -"Saved WebRTC ICE servers will be removed" = "Opgeslagen WebRTC ICE-servers worden verwijderd"; +"Saved WebRTC ICE servers will be removed" = "Opgeslagen WebRTC ICE servers worden verwijderd"; /* No comment provided by engineer. */ "Scan code" = "Code scannen"; @@ -1960,7 +1981,7 @@ "Send" = "Verstuur"; /* No comment provided by engineer. */ -"Send a live message - it will update for the recipient(s) as you type it" = "Stuur een live bericht - het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt"; +"Send a live message - it will update for the recipient(s) as you type it" = "Stuur een live bericht, het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt"; /* No comment provided by engineer. */ "Send direct message" = "Direct bericht sturen"; @@ -2020,7 +2041,7 @@ "Set passphrase to export" = "Wachtwoord instellen om te exporteren"; /* No comment provided by engineer. */ -"Set timeouts for proxy/VPN" = "Stel time-outs in voor proxy/VPN"; +"Set timeouts for proxy/VPN" = "Stel timeouts in voor proxy/VPN"; /* No comment provided by engineer. */ "Settings" = "Instellingen"; @@ -2037,6 +2058,9 @@ /* No comment provided by engineer. */ "Share one-time invitation link" = "Eenmalige uitnodiging link delen"; +/* No comment provided by engineer. */ +"Show calls in phone history" = "Toon oproepen in de telefoongeschiedenis"; + /* No comment provided by engineer. */ "Show preview" = "Toon voorbeeld"; @@ -2047,7 +2071,7 @@ "SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)." = "De beveiliging van SimpleX Chat is [gecontroleerd door Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)."; /* simplex link type */ -"SimpleX contact address" = "SimpleX-contactadres"; +"SimpleX contact address" = "SimpleX contact adres"; /* notification */ "SimpleX encrypted message or connection event" = "SimpleX versleuteld bericht of verbindingsgebeurtenis"; @@ -2059,10 +2083,10 @@ "SimpleX links" = "SimpleX links"; /* No comment provided by engineer. */ -"SimpleX Lock" = "SimpleX Lock"; +"SimpleX Lock" = "SimpleX Vergrendelen"; /* No comment provided by engineer. */ -"SimpleX Lock turned on" = "SimpleX Lock ingeschakeld"; +"SimpleX Lock turned on" = "SimpleX Vergrendelen ingeschakeld"; /* simplex link type */ "SimpleX one-time invitation" = "Eenmalige SimpleX uitnodiging"; @@ -2131,7 +2155,7 @@ "Tap to start a new chat" = "Tik om een nieuw gesprek te starten"; /* No comment provided by engineer. */ -"TCP connection timeout" = "Time-out van TCP-verbinding"; +"TCP connection timeout" = "Timeout van TCP-verbinding"; /* No comment provided by engineer. */ "TCP_KEEPCNT" = "TCP_KEEPCNT"; @@ -2164,10 +2188,10 @@ "Thanks to the users – contribute via Weblate!" = "Dank aan de gebruikers – draag bij via Weblate!"; /* No comment provided by engineer. */ -"The 1st platform without any user identifiers – private by design." = "Het eerste platform zonder gebruikers-ID's - privé door ontwerp."; +"The 1st platform without any user identifiers – private by design." = "Het eerste platform zonder gebruikers ID's, privé door ontwerp."; /* No comment provided by engineer. */ -"The app can notify you when you receive messages or contact requests - please open settings to enable." = "De app kan u op de hoogte stellen wanneer u berichten of contactverzoeken ontvangt - open de instellingen om dit in te schakelen."; +"The app can notify you when you receive messages or contact requests - please open settings to enable." = "De app kan u op de hoogte stellen wanneer u berichten of contact verzoeken ontvangt - open de instellingen om dit in te schakelen."; /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "De poging om het wachtwoord van de database te wijzigen is niet voltooid."; @@ -2185,7 +2209,10 @@ "The group is fully decentralized – it is visible only to the members." = "De groep is volledig gedecentraliseerd – het is alleen zichtbaar voor de leden."; /* No comment provided by engineer. */ -"The microphone does not work when the app is in the background." = "De microfoon werkt niet als de app op de achtergrond staat."; +"The message will be deleted for all members." = "Het bericht wordt verwijderd voor alle leden."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Het bericht wordt gemarkeerd als gemodereerd voor alle leden."; /* No comment provided by engineer. */ "The next generation of private messaging" = "De volgende generatie privéberichten"; @@ -2206,13 +2233,13 @@ "Theme" = "Thema"; /* No comment provided by engineer. */ -"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Deze actie kan niet ongedaan worden gemaakt - alle ontvangen en verzonden bestanden en media worden verwijderd. Foto's met een lage resolutie blijven behouden."; +"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto's met een lage resolutie blijven behouden."; /* No comment provided by engineer. */ -"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Deze actie kan niet ongedaan worden gemaakt - de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren."; +"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren."; /* No comment provided by engineer. */ -"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Deze actie kan niet ongedaan worden gemaakt - uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren."; +"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren."; /* notification title */ "this contact" = "dit contact"; @@ -2236,16 +2263,13 @@ "To make a new connection" = "Om een nieuwe verbinding te maken"; /* No comment provided by engineer. */ -"To prevent the call interruption, enable Do Not Disturb mode." = "Schakel de modus Niet storen in om te voorkomen dat het gesprek wordt onderbroken."; - -/* No comment provided by engineer. */ -"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers-ID's die door alle andere platforms worden gebruikt, ID's voor berichtenwachtrijen, afzonderlijk voor elk van uw contacten."; +"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers ID's die door alle andere platforms worden gebruikt, ID's voor berichten wachtrijen, afzonderlijk voor elk van uw contacten."; /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Om de tijdzone te beschermen, gebruiken afbeeldings-/spraakbestanden UTC."; /* No comment provided by engineer. */ -"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Schakel SimpleX Lock in om uw informatie te beschermen.\nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld."; +"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Schakel SimpleX Vergrendelen om uw informatie te beschermen.\nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld."; /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Geef toestemming om de microfoon te gebruiken om een spraakbericht op te nemen."; @@ -2286,6 +2310,9 @@ /* connection info */ "unknown" = "onbekend"; +/* callkit banner */ +"Unknown caller" = "Onbekende beller"; + /* No comment provided by engineer. */ "Unknown database error: %@" = "Onbekende database fout: %@"; @@ -2293,7 +2320,10 @@ "Unknown error" = "Onbekende fout"; /* No comment provided by engineer. */ -"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn - meld het alstublieft.\nOm verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft."; +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Schakel de modus Niet storen in om onderbrekingen te voorkomen, tenzij u de iOS-oproepinterface gebruikt."; + +/* No comment provided by engineer. */ +"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.\nOm verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft."; /* authentication reason */ "Unlock" = "Ontgrendelen"; @@ -2337,11 +2367,14 @@ /* No comment provided by engineer. */ "Use for new connections" = "Gebruik voor nieuwe verbindingen"; +/* No comment provided by engineer. */ +"Use iOS call interface" = "De iOS-oproepinterface gebruiken"; + /* No comment provided by engineer. */ "Use server" = "Gebruik server"; /* No comment provided by engineer. */ -"Use SimpleX Chat servers?" = "SimpleX Chat-servers gebruiken?"; +"Use SimpleX Chat servers?" = "SimpleX Chat servers gebruiken?"; /* No comment provided by engineer. */ "User profile" = "Gebruikersprofiel"; @@ -2350,7 +2383,7 @@ "Using .onion hosts requires compatible VPN provider." = "Het gebruik van .onion-hosts vereist een compatibele VPN-provider."; /* No comment provided by engineer. */ -"Using SimpleX Chat servers." = "SimpleX Chat-servers gebruiken."; +"Using SimpleX Chat servers." = "SimpleX Chat servers gebruiken."; /* No comment provided by engineer. */ "v%@ (%@)" = "v%@ (%@)"; @@ -2365,7 +2398,7 @@ "Via browser" = "Via browser"; /* chat list item description */ -"via contact address link" = "via contactadres link"; +"via contact address link" = "via contact adres link"; /* chat list item description */ "via group link" = "via groep link"; @@ -2416,7 +2449,7 @@ "wants to connect to you!" = "wil met je in contact komen!"; /* No comment provided by engineer. */ -"WebRTC ICE servers" = "WebRTC ICE-servers"; +"WebRTC ICE servers" = "WebRTC ICE servers"; /* No comment provided by engineer. */ "Welcome %@!" = "Welkom %@!"; @@ -2469,6 +2502,12 @@ /* No comment provided by engineer. */ "You are invited to group" = "Je bent uitgenodigd voor de groep"; +/* No comment provided by engineer. */ +"you are observer" = "jij bent waarnemer"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "U kunt oproepen van het vergrendelingsscherm accepteren, zonder apparaat- en app-verificatie."; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "U kunt ook verbinding maken door op de link te klikken. Als het in de browser wordt geopend, klikt u op de knop **Openen in mobiele app**."; @@ -2476,13 +2515,13 @@ "You can now send messages to %@" = "Je kunt nu berichten sturen naar %@"; /* No comment provided by engineer. */ -"You can set lock screen notification preview via settings." = "U kunt een voorbeeld van een melding op het vergrendelscherm instellen via instellingen."; +"You can set lock screen notification preview via settings." = "U kunt een voorbeeld van een melding op het vergrendeld scherm instellen via instellingen."; /* No comment provided by engineer. */ -"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." = "U kunt een link of een QR-code delen - iedereen kan lid worden van de groep. U verliest geen leden van de groep als u deze later verwijdert."; +"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." = "U kunt een link of een QR-code delen. Iedereen kan lid worden van de groep. U verliest geen leden van de groep als u deze later verwijdert."; /* No comment provided by engineer. */ -"You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it." = "U kunt uw adres delen als een link of als een QR-code - iedereen kan verbinding met u maken. U verliest uw contacten niet als u deze later verwijdert."; +"You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it." = "U kunt uw adres delen als een link of als een QR-code. Iedereen kan verbinding met u maken. U verliest uw contacten niet als u deze later verwijdert."; /* No comment provided by engineer. */ "You can start chat via app Settings / Database or by restarting the app" = "U kunt de chat starten via app Instellingen / Database of door de app opnieuw op te starten"; @@ -2490,6 +2529,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "U kunt markdown gebruiken voor opmaak in berichten:"; +/* No comment provided by engineer. */ +"You can't send messages!" = "Je kunt geen berichten versturen!"; + /* chat item text */ "you changed address" = "je bent van adres veranderd"; @@ -2503,7 +2545,7 @@ "you changed role of %@ to %@" = "je veranderde de rol van %1$@ in %2$@"; /* No comment provided by engineer. */ -"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "U bepaalt via welke server(s) de berichten **ontvangen**, uw contacten - de servers die u gebruikt om ze berichten te sturen."; +"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "U bepaalt via welke server(s) de berichten **ontvangen**, uw contacten de servers die u gebruikt om ze berichten te sturen."; /* No comment provided by engineer. */ "You could not be verified; please try again." = "U kon niet worden geverifieerd; probeer het opnieuw."; @@ -2512,7 +2554,7 @@ "You have no chats" = "Je hebt geen gesprekken"; /* No comment provided by engineer. */ -"You have to enter passphrase every time the app starts - it is not stored on the device." = "U moet elke keer dat de app start het wachtwoord invoeren - deze wordt niet op het apparaat opgeslagen."; +"You have to enter passphrase every time the app starts - it is not stored on the device." = "U moet elke keer dat de app start het wachtwoord invoeren, deze wordt niet op het apparaat opgeslagen."; /* No comment provided by engineer. */ "You invited your contact" = "Je hebt je contactpersoon uitgenodigd"; @@ -2581,7 +2623,7 @@ "Your chat database" = "Uw chat database"; /* No comment provided by engineer. */ -"Your chat database is not encrypted - set passphrase to encrypt it." = "Uw chat database is niet versleuteld - stel een wachtwoord in om deze te versleutelen."; +"Your chat database is not encrypted - set passphrase to encrypt it." = "Uw chat database is niet versleuteld, stel een wachtwoord in om deze te versleutelen."; /* No comment provided by engineer. */ "Your chat profile will be sent to group members" = "Uw chat profiel wordt verzonden naar de groepsleden"; @@ -2590,16 +2632,13 @@ "Your chat profile will be sent to your contact" = "Uw chat profiel wordt naar uw contactpersoon verzonden"; /* No comment provided by engineer. */ -"Your chat profiles" = "Je chat profielen"; +"Your chat profiles" = "Uw chat profielen"; /* No comment provided by engineer. */ -"Your chat profiles are stored locally, only on your device." = "Uw chat profielen worden lokaal opgeslagen, alleen op uw apparaat."; +"Your chats" = "Jouw gesprekken"; /* No comment provided by engineer. */ -"Your chats" = "Je gesprekken"; - -/* No comment provided by engineer. */ -"Your contact address" = "Uw contactadres"; +"Your contact address" = "Uw contact adres"; /* No comment provided by engineer. */ "Your contact can scan it from the app." = "Uw contactpersoon kan het vanuit de app scannen."; @@ -2620,7 +2659,7 @@ "Your current profile" = "Je huidige profiel"; /* No comment provided by engineer. */ -"Your ICE servers" = "Uw ICE-servers"; +"Your ICE servers" = "Uw ICE servers"; /* No comment provided by engineer. */ "Your preferences" = "Jouw voorkeuren"; @@ -2629,7 +2668,7 @@ "Your privacy" = "Uw privacy"; /* No comment provided by engineer. */ -"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten.\nSimpleX-servers kunnen uw profiel niet zien."; +"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten.\nSimpleX servers kunnen uw profiel niet zien."; /* No comment provided by engineer. */ "Your profile will be sent to the contact that you received this link from" = "Je profiel wordt verzonden naar het contact van wie je deze link hebt ontvangen"; @@ -2644,14 +2683,14 @@ "Your server" = "Uw server"; /* No comment provided by engineer. */ -"Your server address" = "Uw serveradres"; +"Your server address" = "Uw server adres"; /* No comment provided by engineer. */ "Your settings" = "Uw instellingen"; /* No comment provided by engineer. */ -"Your SimpleX contact address" = "Uw SimpleX-contactadres"; +"Your SimpleX contact address" = "Uw SimpleX contact adres"; /* No comment provided by engineer. */ -"Your SMP servers" = "Uw SMP-servers"; +"Your SMP servers" = "Uw SMP servers"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 193d6c9bf..0b4c3851b 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -311,6 +311,9 @@ /* pref value */ "always" = "всегда"; +/* No comment provided by engineer. */ +"Always use relay" = "Всегда соединяться через relay"; + /* No comment provided by engineer. */ "Answer call" = "Принять звонок"; @@ -533,9 +536,6 @@ /* No comment provided by engineer. */ "Connect via one-time link?" = "Соединиться через одноразовую ссылку?"; -/* No comment provided by engineer. */ -"Connect via relay" = "Соединяться через сервер (relay)"; - /* No comment provided by engineer. */ "connected" = "соединение установлено"; @@ -788,6 +788,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Удалить ссылку?"; +/* No comment provided by engineer. */ +"Delete member message?" = "Удалить сообщение участника?"; + /* No comment provided by engineer. */ "Delete message?" = "Удалить сообщение?"; @@ -1067,6 +1070,9 @@ /* No comment provided by engineer. */ "Error switching profile!" = "Ошибка выбора профиля!"; +/* No comment provided by engineer. */ +"Error updating group link" = "Ошибка обновления ссылки группы"; + /* No comment provided by engineer. */ "Error updating message" = "Ошибка при обновлении сообщения"; @@ -1220,9 +1226,6 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "ICE серверы (один на строке)"; -/* No comment provided by engineer. */ -"If the video fails to connect, flip the camera to resolve it." = "Если видео не соединилось, переключите камеру."; - /* No comment provided by engineer. */ "If you can't meet in person, **show QR code in the video call**, or share the link." = "Если вы не можете встретиться лично, вы можете **показать QR код во время видеозвонка**, или поделиться ссылкой."; @@ -1502,6 +1505,15 @@ /* call status */ "missed call" = "пропущенный звонок"; +/* chat item action */ +"Moderate" = "Модерировать"; + +/* moderated chat item */ +"moderated" = "удалено"; + +/* No comment provided by engineer. */ +"moderated by %@" = "удалено %@"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Дополнительные улучшения скоро!"; @@ -1586,6 +1598,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Уведомления выключены"; +/* member role */ +"observer" = "читатель"; + /* enabled status group pref value */ "off" = "нет"; @@ -1659,6 +1674,9 @@ /* No comment provided by engineer. */ "Open Settings" = "Открыть Настройки"; +/* authentication reason */ +"Open user profiles" = "Открыть профили пользователя"; + /* No comment provided by engineer. */ "Open-source protocol and code – anybody can run the servers." = "Открытый протокол и код - кто угодно может запустить сервер."; @@ -1710,6 +1728,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Проверьте предпочтения вашего контакта."; +/* No comment provided by engineer. */ +"Please contact group admin." = "Пожалуйста, свяжитесь с админом группы."; + /* No comment provided by engineer. */ "Please enter correct current passphrase." = "Пожалуйста, введите правильный пароль."; @@ -2179,7 +2200,10 @@ "The group is fully decentralized – it is visible only to the members." = "Группа полностью децентрализована — она видна только членам."; /* No comment provided by engineer. */ -"The microphone does not work when the app is in the background." = "Микрофон не работает, когда приложение в фоновом режиме."; +"The message will be deleted for all members." = "Сообщение будет удалено для всех членов группы."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Сообщение будет помечено как удаленное для всех членов группы."; /* No comment provided by engineer. */ "The next generation of private messaging" = "Новое поколение приватных сообщений"; @@ -2229,9 +2253,6 @@ /* No comment provided by engineer. */ "To make a new connection" = "Чтобы соединиться"; -/* No comment provided by engineer. */ -"To prevent the call interruption, enable Do Not Disturb mode." = "Чтобы избежать прерывания звонков, включите режим Не Беспокоить."; - /* No comment provided by engineer. */ "To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Чтобы защитить вашу конфиденциальность, вместо ID пользователей, которые есть в других платформах, SimpleX использует ID для очередей сообщений, разные для каждого контакта."; @@ -2463,6 +2484,9 @@ /* No comment provided by engineer. */ "You are invited to group" = "Вы приглашены в группу"; +/* No comment provided by engineer. */ +"you are observer" = "только чтение сообщений"; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Вы также можете соединиться, открыв ссылку. Если ссылка откроется в браузере, нажмите кнопку **Open in mobile app**."; @@ -2484,6 +2508,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Вы можете форматировать сообщения:"; +/* No comment provided by engineer. */ +"You can't send messages!" = "Вы не можете отправлять сообщения!"; + /* chat item text */ "you changed address" = "вы поменяли адрес"; @@ -2586,9 +2613,6 @@ /* No comment provided by engineer. */ "Your chat profiles" = "Ваши профили чата"; -/* No comment provided by engineer. */ -"Your chat profiles are stored locally, only on your device." = "Ваши профили чата хранятся локально, только на вашем устройстве."; - /* No comment provided by engineer. */ "Your chats" = "Ваши чаты"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings new file mode 100644 index 000000000..b7aac8972 --- /dev/null +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,2696 @@ +/* No comment provided by engineer. */ +"\n" = "\n"; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" (" = " ("; + +/* No comment provided by engineer. */ +" (can be copied)" = " (可复制)"; + +/* No comment provided by engineer. */ +"_italic_" = "\\_斜体_"; + +/* No comment provided by engineer. */ +", " = ", "; + +/* No comment provided by engineer. */ +": " = ": "; + +/* No comment provided by engineer. */ +"!1 colored!" = "!1 色!"; + +/* No comment provided by engineer. */ +"." = "."; + +/* No comment provided by engineer. */ +"(" = "("; + +/* No comment provided by engineer. */ +")" = ")"; + +/* No comment provided by engineer. */ +"[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" = "[贡献](https://github.com/simplex-chat/simplex-chat#contribute)"; + +/* No comment provided by engineer. */ +"[Send us email](mailto:chat@simplex.chat)" = "[发送邮件至](mailto:chat@simplex.chat)"; + +/* No comment provided by engineer. */ +"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[在 GitHub 上加星](https://github.com/simplex-chat/simplex-chat)"; + +/* No comment provided by engineer. */ +"**Add new contact**: to create your one-time QR Code for your contact." = "**添加新联系人**:为您的联系人创建一次性二维码或者链接。"; + +/* No comment provided by engineer. */ +"**Create link / QR code** for your contact to use." = "**创建链接 / 二维码** 给您的联系人使用。"; + +/* No comment provided by engineer. */ +"**e2e encrypted** audio call" = "**端到端加密** 语音通话"; + +/* No comment provided by engineer. */ +"**e2e encrypted** video call" = "**端到端加密** 视频通话"; + +/* No comment provided by engineer. */ +"**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**更私密**:每20分钟检查新消息。设备令牌和 SimpleX Chat 服务器共享,但是不会共享有您有多少联系人或者消息。"; + +/* No comment provided by engineer. */ +"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**最私密**:不使用 SimpleX Chat 通知服务器,在后台定期检查消息(取决于您多经常使用应用程序)。"; + +/* No comment provided by engineer. */ +"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**粘贴收到的链接**或者在浏览器里打开并且点击**在移动应用程序里打开**。"; + +/* No comment provided by engineer. */ +"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**请注意**:如果您丢失密码,您将无法恢复或者更改密码。"; + +/* No comment provided by engineer. */ +"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**推荐**:设备令牌和通知会发送至 SimpleX Chat 通知服务器,但是消息内容、大小或者发送人不会。"; + +/* No comment provided by engineer. */ +"**Scan QR code**: to connect to your contact in person or via video call." = "**扫描二维码**:见面或者通过视频通话来连接您的联系人。"; + +/* No comment provided by engineer. */ +"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**警告**:及时推送通知需要保存在钥匙串的密码。"; + +/* No comment provided by engineer. */ +"*bold*" = "\\*加粗*"; + +/* No comment provided by engineer. */ +"#secret#" = "#秘密#"; + +/* No comment provided by engineer. */ +"%@" = "%@"; + +/* No comment provided by engineer. */ +"%@ / %@" = "%@ / %@"; + +/* No comment provided by engineer. */ +"%@ %@" = "%@ %@"; + +/* notification title */ +"%@ is connected!" = "%@ 已连接!"; + +/* No comment provided by engineer. */ +"%@ is not verified" = "%@ 未认证"; + +/* No comment provided by engineer. */ +"%@ is verified" = "%@ 已认证"; + +/* notification title */ +"%@ wants to connect!" = "%@ 要连接!"; + +/* message ttl */ +"%d days" = "%d 天"; + +/* message ttl */ +"%d hours" = "%d 小时"; + +/* message ttl */ +"%d min" = "%d 分钟"; + +/* message ttl */ +"%d months" = "%d 月"; + +/* message ttl */ +"%d sec" = "%d 秒"; + +/* integrity error chat item */ +"%d skipped message(s)" = "%d 跳过消息"; + +/* No comment provided by engineer. */ +"%lld" = "%lld"; + +/* No comment provided by engineer. */ +"%lld %@" = "%lld %@"; + +/* No comment provided by engineer. */ +"%lld contact(s) selected" = "%lld 联系人已选择"; + +/* No comment provided by engineer. */ +"%lld file(s) with total size of %@" = "%lld 总文件大小 %@"; + +/* No comment provided by engineer. */ +"%lld members" = "%lld 成员"; + +/* No comment provided by engineer. */ +"%lld second(s)" = "%lld 秒"; + +/* No comment provided by engineer. */ +"%lldd" = "%lldd"; + +/* No comment provided by engineer. */ +"%lldh" = "%lldh"; + +/* No comment provided by engineer. */ +"%lldk" = "%lldk"; + +/* No comment provided by engineer. */ +"%lldm" = "%lldm"; + +/* No comment provided by engineer. */ +"%lldmth" = "%lldmth"; + +/* No comment provided by engineer. */ +"%llds" = "%llds"; + +/* No comment provided by engineer. */ +"%lldw" = "%lldw"; + +/* No comment provided by engineer. */ +"`a + b`" = "\\`a + b`"; + +/* No comment provided by engineer. */ +"~strike~" = "\\~删去~"; + +/* message ttl */ +"1 day" = "1天"; + +/* message ttl */ +"1 hour" = "1时"; + +/* message ttl */ +"1 month" = "1月"; + +/* message ttl */ +"1 week" = "1周"; + +/* message ttl */ +"2 weeks" = "2周"; + +/* No comment provided by engineer. */ +"6" = "6"; + +/* notification title */ +"A new contact" = "新联系人"; + +/* No comment provided by engineer. */ +"A random profile will be sent to the contact that you received this link from" = "一个随机资料将被发送到收到您链接的联系人那里"; + +/* No comment provided by engineer. */ +"A random profile will be sent to your contact" = "一个随机资料将发送给您的联系人"; + +/* No comment provided by engineer. */ +"A separate TCP connection will be used **for each chat profile you have in the app**." = "一个单独的 TCP 连接将被用于**您在应用程序中的每个聊天资料**。"; + +/* No comment provided by engineer. */ +"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "每个联系人和群成员将使用一个独立的 TCP 连接。\n请注意:如果您有许多连接,将会消耗更多的电量和流量,并且某些连接可能会失败。"; + +/* No comment provided by engineer. */ +"About SimpleX" = "关于SimpleX"; + +/* No comment provided by engineer. */ +"About SimpleX Chat" = "关于SimpleX Chat"; + +/* No comment provided by engineer. */ +"above, then choose:" = "上面,然后选择:"; + +/* No comment provided by engineer. */ +"Accent color" = "色调"; + +/* accept contact request via notification + accept incoming call via notification */ +"Accept" = "接受"; + +/* No comment provided by engineer. */ +"Accept contact" = "接受联系人"; + +/* notification body */ +"Accept contact request from %@?" = "接受来自 %@ 的联系人请求?"; + +/* No comment provided by engineer. */ +"Accept incognito" = "接受隐身聊天"; + +/* No comment provided by engineer. */ +"Accept requests" = "接受请求"; + +/* call status */ +"accepted call" = "已接受通话"; + +/* No comment provided by engineer. */ +"Add preset servers" = "添加预设服务器"; + +/* No comment provided by engineer. */ +"Add profile" = "添加个人资料"; + +/* No comment provided by engineer. */ +"Add server…" = "添加服务器…"; + +/* No comment provided by engineer. */ +"Add servers by scanning QR codes." = "扫描二维码来添加服务器。"; + +/* No comment provided by engineer. */ +"Add to another device" = "添加另一设备"; + +/* member role */ +"admin" = "管理员"; + +/* No comment provided by engineer. */ +"Admins can create the links to join groups." = "管理员可以创建链接以加入群组。"; + +/* No comment provided by engineer. */ +"Advanced network settings" = "高级网络设置"; + +/* No comment provided by engineer. */ +"All chats and messages will be deleted - this cannot be undone!" = "所有聊天记录和消息将被删除——这一行为无法撤销!"; + +/* No comment provided by engineer. */ +"All group members will remain connected." = "所有群组成员将保持连接。"; + +/* No comment provided by engineer. */ +"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。"; + +/* No comment provided by engineer. */ +"All your contacts will remain connected" = "您的所有联系人将保持连接"; + +/* No comment provided by engineer. */ +"Allow" = "允许"; + +/* No comment provided by engineer. */ +"Allow disappearing messages only if your contact allows it to you." = "仅当您的联系人允许时才允许限时消息。"; + +/* No comment provided by engineer. */ +"Allow irreversible message deletion only if your contact allows it to you." = "仅有您的联系人许可后才允许不可撤回消息移除。"; + +/* No comment provided by engineer. */ +"Allow sending direct messages to members." = "允许直接发送消息给成员。"; + +/* No comment provided by engineer. */ +"Allow sending disappearing messages." = "允许发送限时消息。"; + +/* No comment provided by engineer. */ +"Allow to irreversibly delete sent messages." = "允许不可撤回地删除已发送消息。"; + +/* No comment provided by engineer. */ +"Allow to send voice messages." = "允许发送语音消息。"; + +/* No comment provided by engineer. */ +"Allow voice messages only if your contact allows them." = "仅有您的联系人许可后才允许语音消息。"; + +/* No comment provided by engineer. */ +"Allow voice messages?" = "允许语音消息?"; + +/* No comment provided by engineer. */ +"Allow your contacts to irreversibly delete sent messages." = "允许您的联系人不可撤回地删除已发送消息。"; + +/* No comment provided by engineer. */ +"Allow your contacts to send disappearing messages." = "允许您的联系人发送限时消息。"; + +/* No comment provided by engineer. */ +"Allow your contacts to send voice messages." = "允许您的联系人发送语音消息。"; + +/* No comment provided by engineer. */ +"Already connected?" = "已连接?"; + +/* pref value */ +"always" = "一直"; + +/* No comment provided by engineer. */ +"Always use relay" = "一直使用中继"; + +/* No comment provided by engineer. */ +"Answer call" = "接听来电"; + +/* No comment provided by engineer. */ +"App build: %@" = "应用程序构建:%@"; + +/* No comment provided by engineer. */ +"App icon" = "应用程序图标"; + +/* No comment provided by engineer. */ +"App version" = "应用程序版本"; + +/* No comment provided by engineer. */ +"App version: v%@" = "应用程序版本:v%@"; + +/* No comment provided by engineer. */ +"Appearance" = "外观"; + +/* No comment provided by engineer. */ +"Attach" = "附件"; + +/* No comment provided by engineer. */ +"Audio & video calls" = "语音和视频通话"; + +/* No comment provided by engineer. */ +"audio call (not e2e encrypted)" = "语音通话(非端到端加密)"; + +/* No comment provided by engineer. */ +"Authentication failed" = "认证失败"; + +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "通话接通前需要进行认证,但您可能会错过来电。"; + +/* No comment provided by engineer. */ +"Authentication unavailable" = "认证不可用"; + +/* No comment provided by engineer. */ +"Auto-accept contact requests" = "自动接受联系人请求"; + +/* No comment provided by engineer. */ +"Auto-accept images" = "自动接受图片"; + +/* No comment provided by engineer. */ +"Automatically" = "自动地"; + +/* No comment provided by engineer. */ +"Back" = "返回"; + +/* integrity error chat item */ +"bad message hash" = "错误消息散列"; + +/* integrity error chat item */ +"bad message ID" = "错误消息 ID"; + +/* No comment provided by engineer. */ +"bold" = "加粗"; + +/* No comment provided by engineer. */ +"Both you and your contact can irreversibly delete sent messages." = "您和您的联系人都可以不可逆转地删除已发送的消息。"; + +/* No comment provided by engineer. */ +"Both you and your contact can send disappearing messages." = "您和您的联系人都可以发送限时消息。"; + +/* No comment provided by engineer. */ +"Both you and your contact can send voice messages." = "您和您的联系人都可以发送语音消息。"; + +/* No comment provided by engineer. */ +"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。"; + +/* No comment provided by engineer. */ +"Call already ended!" = "通话已经结束!"; + +/* call status */ +"call error" = "通话错误"; + +/* call status */ +"call in progress" = "通话中"; + +/* call status */ +"calling…" = "呼叫中……"; + +/* No comment provided by engineer. */ +"Calls" = "通话"; + +/* No comment provided by engineer. */ +"Can't invite contact!" = "无法邀请联系人!"; + +/* No comment provided by engineer. */ +"Can't invite contacts!" = "无法邀请联系人!"; + +/* No comment provided by engineer. */ +"Cancel" = "取消"; + +/* feature offered item */ +"cancelled %@" = "已取消 %@"; + +/* No comment provided by engineer. */ +"Cannot access keychain to save database password" = "无法访问钥匙串以保存数据库密码"; + +/* No comment provided by engineer. */ +"Cannot receive file" = "无法接收文件"; + +/* No comment provided by engineer. */ +"Change" = "更改"; + +/* No comment provided by engineer. */ +"Change database passphrase?" = "更改数据库密码?"; + +/* No comment provided by engineer. */ +"Change member role?" = "更改成员角色?"; + +/* No comment provided by engineer. */ +"Change receiving address" = "更改接收地址"; + +/* No comment provided by engineer. */ +"Change receiving address?" = "更改接收地址?"; + +/* No comment provided by engineer. */ +"Change role" = "改变角色"; + +/* chat item text */ +"changed address for you" = "为您更改地址"; + +/* rcv group event chat item */ +"changed role of %@ to %@" = "将 %1$@ 的角色更改为 %2$@"; + +/* rcv group event chat item */ +"changed your role to %@" = "更改您的角色为 %@"; + +/* chat item text */ +"changing address for %@..." = "更改 %@... 的地址中"; + +/* chat item text */ +"changing address..." = "更改地址中……"; + +/* No comment provided by engineer. */ +"Chat archive" = "聊天档案"; + +/* No comment provided by engineer. */ +"Chat console" = "聊天控制台"; + +/* No comment provided by engineer. */ +"Chat database" = "聊天数据库"; + +/* No comment provided by engineer. */ +"Chat database deleted" = "聊天数据库已删除"; + +/* No comment provided by engineer. */ +"Chat database imported" = "聊天数据库已导入"; + +/* No comment provided by engineer. */ +"Chat is running" = "聊天进行中"; + +/* No comment provided by engineer. */ +"Chat is stopped" = "聊天已停止"; + +/* No comment provided by engineer. */ +"Chat preferences" = "聊天偏好设置"; + +/* No comment provided by engineer. */ +"Chats" = "聊天"; + +/* No comment provided by engineer. */ +"Check server address and try again." = "检查服务器地址并再试一次。"; + +/* No comment provided by engineer. */ +"Choose file" = "选择文件"; + +/* No comment provided by engineer. */ +"Choose from library" = "从库中选择"; + +/* No comment provided by engineer. */ +"Clear" = "清除"; + +/* No comment provided by engineer. */ +"Clear conversation" = "清除对话"; + +/* No comment provided by engineer. */ +"Clear conversation?" = "清除对话吗?"; + +/* No comment provided by engineer. */ +"Clear verification" = "清除验证"; + +/* No comment provided by engineer. */ +"colored" = "有色"; + +/* No comment provided by engineer. */ +"Colors" = "颜色"; + +/* No comment provided by engineer. */ +"Compare security codes with your contacts." = "与您的联系人比较安全码。"; + +/* No comment provided by engineer. */ +"complete" = "完整的"; + +/* No comment provided by engineer. */ +"Configure ICE servers" = "配置 ICE 服务器"; + +/* No comment provided by engineer. */ +"Confirm" = "确认"; + +/* No comment provided by engineer. */ +"Confirm new passphrase…" = "确认新密码……"; + +/* server test step */ +"Connect" = "连接"; + +/* No comment provided by engineer. */ +"connect to SimpleX Chat developers." = "连接到 SimpleX Chat 开发者。"; + +/* No comment provided by engineer. */ +"Connect via contact link?" = "通过联系人链接连接?"; + +/* No comment provided by engineer. */ +"Connect via group link?" = "通过群组链接连接?"; + +/* No comment provided by engineer. */ +"Connect via link" = "通过链接连接"; + +/* No comment provided by engineer. */ +"Connect via link / QR code" = "通过群组链接/二维码连接"; + +/* No comment provided by engineer. */ +"Connect via one-time link?" = "通过一次性链接连接?"; + +/* No comment provided by engineer. */ +"connected" = "已连接"; + +/* No comment provided by engineer. */ +"connecting" = "连接中"; + +/* No comment provided by engineer. */ +"connecting (accepted)" = "连接中(已接受)"; + +/* No comment provided by engineer. */ +"connecting (announced)" = "连接中(已宣布)"; + +/* No comment provided by engineer. */ +"connecting (introduced)" = "连接中(已介绍)"; + +/* No comment provided by engineer. */ +"connecting (introduction invitation)" = "连接(介绍邀请)"; + +/* call status */ +"connecting call" = "连接通话中……"; + +/* No comment provided by engineer. */ +"Connecting server…" = "连接服务器中……"; + +/* No comment provided by engineer. */ +"Connecting server… (error: %@)" = "连接服务器中……(错误:%@)"; + +/* chat list item title */ +"connecting…" = "连接中……"; + +/* No comment provided by engineer. */ +"Connection" = "连接"; + +/* No comment provided by engineer. */ +"Connection error" = "连接错误"; + +/* No comment provided by engineer. */ +"Connection error (AUTH)" = "连接错误(AUTH)"; + +/* chat list item title (it should not be shown */ +"connection established" = "连接已建立"; + +/* No comment provided by engineer. */ +"Connection request" = "连接请求"; + +/* No comment provided by engineer. */ +"Connection request sent!" = "已发送连接请求!"; + +/* No comment provided by engineer. */ +"Connection timeout" = "连接超时"; + +/* connection information */ +"connection:%@" = "连接:%@"; + +/* No comment provided by engineer. */ +"Contact allows" = "联系人允许"; + +/* No comment provided by engineer. */ +"Contact already exists" = "联系人已存在"; + +/* No comment provided by engineer. */ +"Contact and all messages will be deleted - this cannot be undone!" = "联系人和所有的消息都将被删除——这是不可逆回的!"; + +/* No comment provided by engineer. */ +"contact has e2e encryption" = "联系人具有端到端加密"; + +/* No comment provided by engineer. */ +"contact has no e2e encryption" = "联系人没有端到端加密"; + +/* notification */ +"Contact hidden:" = "联系人已隐藏:"; + +/* notification */ +"Contact is connected" = "联系已连接"; + +/* No comment provided by engineer. */ +"Contact is not connected yet!" = "联系人尚未连接!"; + +/* No comment provided by engineer. */ +"Contact name" = "联系人姓名"; + +/* No comment provided by engineer. */ +"Contact preferences" = "联系人偏好设置"; + +/* No comment provided by engineer. */ +"Contact requests" = "联系人请求"; + +/* No comment provided by engineer. */ +"Contacts can mark messages for deletion; you will be able to view them." = "联系人可以将信息标记为删除;您将可以查看这些信息。"; + +/* chat item action */ +"Copy" = "复制"; + +/* No comment provided by engineer. */ +"Core built at: %@" = "核心构建于:%@"; + +/* No comment provided by engineer. */ +"Core version: v%@" = "核心版本: v%@"; + +/* No comment provided by engineer. */ +"Create" = "创建"; + +/* No comment provided by engineer. */ +"Create address" = "创建地址"; + +/* No comment provided by engineer. */ +"Create group link" = "创建群组链接"; + +/* No comment provided by engineer. */ +"Create link" = "创建链接"; + +/* No comment provided by engineer. */ +"Create one-time invitation link" = "创建一次性邀请链接"; + +/* server test step */ +"Create queue" = "创建队列"; + +/* No comment provided by engineer. */ +"Create secret group" = "创建私密群组"; + +/* No comment provided by engineer. */ +"Create your profile" = "创建您的资料"; + +/* No comment provided by engineer. */ +"Created on %@" = "创建于 %@"; + +/* No comment provided by engineer. */ +"creator" = "创建者"; + +/* No comment provided by engineer. */ +"Current passphrase…" = "现有密码……"; + +/* No comment provided by engineer. */ +"Currently maximum supported file size is %@." = "目前支持的最大文件大小为 %@。"; + +/* No comment provided by engineer. */ +"Dark" = "深色"; + +/* No comment provided by engineer. */ +"Database encrypted!" = "数据库已加密!"; + +/* No comment provided by engineer. */ +"Database encryption passphrase will be updated and stored in the keychain.\n" = "数据库加密密码将被更新并保存在钥匙串中。\n"; + +/* No comment provided by engineer. */ +"Database encryption passphrase will be updated.\n" = "数据库加密密码将被更新。\n"; + +/* No comment provided by engineer. */ +"Database error" = "数据库错误"; + +/* No comment provided by engineer. */ +"Database ID" = "数据库 ID"; + +/* No comment provided by engineer. */ +"Database is encrypted using a random passphrase, you can change it." = "数据库使用随机密码进行加密,您可以更改它。"; + +/* No comment provided by engineer. */ +"Database is encrypted using a random passphrase. Please change it before exporting." = "数据库使用随机密码进行加密。请在导出前更改它。"; + +/* No comment provided by engineer. */ +"Database passphrase" = "数据库密码"; + +/* No comment provided by engineer. */ +"Database passphrase & export" = "数据库密码和导出"; + +/* No comment provided by engineer. */ +"Database passphrase is different from saved in the keychain." = "数据库密码与保存在钥匙串中的密码不同。"; + +/* No comment provided by engineer. */ +"Database passphrase is required to open chat." = "打开聊天需要数据库密码。"; + +/* No comment provided by engineer. */ +"Database will be encrypted and the passphrase stored in the keychain.\n" = "数据库将被加密,密码保存在钥匙串中。\n"; + +/* No comment provided by engineer. */ +"Database will be encrypted.\n" = "数据库将被加密。\n"; + +/* No comment provided by engineer. */ +"Database will be migrated when the app restarts" = "应用程序重新启动时将迁移数据库"; + +/* No comment provided by engineer. */ +"Decentralized" = "分散式"; + +/* pref value */ +"default (%@)" = "默认 (%@)"; + +/* chat item action */ +"Delete" = "删除"; + +/* No comment provided by engineer. */ +"Delete address" = "删除地址"; + +/* No comment provided by engineer. */ +"Delete address?" = "删除地址?"; + +/* No comment provided by engineer. */ +"Delete after" = "在此后删除"; + +/* No comment provided by engineer. */ +"Delete all files" = "删除所有文件"; + +/* No comment provided by engineer. */ +"Delete archive" = "删除档案"; + +/* No comment provided by engineer. */ +"Delete chat archive?" = "删除聊天档案?"; + +/* No comment provided by engineer. */ +"Delete chat profile?" = "删除聊天资料?"; + +/* No comment provided by engineer. */ +"Delete connection" = "删除连接"; + +/* No comment provided by engineer. */ +"Delete contact" = "删除联系人"; + +/* No comment provided by engineer. */ +"Delete Contact" = "删除联系人"; + +/* No comment provided by engineer. */ +"Delete contact?" = "删除联系人?"; + +/* No comment provided by engineer. */ +"Delete database" = "删除数据库"; + +/* No comment provided by engineer. */ +"Delete files and media?" = "删除文件和媒体文件吗?"; + +/* No comment provided by engineer. */ +"Delete files for all chat profiles" = "为所有聊天资料删除文件"; + +/* chat feature */ +"Delete for everyone" = "为所有人删除"; + +/* No comment provided by engineer. */ +"Delete for me" = "为我删除"; + +/* No comment provided by engineer. */ +"Delete group" = "删除群组"; + +/* No comment provided by engineer. */ +"Delete group?" = "删除群组吗?"; + +/* No comment provided by engineer. */ +"Delete invitation" = "删除邀请"; + +/* No comment provided by engineer. */ +"Delete link" = "删除链接"; + +/* No comment provided by engineer. */ +"Delete link?" = "删除链接?"; + +/* No comment provided by engineer. */ +"Delete member message?" = "删除成员消息?"; + +/* No comment provided by engineer. */ +"Delete message?" = "删除消息吗?"; + +/* No comment provided by engineer. */ +"Delete messages" = "删除消息"; + +/* No comment provided by engineer. */ +"Delete messages after" = "在此后删除消息"; + +/* No comment provided by engineer. */ +"Delete old database" = "删除旧数据库"; + +/* No comment provided by engineer. */ +"Delete old database?" = "删除旧数据库吗?"; + +/* No comment provided by engineer. */ +"Delete pending connection" = "删除挂起连接"; + +/* No comment provided by engineer. */ +"Delete pending connection?" = "删除待定连接?"; + +/* server test step */ +"Delete queue" = "删除队列"; + +/* No comment provided by engineer. */ +"Delete user profile?" = "删除用户资料?"; + +/* deleted chat item */ +"deleted" = "已删除"; + +/* rcv group event chat item */ +"deleted group" = "已删除群组"; + +/* No comment provided by engineer. */ +"Description" = "描述"; + +/* No comment provided by engineer. */ +"Develop" = "开发"; + +/* No comment provided by engineer. */ +"Developer tools" = "开发者工具"; + +/* No comment provided by engineer. */ +"Device" = "设备"; + +/* No comment provided by engineer. */ +"Device authentication is disabled. Turning off SimpleX Lock." = "设备认证被禁用。关闭 SimpleX 锁定。"; + +/* No comment provided by engineer. */ +"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "没有启用设备认证。一旦启用设备认证,您可以通过设置打开 SimpleX 锁定。"; + +/* No comment provided by engineer. */ +"Different names, avatars and transport isolation." = "不同的名字、头像和传输隔离。"; + +/* connection level description */ +"direct" = "直接"; + +/* chat feature */ +"Direct messages" = "私聊"; + +/* No comment provided by engineer. */ +"Direct messages between members are prohibited in this group." = "此群中禁止成员之间私聊。"; + +/* authentication reason */ +"Disable SimpleX Lock" = "禁用 SimpleX 锁定"; + +/* chat feature */ +"Disappearing messages" = "限时消息"; + +/* No comment provided by engineer. */ +"Disappearing messages are prohibited in this chat." = "此聊天中禁止显示限时消息。"; + +/* No comment provided by engineer. */ +"Disappearing messages are prohibited in this group." = "该组禁止限时消息。"; + +/* server test step */ +"Disconnect" = "断开连接"; + +/* No comment provided by engineer. */ +"Display name" = "显示名称"; + +/* No comment provided by engineer. */ +"Display name:" = "显示名:"; + +/* No comment provided by engineer. */ +"Do it later" = "稍后再做"; + +/* No comment provided by engineer. */ +"Do NOT use SimpleX for emergency calls." = "请勿使用 SimpleX 进行紧急通话。"; + +/* No comment provided by engineer. */ +"Duplicate display name!" = "重复的显示名!"; + +/* integrity error chat item */ +"duplicate message" = "重复的消息"; + +/* No comment provided by engineer. */ +"e2e encrypted" = "端到端加密"; + +/* chat item action */ +"Edit" = "编辑"; + +/* No comment provided by engineer. */ +"Edit group profile" = "编辑群组资料"; + +/* No comment provided by engineer. */ +"Enable" = "启用"; + +/* No comment provided by engineer. */ +"Enable automatic message deletion?" = "启用自动删除消息?"; + +/* No comment provided by engineer. */ +"Enable instant notifications?" = "启用即时通知?"; + +/* No comment provided by engineer. */ +"Enable notifications" = "启用通知"; + +/* No comment provided by engineer. */ +"Enable periodic notifications?" = "启用定期通知?"; + +/* authentication reason */ +"Enable SimpleX Lock" = "启用 SimpleX 锁定"; + +/* No comment provided by engineer. */ +"Enable TCP keep-alive" = "启用 TCP 保持活跃状态"; + +/* enabled status */ +"enabled" = "已启用"; + +/* enabled status */ +"enabled for contact" = "已为联系人启用"; + +/* enabled status */ +"enabled for you" = "为您启用"; + +/* No comment provided by engineer. */ +"Encrypt" = "加密"; + +/* No comment provided by engineer. */ +"Encrypt database?" = "加密数据库?"; + +/* No comment provided by engineer. */ +"Encrypted database" = "加密的数据库"; + +/* notification */ +"Encrypted message or another event" = "加密消息或其他项目"; + +/* notification */ +"Encrypted message: database error" = "加密消息:数据库错误"; + +/* notification */ +"Encrypted message: keychain error" = "加密信息:钥匙串错误"; + +/* notification */ +"Encrypted message: no passphrase" = "加密消息:没有密码"; + +/* notification */ +"Encrypted message: unexpected error" = "加密消息:意外错误"; + +/* No comment provided by engineer. */ +"ended" = "已结束"; + +/* call status */ +"ended call %@" = "结束通话 %@"; + +/* No comment provided by engineer. */ +"Enter correct passphrase." = "输入正确密码。"; + +/* No comment provided by engineer. */ +"Enter passphrase…" = "输入密码……"; + +/* No comment provided by engineer. */ +"Enter server manually" = "手动输入服务器"; + +/* No comment provided by engineer. */ +"error" = "错误"; + +/* No comment provided by engineer. */ +"Error" = "错误"; + +/* No comment provided by engineer. */ +"Error accepting contact request" = "接受联系人请求错误"; + +/* No comment provided by engineer. */ +"Error accessing database file" = "访问数据库文件错误"; + +/* No comment provided by engineer. */ +"Error adding member(s)" = "添加成员错误"; + +/* No comment provided by engineer. */ +"Error changing address" = "更改地址错误"; + +/* No comment provided by engineer. */ +"Error changing role" = "更改角色错误"; + +/* No comment provided by engineer. */ +"Error changing setting" = "更改设置错误"; + +/* No comment provided by engineer. */ +"Error creating address" = "创建地址错误"; + +/* No comment provided by engineer. */ +"Error creating group" = "创建群组错误"; + +/* No comment provided by engineer. */ +"Error creating group link" = "创建群组链接错误"; + +/* No comment provided by engineer. */ +"Error creating profile!" = "创建资料错误!"; + +/* No comment provided by engineer. */ +"Error deleting chat database" = "删除聊天数据库错误"; + +/* No comment provided by engineer. */ +"Error deleting chat!" = "删除聊天错误!"; + +/* No comment provided by engineer. */ +"Error deleting connection" = "删除连接错误"; + +/* No comment provided by engineer. */ +"Error deleting contact" = "删除联系人错误"; + +/* No comment provided by engineer. */ +"Error deleting database" = "删除数据库错误"; + +/* No comment provided by engineer. */ +"Error deleting old database" = "删除旧数据库错误"; + +/* No comment provided by engineer. */ +"Error deleting token" = "删除令牌错误"; + +/* No comment provided by engineer. */ +"Error deleting user profile" = "删除用户资料错误"; + +/* No comment provided by engineer. */ +"Error enabling notifications" = "启用通知错误"; + +/* No comment provided by engineer. */ +"Error encrypting database" = "加密数据库错误"; + +/* No comment provided by engineer. */ +"Error exporting chat database" = "导出聊天数据库错误"; + +/* No comment provided by engineer. */ +"Error importing chat database" = "导入聊天数据库错误"; + +/* No comment provided by engineer. */ +"Error joining group" = "加入群组错误"; + +/* No comment provided by engineer. */ +"Error receiving file" = "接收文件错误"; + +/* No comment provided by engineer. */ +"Error removing member" = "删除成员错误"; + +/* No comment provided by engineer. */ +"Error saving group profile" = "保存群组资料错误"; + +/* No comment provided by engineer. */ +"Error saving ICE servers" = "保存 ICE 服务器错误"; + +/* No comment provided by engineer. */ +"Error saving passphrase to keychain" = "保存密码到钥匙串错误"; + +/* No comment provided by engineer. */ +"Error saving SMP servers" = "保存 SMP 服务器错误"; + +/* No comment provided by engineer. */ +"Error sending message" = "发送消息错误"; + +/* No comment provided by engineer. */ +"Error starting chat" = "启动聊天错误"; + +/* No comment provided by engineer. */ +"Error stopping chat" = "停止聊天错误"; + +/* No comment provided by engineer. */ +"Error switching profile!" = "切换资料错误!"; + +/* No comment provided by engineer. */ +"Error updating group link" = "更新群组链接错误"; + +/* No comment provided by engineer. */ +"Error updating message" = "更新消息错误"; + +/* No comment provided by engineer. */ +"Error updating settings" = "更新设置错误"; + +/* No comment provided by engineer. */ +"Error: %@" = "错误: %@"; + +/* No comment provided by engineer. */ +"Error: no database file" = "错误:没有数据库文件"; + +/* No comment provided by engineer. */ +"Error: URL is invalid" = "错误:URL 无效"; + +/* No comment provided by engineer. */ +"Exit without saving" = "退出而不保存"; + +/* No comment provided by engineer. */ +"Export database" = "导出数据库"; + +/* No comment provided by engineer. */ +"Export error:" = "导出错误:"; + +/* No comment provided by engineer. */ +"Exported database archive." = "导出数据库归档。"; + +/* No comment provided by engineer. */ +"Exporting database archive..." = "导出数据库档案中……"; + +/* No comment provided by engineer. */ +"Failed to remove passphrase" = "移除密码失败"; + +/* No comment provided by engineer. */ +"File will be received when your contact is online, please wait or check later!" = "文件将在您的联系人在线时收到,请稍等或稍后再查看!"; + +/* No comment provided by engineer. */ +"File: %@" = "文件:%@"; + +/* No comment provided by engineer. */ +"Files & media" = "文件和媒体"; + +/* No comment provided by engineer. */ +"For console" = "用于控制台"; + +/* No comment provided by engineer. */ +"French interface" = "法语界面"; + +/* No comment provided by engineer. */ +"Full link" = "完整链接"; + +/* No comment provided by engineer. */ +"Full name (optional)" = "全名(可选)"; + +/* No comment provided by engineer. */ +"Full name:" = "全名:"; + +/* No comment provided by engineer. */ +"GIFs and stickers" = "GIF 和贴纸"; + +/* No comment provided by engineer. */ +"Group" = "群组"; + +/* No comment provided by engineer. */ +"group deleted" = "群组已删除"; + +/* No comment provided by engineer. */ +"Group display name" = "群组显示名称"; + +/* No comment provided by engineer. */ +"Group full name (optional)" = "群组全名(可选)"; + +/* No comment provided by engineer. */ +"Group image" = "群组图片"; + +/* No comment provided by engineer. */ +"Group invitation" = "群组邀请"; + +/* No comment provided by engineer. */ +"Group invitation expired" = "群组邀请已过期"; + +/* No comment provided by engineer. */ +"Group invitation is no longer valid, it was removed by sender." = "群组邀请不再有效,已被发件人删除。"; + +/* No comment provided by engineer. */ +"Group link" = "群组链接"; + +/* No comment provided by engineer. */ +"Group links" = "群组链接"; + +/* No comment provided by engineer. */ +"Group members can irreversibly delete sent messages." = "群组成员可以不可撤回地删除已发送的消息。"; + +/* No comment provided by engineer. */ +"Group members can send direct messages." = "群组成员可以私信。"; + +/* No comment provided by engineer. */ +"Group members can send disappearing messages." = "群组成员可以发送限时消息。"; + +/* No comment provided by engineer. */ +"Group members can send voice messages." = "群组成员可以发送语音消息。"; + +/* notification */ +"Group message:" = "群组消息:"; + +/* No comment provided by engineer. */ +"Group preferences" = "群组偏好设置"; + +/* No comment provided by engineer. */ +"Group profile" = "集团简介"; + +/* No comment provided by engineer. */ +"Group profile is stored on members' devices, not on the servers." = "群组资料存储在成员的设备上,而不是服务器上。"; + +/* snd group event chat item */ +"group profile updated" = "群组资料已更新"; + +/* No comment provided by engineer. */ +"Group will be deleted for all members - this cannot be undone!" = "将为所有成员删除群组——此操作无法撤消!"; + +/* No comment provided by engineer. */ +"Group will be deleted for you - this cannot be undone!" = "将为您删除群组——此操作无法撤消!"; + +/* No comment provided by engineer. */ +"Help" = "帮助"; + +/* No comment provided by engineer. */ +"Hidden" = "已隐藏"; + +/* chat item action */ +"Hide" = "隐藏"; + +/* No comment provided by engineer. */ +"Hide app screen in the recent apps." = "在最近的应用程序中隐藏应用程序屏幕。"; + +/* No comment provided by engineer. */ +"How it works" = "工作原理"; + +/* No comment provided by engineer. */ +"How SimpleX works" = "SimpleX的工作原理"; + +/* No comment provided by engineer. */ +"How to" = "如何"; + +/* No comment provided by engineer. */ +"How to use it" = "如何使用它"; + +/* No comment provided by engineer. */ +"How to use your servers" = "如何使用您的服务器"; + +/* No comment provided by engineer. */ +"ICE servers (one per line)" = "ICE 服务器(每行一个)"; + +/* No comment provided by engineer. */ +"If you can't meet in person, **show QR code in the video call**, or share the link." = "如果您不能亲自见面,**在视频通话中出示二维码**,或分享链接。"; + +/* No comment provided by engineer. */ +"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "如果您不能亲自见面,您可以**扫描视频通话中的二维码**,或者您的联系人可以分享邀请链接。"; + +/* No comment provided by engineer. */ +"If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "如果您现在需要使用聊天,请点击下面的**稍后再做**(当您重新启动应用程序时,系统会提示您迁移数据库)。"; + +/* No comment provided by engineer. */ +"Ignore" = "忽视"; + +/* No comment provided by engineer. */ +"Image will be received when your contact is online, please wait or check later!" = "图片将在您的联系人在线时收到,请稍等或稍后查看!"; + +/* No comment provided by engineer. */ +"Immune to spam and abuse" = "不受垃圾和骚扰消息影响"; + +/* No comment provided by engineer. */ +"Import" = "导入"; + +/* No comment provided by engineer. */ +"Import chat database?" = "导入聊天数据库?"; + +/* No comment provided by engineer. */ +"Import database" = "导入数据库"; + +/* No comment provided by engineer. */ +"Improved privacy and security" = "改进的隐私和安全"; + +/* No comment provided by engineer. */ +"Improved server configuration" = "改进的服务器配置"; + +/* No comment provided by engineer. */ +"Incognito" = "隐身聊天"; + +/* No comment provided by engineer. */ +"Incognito mode" = "隐身模式"; + +/* No comment provided by engineer. */ +"Incognito mode is not supported here - your main profile will be sent to group members" = "此处不支持隐身模式——您的主要个人资料将发送给群组成员"; + +/* No comment provided by engineer. */ +"Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." = "隐身模式可以保护你的主要个人资料名称和图像的隐私——对于每个新的联系人,都会创建一个新的随机个人资料。"; + +/* chat list item description */ +"incognito via contact address link" = "通过联系人地址链接隐身聊天"; + +/* chat list item description */ +"incognito via group link" = "通过群组链接隐身聊天"; + +/* chat list item description */ +"incognito via one-time link" = "通过一次性链接隐身聊天"; + +/* notification */ +"Incoming audio call" = "语音通话来电"; + +/* notification */ +"Incoming call" = "通话来电"; + +/* notification */ +"Incoming video call" = "视频通话来电"; + +/* No comment provided by engineer. */ +"Incorrect security code!" = "安全码不正确!"; + +/* connection level description */ +"indirect (%d)" = "间接(%d)"; + +/* No comment provided by engineer. */ +"Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "安装[用于终端的 SimpleX Chat](https://github.com/simplex-chat/simplex-chat)"; + +/* No comment provided by engineer. */ +"Instant push notifications will be hidden!\n" = "即时推送通知将被隐藏!\n"; + +/* No comment provided by engineer. */ +"Instantly" = "即时"; + +/* No comment provided by engineer. */ +"Interface" = "界面"; + +/* invalid chat data */ +"invalid chat" = "无效聊天"; + +/* No comment provided by engineer. */ +"invalid chat data" = "无效聊天数据"; + +/* No comment provided by engineer. */ +"Invalid connection link" = "无效的连接链接"; + +/* invalid chat item */ +"invalid data" = "无效数据"; + +/* No comment provided by engineer. */ +"Invalid server address!" = "无效的服务器地址!"; + +/* No comment provided by engineer. */ +"Invitation expired!" = "邀请已过期!"; + +/* group name */ +"invitation to group %@" = "邀请您加入群组 %@"; + +/* No comment provided by engineer. */ +"Invite members" = "邀请成员"; + +/* No comment provided by engineer. */ +"Invite to group" = "邀请加入群组"; + +/* No comment provided by engineer. */ +"invited" = "已邀请"; + +/* rcv group event chat item */ +"invited %@" = "已邀请 %@"; + +/* chat list item title */ +"invited to connect" = "已邀请连接"; + +/* rcv group event chat item */ +"invited via your group link" = "通过您的群组链接邀请"; + +/* No comment provided by engineer. */ +"iOS Keychain is used to securely store passphrase - it allows receiving push notifications." = "iOS钥匙串用于安全地存储密码——它允许接收推送通知。"; + +/* No comment provided by engineer. */ +"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "在您重启应用或改变密码后,iOS钥匙串将被用来安全地存储密码——它将允许接收推送通知。"; + +/* No comment provided by engineer. */ +"Irreversible message deletion" = "不可撤回消息移除"; + +/* No comment provided by engineer. */ +"Irreversible message deletion is prohibited in this chat." = "此聊天中禁止不可撤回消息移除。"; + +/* No comment provided by engineer. */ +"Irreversible message deletion is prohibited in this group." = "此群组中禁止不可撤回消息移除。"; + +/* No comment provided by engineer. */ +"It allows having many anonymous connections without any shared data between them in a single chat profile." = "它允许在一个聊天资料中有多个匿名连接,而它们之间没有任何共享数据。"; + +/* No comment provided by engineer. */ +"It can happen when:\n1. The messages expire on the server if they were not received for 30 days,\n2. The server you use to receive the messages from this contact was updated and restarted.\n3. The connection is compromised.\nPlease connect to the developers via Settings to receive the updates about the servers.\nWe will be adding server redundancy to prevent lost messages." = "它可以在以下情况下发生:\n1. 如果消息在30天内没有被收到,就会在服务器上过期。\n2. 您用于接收来自此联系人的消息的服务器已更新并重新启动。\n3. 连接受损。\n请通过设置与开发者联系,以接收有关服务器的更新。\n我们将添加服务器冗余以防止丢失消息。"; + +/* No comment provided by engineer. */ +"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "您似乎已经通过此链接连接。如果不是这样,则有一个错误 (%@)。"; + +/* No comment provided by engineer. */ +"Italian interface" = "意大利语界面"; + +/* No comment provided by engineer. */ +"italic" = "斜体"; + +/* No comment provided by engineer. */ +"Join" = "加入"; + +/* No comment provided by engineer. */ +"join as %@" = "以 %@ 身份加入"; + +/* No comment provided by engineer. */ +"Join group" = "加入群组"; + +/* No comment provided by engineer. */ +"Join incognito" = "加入隐身聊天"; + +/* No comment provided by engineer. */ +"Joining group" = "加入群组"; + +/* No comment provided by engineer. */ +"Keychain error" = "钥匙串错误"; + +/* No comment provided by engineer. */ +"Large file!" = "大文件!"; + +/* No comment provided by engineer. */ +"Leave" = "离开"; + +/* No comment provided by engineer. */ +"Leave group" = "离开群组"; + +/* No comment provided by engineer. */ +"Leave group?" = "离开群组?"; + +/* rcv group event chat item */ +"left" = "已离开"; + +/* No comment provided by engineer. */ +"Light" = "浅色"; + +/* No comment provided by engineer. */ +"Limitations" = "限制"; + +/* No comment provided by engineer. */ +"LIVE" = "实时"; + +/* No comment provided by engineer. */ +"Live message!" = "实时消息!"; + +/* No comment provided by engineer. */ +"Live messages" = "实时消息"; + +/* No comment provided by engineer. */ +"Local name" = "本地名称"; + +/* No comment provided by engineer. */ +"Local profile data only" = "仅本地配置文件数据"; + +/* No comment provided by engineer. */ +"Make a private connection" = "建立私密连接"; + +/* No comment provided by engineer. */ +"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "请确保 SMP服 务器地址格式正确,每行一个地址并且不重复 (%@)。"; + +/* No comment provided by engineer. */ +"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。"; + +/* No comment provided by engineer. */ +"Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" = "许多人问: *如果SimpleX没有用户标识符,它怎么传递信息?*"; + +/* No comment provided by engineer. */ +"Mark deleted for everyone" = "标记为所有人已删除"; + +/* No comment provided by engineer. */ +"Mark read" = "标记为已读"; + +/* No comment provided by engineer. */ +"Mark verified" = "标记为已验证"; + +/* No comment provided by engineer. */ +"Markdown in messages" = "在消息中使用 Markdown"; + +/* marked deleted chat item preview text */ +"marked deleted" = "标记为已删除"; + +/* No comment provided by engineer. */ +"Max 30 seconds, received instantly." = "最长30秒,立即接收。"; + +/* member role */ +"member" = "成员"; + +/* No comment provided by engineer. */ +"Member" = "成员"; + +/* rcv group event chat item */ +"member connected" = "已连接"; + +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All group members will be notified." = "成员角色将更改为 \"%@\"。所有群成员将收到通知。"; + +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". The member will receive a new invitation." = "成员角色将更改为 \"%@\"。该成员将收到一份新的邀请。"; + +/* No comment provided by engineer. */ +"Member will be removed from group - this cannot be undone!" = "成员将被移出群组——此操作无法撤消!"; + +/* No comment provided by engineer. */ +"Message delivery error" = "消息传递错误"; + +/* No comment provided by engineer. */ +"Message draft" = "消息草稿"; + +/* notification */ +"message received" = "消息已收到"; + +/* No comment provided by engineer. */ +"Message text" = "消息正文"; + +/* No comment provided by engineer. */ +"Messages" = "消息"; + +/* No comment provided by engineer. */ +"Migrating database archive..." = "迁移数据库档案中……"; + +/* No comment provided by engineer. */ +"Migration error:" = "迁移错误:"; + +/* No comment provided by engineer. */ +"Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." = "迁移失败。点击下面的 **Skip** 继续使用当前数据库。请通过聊天或电子邮件 [chat@simplex.chat](mailto:chat@simplex.chat) 将问题报告给应用程序开发人员。"; + +/* No comment provided by engineer. */ +"Migration is completed" = "迁移完成"; + +/* call status */ +"missed call" = "未接来电"; + +/* chat item action */ +"Moderate" = "管理员移除"; + +/* moderated chat item */ +"moderated" = "已被管理员移除"; + +/* No comment provided by engineer. */ +"moderated by %@" = "由 %@ 审核"; + +/* No comment provided by engineer. */ +"More improvements are coming soon!" = "更多改进即将推出!"; + +/* No comment provided by engineer. */ +"Most likely this contact has deleted the connection with you." = "很可能此联系人已经删除了与您的联系。"; + +/* No comment provided by engineer. */ +"Multiple chat profiles" = "多个聊天资料"; + +/* No comment provided by engineer. */ +"Mute" = "静音"; + +/* No comment provided by engineer. */ +"Name" = "名称"; + +/* No comment provided by engineer. */ +"Network & servers" = "网络和服务器"; + +/* No comment provided by engineer. */ +"Network settings" = "网络设置"; + +/* No comment provided by engineer. */ +"Network status" = "网络状态"; + +/* No comment provided by engineer. */ +"never" = "从不"; + +/* notification */ +"New contact request" = "新联系人请求"; + +/* notification */ +"New contact:" = "新联系人:"; + +/* No comment provided by engineer. */ +"New database archive" = "新数据库存档"; + +/* No comment provided by engineer. */ +"New in %@" = "%@ 的新内容"; + +/* No comment provided by engineer. */ +"New member role" = "新成员角色"; + +/* notification */ +"new message" = "新消息"; + +/* notification */ +"New message" = "新消息"; + +/* No comment provided by engineer. */ +"New passphrase…" = "新密码……"; + +/* pref value */ +"no" = "否"; + +/* No comment provided by engineer. */ +"No" = "否"; + +/* No comment provided by engineer. */ +"No contacts selected" = "未选择联系人"; + +/* No comment provided by engineer. */ +"No contacts to add" = "没有联系人可添加"; + +/* No comment provided by engineer. */ +"No device token!" = "无设备令牌!"; + +/* No comment provided by engineer. */ +"no e2e encryption" = "无端到端加密"; + +/* No comment provided by engineer. */ +"No group!" = "未找到群组!"; + +/* No comment provided by engineer. */ +"No permission to record voice message" = "没有录制语音消息的权限"; + +/* No comment provided by engineer. */ +"No received or sent files" = "未收到或发送文件"; + +/* No comment provided by engineer. */ +"Notifications" = "通知"; + +/* No comment provided by engineer. */ +"Notifications are disabled!" = "通知被禁用!"; + +/* member role */ +"observer" = "观察者"; + +/* enabled status + group pref value */ +"off" = "关闭"; + +/* No comment provided by engineer. */ +"Off (Local)" = "关闭 (本地)"; + +/* feature offered item */ +"offered %@" = "已提供 %@"; + +/* feature offered item */ +"offered %@: %@" = "已提供 %1$@:%2$@"; + +/* No comment provided by engineer. */ +"Ok" = "好的"; + +/* No comment provided by engineer. */ +"Old database" = "旧的数据库"; + +/* No comment provided by engineer. */ +"Old database archive" = "旧数据库存档"; + +/* group pref value */ +"on" = "在"; + +/* No comment provided by engineer. */ +"One-time invitation link" = "一次性邀请链接"; + +/* No comment provided by engineer. */ +"Onion hosts will be required for connection. Requires enabling VPN." = "Onion 主机将用于连接。需要启用 VPN。"; + +/* No comment provided by engineer. */ +"Onion hosts will be used when available. Requires enabling VPN." = "当可用时,将使用 Onion 主机。需要启用 VPN。"; + +/* No comment provided by engineer. */ +"Onion hosts will not be used." = "将不会使用 Onion 主机。"; + +/* No comment provided by engineer. */ +"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "只有客户端设备存储用户资料、联系人、群组和**双层端到端加密**发送的消息。"; + +/* No comment provided by engineer. */ +"Only group owners can change group preferences." = "只有群主可以改变群组偏好设置。"; + +/* No comment provided by engineer. */ +"Only group owners can enable voice messages." = "只有群主可以启用语音信息。"; + +/* No comment provided by engineer. */ +"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。"; + +/* No comment provided by engineer. */ +"Only you can send disappearing messages." = "只有您可以发送限时消息。"; + +/* No comment provided by engineer. */ +"Only you can send voice messages." = "只有您可以发送语音消息。"; + +/* No comment provided by engineer. */ +"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。"; + +/* No comment provided by engineer. */ +"Only your contact can send disappearing messages." = "只有您的联系人才可以发送限时消息。"; + +/* No comment provided by engineer. */ +"Only your contact can send voice messages." = "只有您的联系人可以发送语音消息。"; + +/* No comment provided by engineer. */ +"Open chat" = "打开聊天"; + +/* authentication reason */ +"Open chat console" = "打开聊天控制台"; + +/* No comment provided by engineer. */ +"Open Settings" = "打开设置"; + +/* authentication reason */ +"Open user profiles" = "打开用户个人资料"; + +/* No comment provided by engineer. */ +"Open-source protocol and code – anybody can run the servers." = "开源协议和代码——任何人都可以运行服务器。"; + +/* No comment provided by engineer. */ +"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。"; + +/* No comment provided by engineer. */ +"or chat with the developers" = "或与开发者聊天"; + +/* member role */ +"owner" = "所有者"; + +/* No comment provided by engineer. */ +"Paste" = "粘贴"; + +/* No comment provided by engineer. */ +"Paste image" = "粘贴图片"; + +/* No comment provided by engineer. */ +"Paste received link" = "粘贴收到的链接"; + +/* No comment provided by engineer. */ +"Paste the link you received into the box below to connect with your contact." = "将您收到的链接粘贴到下面的框中以与您的联系人联系。"; + +/* No comment provided by engineer. */ +"peer-to-peer" = "点对点"; + +/* No comment provided by engineer. */ +"People can connect to you only via the links you share." = "人们只能通过您共享的链接与您建立联系。"; + +/* No comment provided by engineer. */ +"Periodically" = "定期地"; + +/* No comment provided by engineer. */ +"PING count" = "PING 次数"; + +/* No comment provided by engineer. */ +"PING interval" = "PING 间隔"; + +/* No comment provided by engineer. */ +"Please ask your contact to enable sending voice messages." = "请让您的联系人启用发送语音消息。"; + +/* No comment provided by engineer. */ +"Please check that you used the correct link or ask your contact to send you another one." = "请检查您使用的链接是否正确,或者让您的联系人给您发送另一个链接。"; + +/* No comment provided by engineer. */ +"Please check your network connection with %@ and try again." = "请检查您与%@的网络连接,然后重试。"; + +/* No comment provided by engineer. */ +"Please check yours and your contact preferences." = "请检查您和您的联系人偏好设置。"; + +/* No comment provided by engineer. */ +"Please contact group admin." = "请联系群组管理员。"; + +/* No comment provided by engineer. */ +"Please enter correct current passphrase." = "请输入正确的当前密码。"; + +/* No comment provided by engineer. */ +"Please enter the previous password after restoring database backup. This action can not be undone." = "恢复数据库备份后请输入之前的密码。 此操作无法撤消。"; + +/* No comment provided by engineer. */ +"Please restart the app and migrate the database to enable push notifications." = "请重新启动应用程序并迁移数据库以启用推送通知。"; + +/* No comment provided by engineer. */ +"Please store passphrase securely, you will NOT be able to access chat if you lose it." = "请安全地保存密码,如果您丢失了密码,您将无法访问聊天。"; + +/* No comment provided by engineer. */ +"Please store passphrase securely, you will NOT be able to change it if you lose it." = "请安全地保存密码,如果您丢失了密码,您将无法更改它。"; + +/* server test error */ +"Possibly, certificate fingerprint in server address is incorrect" = "服务器地址中的证书指纹可能不正确"; + +/* No comment provided by engineer. */ +"Preserve the last message draft, with attachments." = "保留最后的消息草稿及其附件。"; + +/* No comment provided by engineer. */ +"Preset server" = "预设服务器"; + +/* No comment provided by engineer. */ +"Preset server address" = "预设服务器地址"; + +/* No comment provided by engineer. */ +"Privacy & security" = "隐私和安全"; + +/* No comment provided by engineer. */ +"Privacy redefined" = "重新定义隐私"; + +/* No comment provided by engineer. */ +"Private filenames" = "私密文件名"; + +/* No comment provided by engineer. */ +"Profile and server connections" = "资料和服务器连接"; + +/* No comment provided by engineer. */ +"Profile image" = "资料图片"; + +/* No comment provided by engineer. */ +"Prohibit irreversible message deletion." = "禁止不可撤回消息删除。"; + +/* No comment provided by engineer. */ +"Prohibit sending direct messages to members." = "禁止直接向成员发送私信。"; + +/* No comment provided by engineer. */ +"Prohibit sending disappearing messages." = "禁止发送限时消息。"; + +/* No comment provided by engineer. */ +"Prohibit sending voice messages." = "禁止发送语音消息。"; + +/* No comment provided by engineer. */ +"Protect app screen" = "保护应用程序屏幕"; + +/* No comment provided by engineer. */ +"Protocol timeout" = "协议超时"; + +/* No comment provided by engineer. */ +"Push notifications" = "推送通知"; + +/* No comment provided by engineer. */ +"Rate the app" = "评价此应用程序"; + +/* No comment provided by engineer. */ +"Read" = "已读"; + +/* No comment provided by engineer. */ +"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "在我们的 [GitHub 仓库](https://github.com/simplex-chat/simplex-chat#readme) 中阅读更多信息。"; + +/* No comment provided by engineer. */ +"Read more in our GitHub repository." = "在我们的 GitHub 仓库中阅读更多内容。"; + +/* No comment provided by engineer. */ +"received answer…" = "已收到回复……"; + +/* No comment provided by engineer. */ +"received confirmation…" = "已受到确认……"; + +/* notification */ +"Received file event" = "收到文件项目"; + +/* No comment provided by engineer. */ +"Receiving via" = "接收通过"; + +/* No comment provided by engineer. */ +"Recipients see updates as you type them." = "对方会在您键入时看到更新。"; + +/* No comment provided by engineer. */ +"Reduced battery usage" = "减少电池使用量"; + +/* reject incoming call via notification */ +"Reject" = "拒绝"; + +/* No comment provided by engineer. */ +"Reject contact (sender NOT notified)" = "拒绝联系人(发送者不会被通知)"; + +/* No comment provided by engineer. */ +"Reject contact request" = "拒绝联系人请求"; + +/* call status */ +"rejected call" = "拒接来电"; + +/* No comment provided by engineer. */ +"Relay server is only used if necessary. Another party can observe your IP address." = "中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。"; + +/* No comment provided by engineer. */ +"Relay server protects your IP address, but it can observe the duration of the call." = "中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。"; + +/* No comment provided by engineer. */ +"Remove" = "移除"; + +/* No comment provided by engineer. */ +"Remove member" = "删除成员"; + +/* No comment provided by engineer. */ +"Remove member?" = "删除成员吗?"; + +/* No comment provided by engineer. */ +"Remove passphrase from keychain?" = "从钥匙串中删除密码?"; + +/* No comment provided by engineer. */ +"removed" = "已删除"; + +/* rcv group event chat item */ +"removed %@" = "已删除 %@"; + +/* rcv group event chat item */ +"removed you" = "已将您移除"; + +/* chat item action */ +"Reply" = "回复"; + +/* No comment provided by engineer. */ +"Required" = "必要"; + +/* No comment provided by engineer. */ +"Reset" = "重置"; + +/* No comment provided by engineer. */ +"Reset colors" = "重置颜色"; + +/* No comment provided by engineer. */ +"Reset to defaults" = "重置为默认"; + +/* No comment provided by engineer. */ +"Restart the app to create a new chat profile" = "重新启动应用程序以创建新的聊天资料"; + +/* No comment provided by engineer. */ +"Restart the app to use imported chat database" = "重启应用以使用导入的聊天数据库"; + +/* No comment provided by engineer. */ +"Restore" = "恢复"; + +/* No comment provided by engineer. */ +"Restore database backup" = "恢复数据库备份"; + +/* No comment provided by engineer. */ +"Restore database backup?" = "恢复数据库备份?"; + +/* No comment provided by engineer. */ +"Restore database error" = "恢复数据库错误"; + +/* chat item action */ +"Reveal" = "揭示"; + +/* No comment provided by engineer. */ +"Revert" = "恢复"; + +/* No comment provided by engineer. */ +"Role" = "角色"; + +/* No comment provided by engineer. */ +"Run chat" = "运行聊天程序"; + +/* chat item action */ +"Save" = "保存"; + +/* No comment provided by engineer. */ +"Save (and notify contacts)" = "保存(并通知联系人)"; + +/* No comment provided by engineer. */ +"Save and notify contact" = "保存并通知联系人"; + +/* No comment provided by engineer. */ +"Save and notify group members" = "保存并通知群组成员"; + +/* No comment provided by engineer. */ +"Save archive" = "保存存档"; + +/* No comment provided by engineer. */ +"Save group profile" = "保存群组资料"; + +/* No comment provided by engineer. */ +"Save passphrase and open chat" = "保存密码并打开聊天"; + +/* No comment provided by engineer. */ +"Save passphrase in Keychain" = "在钥匙串中保存密码"; + +/* No comment provided by engineer. */ +"Save preferences?" = "保存偏好设置?"; + +/* No comment provided by engineer. */ +"Save servers" = "保存服务器"; + +/* No comment provided by engineer. */ +"Saved WebRTC ICE servers will be removed" = "已保存的WebRTC ICE服务器将被删除"; + +/* No comment provided by engineer. */ +"Scan code" = "扫码"; + +/* No comment provided by engineer. */ +"Scan QR code" = "扫描二维码"; + +/* No comment provided by engineer. */ +"Scan security code from your contact's app." = "从您联系人的应用程序中扫描安全码。"; + +/* No comment provided by engineer. */ +"Scan server QR code" = "扫描服务器二维码"; + +/* No comment provided by engineer. */ +"Search" = "搜索"; + +/* network option */ +"sec" = "秒"; + +/* No comment provided by engineer. */ +"secret" = "秘密"; + +/* server test step */ +"Secure queue" = "保护队列"; + +/* No comment provided by engineer. */ +"Security assessment" = "安全评估"; + +/* No comment provided by engineer. */ +"Security code" = "安全码"; + +/* No comment provided by engineer. */ +"Send" = "发送"; + +/* No comment provided by engineer. */ +"Send a live message - it will update for the recipient(s) as you type it" = "发送实时消息——它会在您键入时为收件人更新"; + +/* No comment provided by engineer. */ +"Send direct message" = "发送私信"; + +/* No comment provided by engineer. */ +"Send link previews" = "发送链接预览"; + +/* No comment provided by engineer. */ +"Send live message" = "发送实时消息"; + +/* No comment provided by engineer. */ +"Send notifications" = "发送通知"; + +/* No comment provided by engineer. */ +"Send notifications:" = "发送通知:"; + +/* No comment provided by engineer. */ +"Send questions and ideas" = "发送问题和想法"; + +/* No comment provided by engineer. */ +"Send them from gallery or custom keyboards." = "发送它们来自图库或自定义键盘。"; + +/* No comment provided by engineer. */ +"Sender cancelled file transfer." = "发送人已取消文件传输。"; + +/* No comment provided by engineer. */ +"Sender may have deleted the connection request." = "发送人可能已删除连接请求。"; + +/* No comment provided by engineer. */ +"Sending via" = "发送通过"; + +/* notification */ +"Sent file event" = "已发送文件项目"; + +/* No comment provided by engineer. */ +"Sent messages will be deleted after set time." = "已发送的消息将在设定的时间后被删除。"; + +/* server test error */ +"Server requires authorization to create queues, check password" = "服务器需要授权才能创建队列,检查密码"; + +/* No comment provided by engineer. */ +"Server test failed!" = "服务器测试失败!"; + +/* No comment provided by engineer. */ +"Servers" = "服务器"; + +/* No comment provided by engineer. */ +"Set 1 day" = "设定1天"; + +/* No comment provided by engineer. */ +"Set contact name…" = "设置联系人姓名……"; + +/* No comment provided by engineer. */ +"Set group preferences" = "设置群组偏好设置"; + +/* No comment provided by engineer. */ +"Set passphrase to export" = "设置密码来导出"; + +/* No comment provided by engineer. */ +"Set timeouts for proxy/VPN" = "设置代理/VPN的超时时间"; + +/* No comment provided by engineer. */ +"Settings" = "设置"; + +/* chat item action */ +"Share" = "分享"; + +/* No comment provided by engineer. */ +"Share invitation link" = "分享邀请链接"; + +/* No comment provided by engineer. */ +"Share link" = "分享链接"; + +/* No comment provided by engineer. */ +"Share one-time invitation link" = "分享一次性邀请链接"; + +/* No comment provided by engineer. */ +"Show calls in phone history" = "在电话历史记录中显示通话"; + +/* No comment provided by engineer. */ +"Show preview" = "显示预览"; + +/* No comment provided by engineer. */ +"Show QR code" = "显示二维码"; + +/* No comment provided by engineer. */ +"SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)." = "SimpleX Chat 的安全性 [由 Trail of Bits 审核](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)。"; + +/* simplex link type */ +"SimpleX contact address" = "SimpleX 联系地址"; + +/* notification */ +"SimpleX encrypted message or connection event" = "SimpleX 加密消息或连接项目"; + +/* simplex link type */ +"SimpleX group link" = "SimpleX 群组链接"; + +/* No comment provided by engineer. */ +"SimpleX links" = "SimpleX 链接"; + +/* No comment provided by engineer. */ +"SimpleX Lock" = "SimpleX 锁定"; + +/* No comment provided by engineer. */ +"SimpleX Lock turned on" = "已开启 SimpleX 锁定"; + +/* simplex link type */ +"SimpleX one-time invitation" = "SimpleX 一次性邀请"; + +/* No comment provided by engineer. */ +"Skip" = "跳过"; + +/* No comment provided by engineer. */ +"Skipped messages" = "已跳过消息"; + +/* No comment provided by engineer. */ +"SMP servers" = "SMP 服务器"; + +/* notification title */ +"Somebody" = "某人"; + +/* No comment provided by engineer. */ +"Start a new chat" = "开始新聊天"; + +/* No comment provided by engineer. */ +"Start chat" = "开始聊天"; + +/* No comment provided by engineer. */ +"Start migration" = "开始迁移"; + +/* No comment provided by engineer. */ +"starting…" = "启动中……"; + +/* No comment provided by engineer. */ +"Stop" = "停止"; + +/* No comment provided by engineer. */ +"Stop chat to enable database actions" = "停止聊天以启用数据库操作"; + +/* No comment provided by engineer. */ +"Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped." = "停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。"; + +/* No comment provided by engineer. */ +"Stop chat?" = "停止聊天程序?"; + +/* authentication reason */ +"Stop SimpleX" = "停止 SimpleX"; + +/* No comment provided by engineer. */ +"strike" = "删去"; + +/* No comment provided by engineer. */ +"Support SimpleX Chat" = "支持 SimpleX Chat"; + +/* No comment provided by engineer. */ +"System" = "系统"; + +/* No comment provided by engineer. */ +"Take picture" = "拍照"; + +/* No comment provided by engineer. */ +"Tap button " = "点击按钮 "; + +/* No comment provided by engineer. */ +"Tap to join" = "点击加入"; + +/* No comment provided by engineer. */ +"Tap to join incognito" = "点击以加入隐身聊天"; + +/* No comment provided by engineer. */ +"Tap to start a new chat" = "点击开始一个新聊天"; + +/* No comment provided by engineer. */ +"TCP connection timeout" = "TCP 连接超时"; + +/* No comment provided by engineer. */ +"TCP_KEEPCNT" = "TCP_KEEPCNT"; + +/* No comment provided by engineer. */ +"TCP_KEEPIDLE" = "TCP_KEEPIDLE"; + +/* No comment provided by engineer. */ +"TCP_KEEPINTVL" = "TCP_KEEPINTVL"; + +/* server test failure */ +"Test failed at step %@." = "在步骤 %@ 上测试失败。"; + +/* No comment provided by engineer. */ +"Test server" = "测试服务器"; + +/* No comment provided by engineer. */ +"Test servers" = "测试服务器"; + +/* No comment provided by engineer. */ +"Tests failed!" = "测试失败!"; + +/* No comment provided by engineer. */ +"Thank you for installing SimpleX Chat!" = "感谢您安装 SimpleX Chat!"; + +/* No comment provided by engineer. */ +"Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "感谢用户——[通过 Weblate 贡献](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!"; + +/* No comment provided by engineer. */ +"Thanks to the users – contribute via Weblate!" = "感谢用户——通过 Weblate 做出贡献!"; + +/* No comment provided by engineer. */ +"The 1st platform without any user identifiers – private by design." = "第一个没有任何用户标识符的平台 - 隐私设计."; + +/* No comment provided by engineer. */ +"The app can notify you when you receive messages or contact requests - please open settings to enable." = "该应用可以在您收到消息或联系人请求时通知您——请打开设置以启用通知。"; + +/* No comment provided by engineer. */ +"The attempt to change database passphrase was not completed." = "更改数据库密码的尝试未完成。"; + +/* No comment provided by engineer. */ +"The connection you accepted will be cancelled!" = "您接受的连接将被取消!"; + +/* No comment provided by engineer. */ +"The contact you shared this link with will NOT be able to connect!" = "您与之共享此链接的联系人将无法连接!"; + +/* No comment provided by engineer. */ +"The created archive is available via app Settings / Database / Old database archive." = "创建的归档文件可以通过应用设置/数据库/旧数据库归档访问。"; + +/* No comment provided by engineer. */ +"The group is fully decentralized – it is visible only to the members." = "该小组是完全分散式的——它只对成员可见。"; + +/* No comment provided by engineer. */ +"The message will be deleted for all members." = "将为所有成员删除该消息。"; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "该消息将对所有成员显示为已审核。"; + +/* No comment provided by engineer. */ +"The next generation of private messaging" = "下一代私密通讯软件"; + +/* No comment provided by engineer. */ +"The old database was not removed during the migration, it can be deleted." = "旧数据库在迁移过程中没有被移除,可以删除。"; + +/* No comment provided by engineer. */ +"The profile is only shared with your contacts." = "该资料仅与您的联系人共享。"; + +/* No comment provided by engineer. */ +"The sender will NOT be notified" = "发送者将不会收到通知"; + +/* No comment provided by engineer. */ +"The servers for new connections of your current chat profile **%@**." = "您当前聊天资料 **%@** 的新连接服务器。"; + +/* No comment provided by engineer. */ +"Theme" = "主题"; + +/* No comment provided by engineer. */ +"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。"; + +/* No comment provided by engineer. */ +"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "此操作无法撤消——早于所选的发送和接收的消息将被删除。 这可能需要几分钟时间。"; + +/* No comment provided by engineer. */ +"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。"; + +/* notification title */ +"this contact" = "这个联系人"; + +/* No comment provided by engineer. */ +"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。"; + +/* No comment provided by engineer. */ +"This group no longer exists." = "该群组已不存在。"; + +/* No comment provided by engineer. */ +"This setting applies to messages in your current chat profile **%@**." = "此设置适用于您当前聊天资料 **%@** 中的消息。"; + +/* No comment provided by engineer. */ +"To ask any questions and to receive updates:" = "要提出任何问题并接收更新,请:"; + +/* No comment provided by engineer. */ +"To find the profile used for an incognito connection, tap the contact or group name on top of the chat." = "要查找用于隐身聊天连接的资料,点击聊天顶部的联系人或群组名。"; + +/* No comment provided by engineer. */ +"To make a new connection" = "建立新连接"; + +/* No comment provided by engineer. */ +"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "为了保护隐私,SimpleX使用针对消息队列的标识符,而不是所有其他平台使用的用户ID,每个联系人都有独立的标识符。"; + +/* No comment provided by engineer. */ +"To protect timezone, image/voice files use UTC." = "为了保护时区,图像/语音文件使用 UTC。"; + +/* No comment provided by engineer. */ +"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "为保护您的信息,请打开 SimpleX 锁定。\n在启用此功能之前,系统将提示您完成身份验证。"; + +/* No comment provided by engineer. */ +"To record voice message please grant permission to use Microphone." = "请授权使用麦克风以录制语音消息。"; + +/* No comment provided by engineer. */ +"To support instant push notifications the chat database has to be migrated." = "为了支持即时推送通知,聊天数据库必须被迁移。"; + +/* No comment provided by engineer. */ +"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。"; + +/* No comment provided by engineer. */ +"Transport isolation" = "传输隔离"; + +/* No comment provided by engineer. */ +"Trying to connect to the server used to receive messages from this contact (error: %@)." = "正在尝试连接到用于从该联系人接收消息的服务器(错误:%@)。"; + +/* No comment provided by engineer. */ +"Trying to connect to the server used to receive messages from this contact." = "正在尝试连接到用于从该联系人接收消息的服务器。"; + +/* No comment provided by engineer. */ +"Turn off" = "关掉"; + +/* No comment provided by engineer. */ +"Turn off notifications?" = "关闭通知?"; + +/* No comment provided by engineer. */ +"Turn on" = "打开"; + +/* No comment provided by engineer. */ +"Unable to record voice message" = "无法录制语音消息"; + +/* No comment provided by engineer. */ +"Unexpected error: %@" = "意外错误: %@"; + +/* No comment provided by engineer. */ +"Unexpected migration state" = "未预料的迁移状态"; + +/* connection info */ +"unknown" = "未知"; + +/* callkit banner */ +"Unknown caller" = "未知来电者"; + +/* No comment provided by engineer. */ +"Unknown database error: %@" = "未知数据库错误:%@"; + +/* No comment provided by engineer. */ +"Unknown error" = "未知错误"; + +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "除非您使用 iOS 通话界面,否则请启用请勿打扰模式以避免打扰。"; + +/* No comment provided by engineer. */ +"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。\n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。"; + +/* authentication reason */ +"Unlock" = "解锁"; + +/* No comment provided by engineer. */ +"Unmute" = "取消静音"; + +/* No comment provided by engineer. */ +"Unread" = "未读"; + +/* No comment provided by engineer. */ +"Update" = "更新"; + +/* No comment provided by engineer. */ +"Update .onion hosts setting?" = "更新 .onion 主机设置?"; + +/* No comment provided by engineer. */ +"Update database passphrase" = "更新数据库密码"; + +/* No comment provided by engineer. */ +"Update network settings?" = "更新网络设置?"; + +/* No comment provided by engineer. */ +"Update transport isolation mode?" = "更新传输隔离模式?"; + +/* rcv group event chat item */ +"updated group profile" = "已更新的群组资料"; + +/* No comment provided by engineer. */ +"Updating settings will re-connect the client to all servers." = "更新设置会将客户端重新连接到所有服务器。"; + +/* No comment provided by engineer. */ +"Updating this setting will re-connect the client to all servers." = "更新此设置将重新连接客户端到所有服务器。"; + +/* No comment provided by engineer. */ +"Use .onion hosts" = "使用 .onion 主机"; + +/* No comment provided by engineer. */ +"Use chat" = "使用聊天"; + +/* No comment provided by engineer. */ +"Use for new connections" = "用于新连接"; + +/* No comment provided by engineer. */ +"Use iOS call interface" = "使用 iOS 通话界面"; + +/* No comment provided by engineer. */ +"Use server" = "使用服务器"; + +/* No comment provided by engineer. */ +"Use SimpleX Chat servers?" = "使用 SimpleX Chat 服务器?"; + +/* No comment provided by engineer. */ +"User profile" = "用户资料"; + +/* No comment provided by engineer. */ +"Using .onion hosts requires compatible VPN provider." = "使用 .onion 主机需要兼容的 VPN 提供商。"; + +/* No comment provided by engineer. */ +"Using SimpleX Chat servers." = "使用 SimpleX Chat 服务器。"; + +/* No comment provided by engineer. */ +"v%@ (%@)" = "v%@ (%@)"; + +/* No comment provided by engineer. */ +"Verify connection security" = "验证连接安全"; + +/* No comment provided by engineer. */ +"Verify security code" = "验证安全码"; + +/* No comment provided by engineer. */ +"Via browser" = "通过浏览器"; + +/* chat list item description */ +"via contact address link" = "通过联系地址链接"; + +/* chat list item description */ +"via group link" = "通过群组链接"; + +/* chat list item description */ +"via one-time link" = "通过一次性链接"; + +/* No comment provided by engineer. */ +"via relay" = "通过中继"; + +/* No comment provided by engineer. */ +"Video call" = "视频通话"; + +/* No comment provided by engineer. */ +"video call (not e2e encrypted)" = "视频通话(非端到端加密)"; + +/* No comment provided by engineer. */ +"View security code" = "查看安全码"; + +/* No comment provided by engineer. */ +"Voice message…" = "语音消息……"; + +/* chat feature */ +"Voice messages" = "语音消息"; + +/* No comment provided by engineer. */ +"Voice messages are prohibited in this chat." = "语音信息在此聊天中被禁止。"; + +/* No comment provided by engineer. */ +"Voice messages are prohibited in this group." = "语音信息在该群组中被禁用。"; + +/* No comment provided by engineer. */ +"Voice messages prohibited!" = "语音消息禁止发送!"; + +/* No comment provided by engineer. */ +"waiting for answer…" = "等待答复中……"; + +/* No comment provided by engineer. */ +"waiting for confirmation…" = "等待确认中……"; + +/* No comment provided by engineer. */ +"Waiting for file" = "等待文件中"; + +/* No comment provided by engineer. */ +"Waiting for image" = "等待图像中"; + +/* No comment provided by engineer. */ +"wants to connect to you!" = "想要与您连接!"; + +/* No comment provided by engineer. */ +"WebRTC ICE servers" = "WebRTC ICE 服务器"; + +/* No comment provided by engineer. */ +"Welcome %@!" = "欢迎%@!"; + +/* No comment provided by engineer. */ +"Welcome message" = "欢迎信息"; + +/* No comment provided by engineer. */ +"What's new" = "更新内容"; + +/* No comment provided by engineer. */ +"When available" = "当可用时"; + +/* No comment provided by engineer. */ +"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。"; + +/* No comment provided by engineer. */ +"With optional welcome message." = "带有可选的欢迎消息。"; + +/* No comment provided by engineer. */ +"Wrong database passphrase" = "数据库密码错误"; + +/* No comment provided by engineer. */ +"Wrong passphrase!" = "密码错误!"; + +/* pref value */ +"yes" = "是"; + +/* No comment provided by engineer. */ +"You" = "您"; + +/* No comment provided by engineer. */ +"You accepted connection" = "您已接受连接"; + +/* No comment provided by engineer. */ +"You allow" = "您允许"; + +/* No comment provided by engineer. */ +"You already have a chat profile with the same display name. Please choose another name." = "您已经有一个显示名相同的聊天资料。请选择另一个名字。"; + +/* No comment provided by engineer. */ +"You are already connected to %@." = "您已经连接到 %@。"; + +/* No comment provided by engineer. */ +"You are connected to the server used to receive messages from this contact." = "您已连接到用于接收该联系人消息的服务器。"; + +/* No comment provided by engineer. */ +"you are invited to group" = "您被邀请加入群组"; + +/* No comment provided by engineer. */ +"You are invited to group" = "您被邀请加入群组"; + +/* No comment provided by engineer. */ +"you are observer" = "您是观察者"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "您可以从锁屏上接听电话,无需设备和应用程序的认证。"; + +/* No comment provided by engineer. */ +"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "您也可以通过点击链接进行连接。如果在浏览器中打开,请点击“在移动应用程序中打开”按钮。"; + +/* notification body */ +"You can now send messages to %@" = "您现在可以给 %@ 发送消息"; + +/* No comment provided by engineer. */ +"You can set lock screen notification preview via settings." = "您可以通过设置来设置锁屏通知预览。"; + +/* No comment provided by engineer. */ +"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." = "您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。"; + +/* No comment provided by engineer. */ +"You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it." = "您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 如果您以后删除它,您不会丢失您的联系人。"; + +/* No comment provided by engineer. */ +"You can start chat via app Settings / Database or by restarting the app" = "您可以通过应用程序设置/数据库或重新启动应用程序开始聊天"; + +/* No comment provided by engineer. */ +"You can use markdown to format messages:" = "您可以使用 markdown 来编排消息格式:"; + +/* No comment provided by engineer. */ +"You can't send messages!" = "您无法发送消息!"; + +/* chat item text */ +"you changed address" = "您已更改地址"; + +/* chat item text */ +"you changed address for %@" = "您已更改 %@ 的地址"; + +/* snd group event chat item */ +"you changed role for yourself to %@" = "您已将自己的角色更改为 %@"; + +/* snd group event chat item */ +"you changed role of %@ to %@" = "您已将 %1$@ 的角色更改为 %2$@"; + +/* No comment provided by engineer. */ +"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "您可以控制接收信息使用的服务器,您的联系人则使用您发送信息时所使用的服务器。"; + +/* No comment provided by engineer. */ +"You could not be verified; please try again." = "您的身份无法验证,请再试一次。"; + +/* No comment provided by engineer. */ +"You have no chats" = "您没有聊天记录"; + +/* No comment provided by engineer. */ +"You have to enter passphrase every time the app starts - it is not stored on the device." = "您必须在每次应用程序启动时输入密码——它不存储在设备上。"; + +/* No comment provided by engineer. */ +"You invited your contact" = "您邀请了您的联系人"; + +/* No comment provided by engineer. */ +"You joined this group" = "您已加入此群组"; + +/* No comment provided by engineer. */ +"You joined this group. Connecting to inviting group member." = "你加入了这个群组。连接到邀请组成员。"; + +/* snd group event chat item */ +"you left" = "您已离开"; + +/* No comment provided by engineer. */ +"You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." = "您只能在一台设备上使用最新版本的聊天数据库,否则您可能会停止接收来自某些联系人的消息。"; + +/* No comment provided by engineer. */ +"You need to allow your contact to send voice messages to be able to send them." = "您需要允许您的联系人发送语音消息,以便您能够发送语音消息。"; + +/* No comment provided by engineer. */ +"You rejected group invitation" = "您拒绝了群组邀请"; + +/* snd group event chat item */ +"you removed %@" = "您已移除 %@"; + +/* No comment provided by engineer. */ +"You sent group invitation" = "您发送了群组邀请"; + +/* chat list item description */ +"you shared one-time link" = "您分享了一次性链接"; + +/* chat list item description */ +"you shared one-time link incognito" = "您分享了一次性链接隐身聊天"; + +/* No comment provided by engineer. */ +"You will be connected to group when the group host's device is online, please wait or check later!" = "您将在组主设备上线时连接到该群组,请稍等或稍后再检查!"; + +/* No comment provided by engineer. */ +"You will be connected when your connection request is accepted, please wait or check later!" = "当您的连接请求被接受后,您将可以连接,请稍等或稍后检查!"; + +/* No comment provided by engineer. */ +"You will be connected when your contact's device is online, please wait or check later!" = "当您的联系人设备在线时,您将可以连接,请稍等或稍后查看!"; + +/* No comment provided by engineer. */ +"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。"; + +/* No comment provided by engineer. */ +"You will join a group this link refers to and connect to its group members." = "您将加入此链接指向的群组并连接到其群组成员。"; + +/* No comment provided by engineer. */ +"You will stop receiving messages from this group. Chat history will be preserved." = "您将停止接收来自该群组的消息。聊天记录将被保留。"; + +/* No comment provided by engineer. */ +"you: " = "您: "; + +/* No comment provided by engineer. */ +"You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" = "您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组"; + +/* No comment provided by engineer. */ +"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人"; + +/* No comment provided by engineer. */ +"Your calls" = "您的通话"; + +/* No comment provided by engineer. */ +"Your chat database" = "您的聊天数据库"; + +/* No comment provided by engineer. */ +"Your chat database is not encrypted - set passphrase to encrypt it." = "您的聊天数据库未加密——设置密码来加密。"; + +/* No comment provided by engineer. */ +"Your chat profile will be sent to group members" = "您的聊天资料将被发送给群组成员"; + +/* No comment provided by engineer. */ +"Your chat profile will be sent to your contact" = "您的聊天资料将被发送给您的联系人"; + +/* No comment provided by engineer. */ +"Your chat profiles" = "您的聊天资料"; + +/* No comment provided by engineer. */ +"Your chats" = "您的聊天"; + +/* No comment provided by engineer. */ +"Your contact address" = "您的联系人地址"; + +/* No comment provided by engineer. */ +"Your contact can scan it from the app." = "您的联系人可以通过应用程序扫描它。"; + +/* No comment provided by engineer. */ +"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "您的联系人需要在线才能完成连接。\n您可以取消此连接并删除联系人(然后尝试使用新链接)。"; + +/* No comment provided by engineer. */ +"Your contact sent a file that is larger than currently supported maximum size (%@)." = "您的联系人发送的文件大于当前支持的最大大小 (%@)。"; + +/* No comment provided by engineer. */ +"Your contacts can allow full message deletion." = "您的联系人可以允许完全删除消息。"; + +/* No comment provided by engineer. */ +"Your current chat database will be DELETED and REPLACED with the imported one." = "您当前的聊天数据库将被删除并替换为导入的数据库。"; + +/* No comment provided by engineer. */ +"Your current profile" = "您当前的资料"; + +/* No comment provided by engineer. */ +"Your ICE servers" = "您的 ICE 服务器"; + +/* No comment provided by engineer. */ +"Your preferences" = "您的偏好设置"; + +/* No comment provided by engineer. */ +"Your privacy" = "您的隐私设置"; + +/* No comment provided by engineer. */ +"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "您的资料存储在您的设备上并仅与您的联系人共享。\nSimpleX 服务器无法看到您的资料。"; + +/* No comment provided by engineer. */ +"Your profile will be sent to the contact that you received this link from" = "您的个人资料将发送给您收到此链接的联系人"; + +/* No comment provided by engineer. */ +"Your profile, contacts and delivered messages are stored on your device." = "您的资料、联系人和发送的消息存储在您的设备上。"; + +/* No comment provided by engineer. */ +"Your random profile" = "您的随机资料"; + +/* No comment provided by engineer. */ +"Your server" = "您的服务器"; + +/* No comment provided by engineer. */ +"Your server address" = "您的服务器地址"; + +/* No comment provided by engineer. */ +"Your settings" = "您的设置"; + +/* No comment provided by engineer. */ +"Your SimpleX contact address" = "您的 SimpleX 联系人地址"; + +/* No comment provided by engineer. */ +"Your SMP servers" = "您的 SMP 服务器"; + diff --git a/apps/ios/zh-Hans.lproj/SimpleX--iOS--InfoPlist.strings b/apps/ios/zh-Hans.lproj/SimpleX--iOS--InfoPlist.strings new file mode 100644 index 000000000..b3192851c --- /dev/null +++ b/apps/ios/zh-Hans.lproj/SimpleX--iOS--InfoPlist.strings @@ -0,0 +1,15 @@ +/* Bundle name */ +"CFBundleName" = "SimpleX"; + +/* Privacy - Camera Usage Description */ +"NSCameraUsageDescription" = "SimpleX 需要摄像头访问权限才能扫描二维码以连接到其他用户和进行视频通话。"; + +/* Privacy - Face ID Usage Description */ +"NSFaceIDUsageDescription" = "SimpleX 使用Face ID进行本地身份验证"; + +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "SimpleX 需要麦克风访问权限才能进行音频和视频通话,以及录制语音消息。"; + +/* Privacy - Photo Library Additions Usage Description */ +"NSPhotoLibraryAddUsageDescription" = "SimpleX 需要访问照片库以保存已拍摄和接收的媒体"; + diff --git a/docs/ANDROID.md b/docs/ANDROID.md index 58461fa9a..ec62d3a1d 100644 --- a/docs/ANDROID.md +++ b/docs/ANDROID.md @@ -1,3 +1,5 @@ +| Updated 07.02.2023 | Languages: EN, [CZ](/docs/lang/cs/ANDROID.md) | + # Accessing files in Android app SimpleX uses databases and stores its preferences inside private data directory in Android. The directory contains: @@ -36,4 +38,4 @@ Now the backed-up files will be inside `./apps/chat.simplex.app/`. Please, note, that if you use a modern version of SimpleX, the databases will be encrypted, and you'll not be able to view contents of them without using `sqlcipher` application and without knowing decryption passphrase (you need to change it to yours from randomly generated in the app firstly). -Please, follow [SQL.md](./SQL.md) guide for more info of how to decrypt your databases and to make queries to them. \ No newline at end of file +Please, follow [SQL.md](./SQL.md) guide for more info of how to decrypt your databases and to make queries to them. diff --git a/docs/CLI.md b/docs/CLI.md index b28ce3a53..52a5f0147 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -1,4 +1,4 @@ -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CLI.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CLI.md), [CZ](/docs/lang/cs/CLI.md) | # SimpleX Chat terminal (console) app for Linux/MacOS/Windows diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 82c8b1dd1..2694396b6 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,4 +1,4 @@ -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CONTRIBUTING.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md) | # Contributing guide diff --git a/docs/SERVER.md b/docs/SERVER.md index dc18a76f4..5c53e9add 100644 --- a/docs/SERVER.md +++ b/docs/SERVER.md @@ -1,4 +1,4 @@ -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/SERVER.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/SERVER.md), [CZ](/docs/lang/cs/SERVER.md) | # Hosting your own SMP Server diff --git a/docs/SIMPLEX.md b/docs/SIMPLEX.md index 3bab582d0..c00adafd2 100644 --- a/docs/SIMPLEX.md +++ b/docs/SIMPLEX.md @@ -1,5 +1,4 @@ -| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/SIMPLEX.md) | - +| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/SIMPLEX.md), [CZ](/docs/lang/cs/SIMPLEX.md) | # SimpleX platform - motivation and comparison ## Problems diff --git a/docs/SQL.md b/docs/SQL.md index 4958c20f2..d320e3604 100644 --- a/docs/SQL.md +++ b/docs/SQL.md @@ -1,4 +1,4 @@ -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/SQL.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/SQL.md), [CZ](/docs/lang/cs/SQL.md) | # Accessing messages in the database diff --git a/docs/TRANSLATIONS.md b/docs/TRANSLATIONS.md index f6b125696..4071bdc98 100644 --- a/docs/TRANSLATIONS.md +++ b/docs/TRANSLATIONS.md @@ -1,3 +1,5 @@ +| Updated 07.02.2023 | Languages: EN, [CZ](/docs/lang/cs/TRANSLATIONS.md) | + # Contributing translations to SimpleX Chat Huge thanks for your interest in translating SimpleX Chat - it helps a lot to make it accessible to a wider range of users, and we really appreciate your help. @@ -10,7 +12,7 @@ This document is created to speed up this process, and share some important "got 1. Create an account in Weblate, using the same email that you use in GitHub - it will make your contributions associated with your GitHub account, and might help you in some cases. Once translation is released to the users we will add your account name to the [list of translators](https://github.com/simplex-chat/simplex-chat#translate-the-apps). -2. Before you start the translation there is a simple contributor agreement to sign via Weblate - this is to avoid any conflicts around IP rights. +2. Before you start the translation there is a simple contributor license agreement to sign via Weblate - this is to avoid any conflicts around IP rights. The copy of this agreement is also [available here](https://github.com/simplex-chat/cla/blob/master/CLA.md). 3. We can also add you to the group of translators for any questions and updates - please connect to me via chat. @@ -43,13 +45,21 @@ We will then: *Please note*: we aim to keep app functions consistent between Android and iOS platforms, when possible, so we will release and announce a new language once both platforms have been translated. It doesn't mean you have to do it, but we will have to wait until somebody else translates the second platform. But if you start from Android, iOS usually takes 3-4x less time to add. +## How we review the translations + +To validate the correctness of the translations we review reverse translations by browsing Weblate pages in Google Chrome browser in "Translate to English" mode. E.g., to review the German translations of Android interface somebody from our team scrolled through [these 49 pages](https://hosted.weblate.org/browse/simplex-chat/android/de/). + +We are not looking for reverse translation being exactly the same as the original, it is rarely the case, only that it is generally correct. + +You would make the review much easier if you could review it in advance in the same way, and comment on any cases where reverse translations are completely different (there may be valid cases for that). + ## What is next 1. As we update the app, we post the updates in the group of translators. You are absolutely under no obligation to translate these additional strings. We hugely appreciate if you do though, as it makes the users experience so much better when they depend on your translations, than if some new part of the app is not translated. -2. You can also help adoption in your country / language group by translating our documents - we have just started it - and also our website content. There have been many requests to do it and we are currently adding the translation framework for the website. +2. You can further help SimpleX adoption in your country / language group by translating [our website](https://simplex.chat) (also [via weblate](https://hosted.weblate.org/projects/simplex-chat/website/)) and/or [GitHub documents](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang) (this is only possible via git)! -3. Also, if you want to be a moderator/admin of the users group in your language, once the app is translated we can host such group - we are preparing community guidelines and adding some moderation tools to the app to be released in v5 in March. +3. Also, if you want to be a moderator/admin of the users group in your language, once the app is translated we can host such group - we are preparing community guidelines and adding some moderation tools to the app to be released in v4.6 in March. Thank you very much again for helping us grow SimpleX Chat! diff --git a/docs/WEBRTC.md b/docs/WEBRTC.md index 0515ed875..850a28834 100644 --- a/docs/WEBRTC.md +++ b/docs/WEBRTC.md @@ -1,4 +1,4 @@ -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/WEBRTC.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/WEBRTC.md), [CZ](/docs/lang/cs/WEBRTC.md) | # Using custom WebRTC ICE servers in SimpleX Chat diff --git a/docs/lang/cs/ANDROID.md b/docs/lang/cs/ANDROID.md new file mode 100644 index 000000000..c0fb859ca --- /dev/null +++ b/docs/lang/cs/ANDROID.md @@ -0,0 +1,41 @@ +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/ANDROID.md) | + +# Přístup k souborům v aplikaci Android + +SimpleX používá databáze a ukládá své předvolby do soukromého datového adresáře v systému Android. Adresář obsahuje: +- Databáze +- odeslané a přijaté soubory +- dočasné soubory, které budou smazány, když nebudou potřeba +- uživatelské předvolby. + + +Pokud chcete zobrazit, co je uloženo v datovém adresáři SimpleX, musíte mít: +- Unixový operační systém (nebo [MinGW](https://www.mingw-w64.org/downloads/) na Windows). +- Nástroj ADB (Android Debug Bridge) nainstalovaný v počítači ([stáhněte si jej zde](https://developer.android.com/studio/releases/platform-tools) a nainstalujte). +- zařízení připojené přes USB nebo Wi-Fi k počítači. + +## Postup: +- Otevřete SimpleX, přejděte na `Databáze passphrase & export`, povolte `Zálohování dat aplikace`. Tím se zprovozní další kroky +- _Volitelné_: pokud chcete zobrazit obsah databáze, změňte přístupovou frázi databáze z náhodné na svou. Chcete-li to provést, zastavte chat na obrazovce `Database passphrase & export`, otevřete `Database passphrase`, zadejte novou passphrase a potvrďte ji, poté ji aktualizujte. Nezapomeňte ji, jinak přijdete o všechna svá data v případě, že bude passphrase později znovu požadována. +- otevřete emulátor terminálu (Windows CMD/Powershell nebude fungovat) a změňte adresář na ten, který chcete použít pro uložení zálohy: + +```bash +cd /tmp # jen příklad +``` +Poté spusťte následující příkaz: +```bash +adb -d backup -f chat.ab -noapk chat.simplex.app && +tail -n +5 chat.ab > chat.dat && +printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - chat.dat > chat.gz && +tar -xvzf chat.gz +``` + +Nyní odemkněte zařízení a potvrďte operaci zálohování bez použití hesla pro šifrování, jinak příkazy nebudou fungovat. + +Poté by mělo být zálohování ukončeno. Pokud se zobrazí chybové hlášení `tar: Error is not recoverable: exiting now`, ale předtím jste vypsali názvy některých souborů, nebojte se, je to v pořádku. + +Nyní budou zálohované soubory uvnitř `./apps/chat.simplex.app/`. + +Upozorňujeme, že pokud používáte moderní verzi SimpleX, budou databáze zašifrované a jejich obsah nebudete moci zobrazit bez použití aplikace `sqlcipher` a bez znalosti dešifrovací fráze (musíte ji nejprve změnit na svou z náhodně vygenerovaných v aplikaci). + +Další informace o tom, jak dešifrovat databáze a provádět dotazy do nich, najdete v příručce [SQL.md](./SQL.md). diff --git a/docs/lang/cs/CLI.md b/docs/lang/cs/CLI.md new file mode 100644 index 000000000..f6b9dbe0e --- /dev/null +++ b/docs/lang/cs/CLI.md @@ -0,0 +1,252 @@ +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/CLI.md), [FR](/docs/lang/fr/CLI.md) | + +# SimpleX Chat terminálová (konzolová) aplikace pro Linux/MacOS/Windows + +## Obsah + +- Funkce chatu v terminálu](#terminal-chat-features) +- Instalace](#🚀-installation) + - [Stáhnout klienta chatu](#download-chat-client) + - [Linux a MacOS](#linux-and-macos) + - [Windows](#windows) + - [Sestavit ze zdrojového kódu](#build-from-source) + - [Použití Dockeru](#using-docker) + - [Použití zásobníku Haskell](#using-haskell-stack) +- [Použití](#usage) + - [Spuštění klienta chatu](#running-the-chat-client) + - [Přístup k serverům pro zasílání zpráv přes Tor](#access-messaging-servers-via-tor-beta) + - [Jak používat chat SimpleX](#how-to-use-simplex-chat) + - [Skupiny](#groups) + - [Posílání souborů](#sending-files) + - [Kontaktní adresy uživatelů](#user-contact-addresses) + - [Přístup k historii chatu](#access-chat-history) + +## Funkce chatu v terminálu + +- Chat 1:1 s více lidmi v jednom okně terminálu. +- Skupinové zasílání zpráv. +- Posílání souborů kontaktům a skupinám. +- Kontaktní adresy uživatelů - navázání spojení prostřednictvím odkazů na více kontaktů. +- Zprávy uchovávané v místní databázi SQLite. +- Automaticky vyplňované jméno příjemce - po navázání spojení stačí napsat zprávu a odpovědět odesílateli. +- K dispozici ukázkové servery SMP, které jsou v aplikaci předkonfigurovány - nebo si můžete [nasadit vlastní server](https://github.com/simplex-chat/simplexmq#using-smp-server-and-smp-agent). +- Žádná globální identita ani žádná jména nejsou pro server(y) viditelná, což zajišťuje plné soukromí vašich kontaktů a konverzací. +- Dvě vrstvy šifrování E2E (double-ratchet pro duplexní spojení s použitím dohody klíčů X3DH s efemérními klíči Curve448 a NaCl crypto_box pro fronty SMP s použitím klíčů Curve25519) a předávání klíčů příjemců mimo pásmo (viz [Jak používat chat SimpleX](#how-to-use-simplex-chat)). +- Ověřování integrity zpráv (pomocí zahrnutí digestů předchozích zpráv). +- Ověřování každého příkazu/zprávy servery SMP pomocí automaticky generovaných klíčů Ed448. +- Transportní šifrování TLS 1.3. +- Dodatečné šifrování zpráv od serveru SMP k příjemci za účelem snížení korelace provozu. + +Veřejné klíče zapojené do výměny klíčů se nepoužívají jako identita, jsou náhodně generovány pro každý kontakt. + +Technické podrobnosti viz [Použité šifrovací primitivy](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md#encryption-primitives-used). + + + +## 🚀 Instalace + +### Stáhněte si klienta chatu + +#### Linux a MacOS + +Chcete-li **nainstalovat** nebo **aktualizovat** `simplex-chat`, měli byste spustit instalační skript. K tomu použijte následující příkaz cURL nebo Wget: + +```sh +curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash +``` + +```sh +wget -qO- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash +``` + +Jakmile se chatovací klient stáhne, můžete jej spustit pomocí příkazu `simplex-chat` v terminálu. + +Případně můžete binární soubor chatu pro váš systém stáhnout ručně z [latest stable release](https://github.com/simplex-chat/simplex-chat/releases) a spustit jej podle následujícího návodu. + +```sh +chmod +x +mv ~/.local/bin/simplex-chat +``` + +(nebo v jakémkoli jiném preferovaném umístění v `PATH`). + +V systému MacOS musíte také [povolit spuštění nástroje Gatekeeper](https://support.apple.com/en-us/HT202491). + +#### Windows + +```sh +move %APPDATA%/local/bin/simplex-chat.exe +``` + +### Sestavení ze zdrojových kódů + +> **Upozornění:** pro sestavení aplikace použijte zdrojový kód ze [stabilní větve](https://github.com/simplex-chat/simplex-chat/tree/stable). + +#### Použití nástroje Docker + +V systému Linux můžete spustitelný soubor chatu sestavit pomocí [docker build with custom output](https://docs.docker.com/engine/reference/commandline/build/#custom-build-outputs): + +```shell +git clone git@github.com:simplex-chat/simplex-chat.git +cd simplex-chat +git checkout stable +DOCKER_BUILDKIT=1 docker build --output ~/.local/bin . +``` + +> **Upozornění:** Pokud narazíte na chybu `` verze `GLIBC_2.28' nenalezena ``, obnovte jej pomocí základního obrazu `haskell:8.10.7-stretch` (změňte jej ve svém lokálním [Dockerfile](Dockerfile)). + +#### V libovolném operačním systému + +1. Nainstalujte [Haskell GHCup](https://www.haskell.org/ghcup/), GHC 8.10.7 a cabal: + +```shell +curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh +``` + +2. Sestavte projekt: + +```shell +git clone git@github.com:simplex-chat/simplex-chat.git +cd simplex-chat +git checkout stable +# v Linuxu +apt-get update && apt-get install -y build-essential libgmp3-dev zlib1g-dev +cp scripts/cabal.project.local.linux cabal.project.local +# nebo na MacOS: +# brew install openssl@1.1 +# cp scripts/cabal.project.local.mac cabal.project.local +# možná budete muset změnit cabal.project.local tak, aby ukazoval na skutečné umístění openssl +cabal update +cabal install +``` + +## Použití + +### Spuštění klienta chatu + +Chcete-li spustit klienta chatu, spusťte z terminálu příkaz `simplex-chat`. + +Ve výchozím nastavení je datový adresář aplikace vytvořen v domovském adresáři (`~/.simplex` nebo `%APPDATA%/simplex` ve Windows) a jsou v něm inicializovány dva databázové soubory SQLite `simplex_v1_chat.db` a `simplex_v1_agent.db`. + +Chcete-li zadat jiný prefix cesty k souborům databáze, použijte volbu příkazového řádku `-d`: + +```shell +$ simplex-chat -d alice +``` + +Spuštění výše uvedeného příkladu vytvoří databázové soubory `alice_v1_chat.db` a `alice_v1_agent.db` v aktuálním adresáři. + +Na serveru Linode jsou umístěny tři výchozí servery SMP - jsou [předkonfigurovány v aplikaci](https://github.com/simplex-chat/simplex-chat/blob/stable/src/Simplex/Chat/Options.hs#L42). + +Pokud jste nasadili vlastní SMP server(y), můžete klienta nakonfigurovat pomocí volby `-s`: + +```shell +$ simplex-chat -s smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=@smp.example.com +``` + +Řetězec zakódovaný v Base64url před adresou serveru je offline otisk certifikátu serveru, který je ověřován klientem během TLS handshake. + +S lidmi můžete stále hovořit pomocí výchozího nebo jakéhokoli jiného serveru - ovlivňuje to pouze umístění fronty zpráv při navazování spojení (a fronta odpovědí může být na jiném serveru, jak nastaví klient druhé strany). + +Spusťte `simplex-chat -h` a zobrazte všechny dostupné možnosti. + +### Přístup k serverům pro zasílání zpráv přes Tor + +Nainstalujte Tor a spusťte jej jako proxy server SOCKS5 na portu 9050, např. na Macu můžete: + +``` +brew install tor +brew services start tor +``` + +Pro přístup k serverům přes Tor použijte volbu `-x`: + +``` +simplex-chat -x +``` + +Můžete také použít volbu `--socks-proxy=ipv4:port` nebo `--socks-proxy=:port` pro konfiguraci hostitele a portu vašeho SOCKS5 proxy serveru, např. pokud jej provozujete na jiném hostiteli nebo portu. + +### Jak používat SimpleX chat + +Po spuštění chatu budete vyzváni k zadání svého "zobrazovacího jména" a volitelného "celého jména" pro vytvoření místního profilu chatu. Vaše zobrazované jméno je přezdívka, pod kterou se na vás mohou obracet vaše kontakty - není jedinečné a neslouží jako globální identita. Pokud si některé vaše kontakty zvolily stejné zobrazovací jméno, přidá chatovací klient k jejich místnímu zobrazovacímu jménu číselnou příponu. + +Následující schéma ukazuje, jak se připojit ke kontaktu a poslat mu zprávu: + +
+ +
+ +Po nastavení místního profilu zadejte `/c` (pro `/connect`) pro vytvoření nového spojení a vygenerování pozvánky. Tuto pozvánku odešlete svému kontaktu prostřednictvím jakéhokoli jiného kanálu. + +Můžete vytvořit více pozvánek zadáním `/connect` vícekrát a odesláním těchto pozvánek příslušným kontaktům, se kterými se chcete spojit. + +Pozvánku lze použít pouze jednou, a i kdyby byla zachycena, útočník by ji nemohl použít k odeslání zpráv prostřednictvím této fronty, jakmile váš kontakt potvrdí, že spojení bylo navázáno. Vysvětlení [formátu pozvánky](https://github.com/simplex-chat/simplexmq/blob/master/protocol/agent-protocol.md#connection-request) naleznete v protokolu agenta. + +Kontakt, který obdržel pozvánku, by měl zadat `/c `, aby spojení přijal. Tím se spojení naváže a obě strany jsou o tom informovány. + +Poté by měly použít příkazy `@ ` k odesílání zpráv. Můžete také prostě začít psát zprávu a odeslat ji kontaktu, který byl poslední. + +Seznam dostupných příkazů zobrazíte pomocí `/help` v chatu. + +### Skupiny + +Skupinu vytvoříte příkazem `/g ` a kontakty do ní přidáte příkazem `/a `. Do skupiny pak můžete posílat zprávy zadáním `# `. Pro další příkazy použijte `/help groups`. + +![simplex-chat](../images/groups.gif) + +> **Upozornění**: skupiny nejsou uloženy na žádném serveru, jsou vedeny jako seznam členů v databázi aplikace, kterým budou zprávy zasílány. + +### Odesílání souborů + +Soubor můžete odeslat kontaktu pomocí `/f @ ` - příjemce jej bude muset před odesláním přijmout. Pro další příkazy použijte `/help files`. + +![simplex-chat](../images/files.gif) + +Soubory můžete posílat skupině pomocí `/f # `. + +### Kontaktní adresy uživatelů + +Jako alternativu k jednorázovým pozvánkovým odkazům můžete vytvořit dlouhodobou adresu pomocí `/ad` (pro `/adresa`). Vytvořenou adresu pak můžete sdílet libovolným kanálem a používat ji ostatními uživateli jako odkaz na žádost o kontakt pomocí `/c `. + +Příchozí žádosti můžete přijmout nebo odmítnout pomocí příkazů `/ac ` a `/rc `. + +Uživatelská adresa je "dlouhodobá" v tom smyslu, že se jedná o odkaz pro vícenásobné použití - lze ji používat, dokud ji uživatel nesmaže, v takovém případě by všechna navázaná spojení zůstala stále aktivní (na rozdíl od toho, jak to funguje u e-mailu, kdy změna adresy vede k tomu, že vám lidé nemohou posílat zprávy). + +Pro ostatní příkazy použijte `/help address`. + +![simplex-chat](../images/user-addresses.gif) + +### Přístup k historii chatu + +SimpleX chat ukládá všechny vaše kontakty a konverzace do místní databáze SQLite, takže jsou soukromé a přenosné, vlastněné a kontrolované uživatelem. + +Historii chatu můžete zobrazit a prohledávat dotazem do databáze. Spusťte níže uvedený skript pro vytvoření zobrazení zpráv ve vaší databázi. + +```sh +curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/scripts/message_views.sql | sqlite3 ~/.simplex/simplex_v1_chat.db +``` + +Otevřete SQLite Command Line Shell: + +```sh +sqlite3 ~/.simplex/simplex_v1_chat.db +``` + +Příklady viz [Message queries](./SQL.md). + +> **Upozornění:** Omezení cizích klíčů SQLite jsou ve výchozím nastavení vypnuta a musí být **[povolena pro každé připojení k databázi zvlášť](https://sqlite.org/foreignkeys.html#fk_enable)**. Toho lze dosáhnout spuštěním příkazu `PRAGMA foreign_keys = ON;` na otevřeném databázovém připojení. Spouštěním dotazů měnících data bez předchozího povolení cizích klíčů můžete riskovat, že se databáze dostane do nekonzistentního stavu. + +**Pohodlné dotazy** + +Získat všechny zprávy z dnešního dne (`chat_dt` je v UTC): + +```sql +select * from all_messages_plain where date(chat_dt) > date('now', '-1 day') order by chat_dt; +``` + +Získejte ranní noční zprávy: + +```sql +select * from all_messages_plain where chat_dt > datetime('now', '-15 hours') order by chat_dt; +``` diff --git a/docs/lang/cs/CONTRIBUTING.md b/docs/lang/cs/CONTRIBUTING.md new file mode 100644 index 000000000..7fc14f5a9 --- /dev/null +++ b/docs/lang/cs/CONTRIBUTING.md @@ -0,0 +1,21 @@ +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/CONTRIBUTING.md), [FR](/docs/lang/fr/CONTRIBUTING.md) | + +# Průvodce přispíváním + +## Kompilace s povoleným šifrováním SQLCipher + +Do kořenového adresáře projektu přidejte `cabal.project.local` s umístěním hlaviček a knihoven OpenSSL a příznakem nastavujícím režim šifrování: + +``` +cp scripts/cabal.project.local.mac cabal.project.local +# nebo +# cp scripts/cabal.project.local.linux cabal.project.local +``` + +## OpenSSL na MacOS + +Systém MacOS je standardně dodáván s LibreSSL, pro kompilaci SimpleX ze zdrojových kódů je nutné nainstalovat OpenSSL. + +OpenSSL lze nainstalovat pomocí `brew install openssl@1.1`. + +Aby vše fungovalo správně, musíte do své cesty PATH přidat `/opt/homebrew/opt/openssl@1.1/bin`. diff --git a/docs/lang/cs/README.md b/docs/lang/cs/README.md new file mode 100644 index 000000000..9423cc96b --- /dev/null +++ b/docs/lang/cs/README.md @@ -0,0 +1,327 @@ +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/README.md), [FR](/docs/lang/fr/README.md) | + +SimpleX logo + +# SimpleX - první platforma pro zasílání zpráv, která neobsahuje žádné identifikační údaje uživatelů - 100% soukromá! + +[![sestavit](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 ke stažení](https://img.shields.io/github/downloads/simplex-chat/simplex-chat/total)](https://github.com/simplex-chat/simplex-chat/releases) +[![GitHub vydání](https://img.shields.io/github/v/release/simplex-chat/simplex-chat)](https://github.com/simplex-chat/simplex-chat/releases) +[![Přidejte se na Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat) +[![Sledovat na Mastodonu](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social)](https://mastodon.social/@simplex) + +[Aplikace pro iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084) +  +[![Aplikace pro Android](https://github.com/simplex-chat/.github/blob/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app) +  +[F-Droid](https://app.simplex.chat) +  +[iOS TestFlight](https://testflight.apple.com/join/DWuT2LQu) +  +[APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk) + +- 🖲 Chrání vaše zprávy a metadata - s kým a kdy mluvíte. +- 🔐 Koncové šifrování s další vrstvou šifrování. +- 📱 Mobilní aplikace pro 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)) a [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084). +- 🚀 [TestFlight preview for iOS](https://testflight.apple.com/join/DWuT2LQu) s novými funkcemi o 1-2 týdny dříve - **omezeno na 10 000 uživatelů**! +- 🖥 K dispozici jako terminálová (konzolová) [aplikace / CLI](#zap-quick-installation-of-a-terminal-app) v systémech Linux, MacOS, Windows. + +**NOVINKA**: Bezpečnostní audit od [Trail of Bits](https://www.trailofbits.com/about), [nové webové stránky](https://simplex.chat) a vydána verze 4.2! [Viz oznámení](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md). + +## Obsah + +- [Proč záleží na soukromí](#why-privacy-matters) +- [SimpleX přístup k soukromí a bezpečnosti](#simplex-aproach-to-privacy-and-security) + - [Úplné soukromí](#complete-privacy-of-your-identity-profile-contacts-and-metadata) + - [Ochrana před spamem a zneužitím](#nejlepší-ochrana-před-spamem-a-zneužitím) + - [Vlastnictví a zabezpečení vašich dat](#complete-ownership-control-and-security-of-your-data) + - [Uživatelé vlastní síť SimpleX](#users-own-simplex-network) +- [Často kladené otázky](#frequently-asked-questions) +- [Novinky a aktualizace](#news-and-updates) +- [Vytvoření soukromého připojení](#make-a-private-connection) +- [Rychlá instalace terminálové aplikace](#zap-quick-installation-of-a-terminal-app) +- [Návrh platformy SimpleX](#simplex-platform-design) +- [Soukromí: technické detaily a omezení](#privacy-technical-details-and-limitations) +- [Pro vývojáře](#for-developers) +- [Plán](#roadmap) +- [Join a user group](#join-a-user-group) +- [Přeložit aplikace](#translate-the-apps) +- [Přispívat](#contribute) +- [Pomozte nám s dary](#help-us-with-donations) +- [Prohlášení o vyloučení odpovědnosti, bezpečnostní kontakt, licence](#disclaimers) + +## Proč záleží na ochraně osobních údajů + +Každý by měl dbát na soukromí a bezpečnost své komunikace - nevinné konverzace vás mohou ohrozit, i když není co skrývat. + +Jedním z nejvíce šokujících příběhů je zkušenost [Mohamedoua Oulda Salahiho](https://en.wikipedia.org/wiki/Mohamedou_Ould_Slahi), o které píše ve svých pamětech a která je uvedena ve filmu Mauretánec. Byl bez soudu umístěn do tábora na Guantánamu, kde byl 15 let mučen po telefonátu svému příbuznému do Afghánistánu, a to na základě podezření, že se podílel na útocích z 11. září, přestože deset let před útoky žil v Německu. + +Nestačí používat end-to-end šifrovaný messenger, všichni bychom měli používat messengery, které chrání soukromí našich osobních sítí - s kým jsme ve spojení. + +## Přístup SimpleX k ochraně soukromí a zabezpečení + +### Úplné soukromí vaší identity, profilu, kontaktů a metadat. + +**Na rozdíl od všech ostatních existujících platforem pro zasílání zpráv nemá SimpleX přiřazeny žádné identifikátory uživatelů** - dokonce ani náhodná čísla. To chrání soukromí toho, s kým komunikujete, a skrývá to před servery platformy SimpleX i před jakýmikoli pozorovateli. [Více informací](./docs/SIMPLEX.md#full-privacy-of-your-identity-profile-contacts-and-metadata). + +### Nejlepší ochrana proti spamu a zneužití + +Protože na platformě SimpleX nemáte žádný identifikátor, nelze vás kontaktovat, pokud nesdílíte odkaz na jednorázovou pozvánku nebo volitelnou dočasnou uživatelskou adresu. [Více informací](./docs/SIMPLEX.md#nejlepší-ochrana-před-spamem-a-zneužitím). + +### Úplné vlastnictví, kontrola a zabezpečení vašich dat + +SimpleX ukládá všechna uživatelská data na klientských zařízeních, zprávy jsou pouze dočasně uchovávány na relay serverech SimpleX, dokud nejsou přijaty. [Více informací](./docs/SIMPLEX.md#complete-ownership-control-and-security-of-your-data). + +### Uživatelé vlastní síť SimpleX + +Můžete používat SimpleX s vlastními servery a přitom komunikovat s lidmi, kteří používají servery předkonfigurované v aplikacích nebo jakékoli jiné servery SimpleX. [Více informací](./docs/SIMPLEX.md#users-own-simplex-network). + +## Často kladené otázky + +1. _Jak může SimpleX doručovat zprávy bez identifikátorů uživatelů?_ Viz [oznámení o vydání v2](./blog/20220511-simplex-chat-v2-images-files.md#prvni-platforma-zasilani-zpráv-bez-identifikátoru-uživatele), kde je vysvětleno, jak SimpleX funguje. + +2. _Proč bych neměl používat jen Signal?_ Signal je centralizovaná platforma, která k identifikaci svých uživatelů a jejich kontaktů používá telefonní čísla. To znamená, že zatímco obsah vašich zpráv na službě Signal je chráněn robustním šifrováním end-to-end, pro službu Signal je viditelné velké množství metadat - s kým a kdy hovoříte. + +3. _Jak se liší od platforem Matrix, Session, Ricochet, Cwtch atd. které také nevyžadují identitu uživatele?_ Ačkoli tyto platformy nevyžadují _skutečnou identitu_, při doručování zpráv se spoléhají na anonymní identitu uživatele - může to být například identifikační klíč nebo náhodné číslo. Používání trvalé identity uživatele, a to i anonymní, vytváří riziko, že se graf připojení uživatele stane známým pozorovatelům a/nebo poskytovatelům služeb, a může vést k deanonymizaci některých uživatelů. Pokud je stejný uživatelský profil použit pro připojení ke dvěma různým osobám prostřednictvím jakéhokoli messengeru jiného než SimpleX, mohou si tyto dvě osoby potvrdit, zda jsou připojeny ke stejné osobě - ve zprávách by použily stejný identifikátor uživatele. V systému SimpleX nejsou mezi konverzacemi s různými kontakty žádná společná metadata - to je vlastnost, kterou nemá žádná jiná platforma pro zasílání zpráv. + +## Novinky a aktualizace + +Poslední aktualizace: V současné době je k dispozici několik nových aplikací, např: + +[Vydání verze 4.5 - s více uživatelskými profily, návrhem zpráv, izolací transportu a italským rozhraním](./blog/20230204-simplex-chat-v4-5-user-chat-profiles.md). + +[03. 01. 2023. v4.4 vydána - s mizejícími zprávami, "živými" zprávami, bezpečnostním ověřováním spojení, GIFy a nálepkami a s francouzským jazykem rozhraní](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md). + +[prosinec 06, 2022. Listopadové recenze a vydána verze 4.3 - s okamžitými hlasovými zprávami, nevratným mazáním odeslaných zpráv a vylepšenou konfigurací serveru](./blog/20221206-simplex-chat-v4.3-hlasove-zpravy.md). + +[Nov 08, 2022. Bezpečnostní audit Trail of Bits, vydány nové webové stránky a verze 4.2](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md). + +[28. 9. 2022. v4.0: šifrovaná lokální databáze chatu a mnoho dalších změn](./blog/20220928-simplex-chat-v4-encrypted-database.md). + +[Všechny aktualizace](./blog) + +## Vytvoření soukromého připojení + +Pro navázání spojení a zahájení zasílání zpráv je třeba sdílet odkaz nebo naskenovat QR kód (osobně nebo během videohovoru). + +Kanál, jehož prostřednictvím odkaz sdílíte, nemusí být zabezpečený - stačí, když můžete potvrdit, kdo vám zprávu poslal, a že je navázáno spojení SimpleX. + +Navázat soukromé spojení Konverzace Videohovor + +## :zap: Rychlá instalace terminálové aplikace + +```sh +curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash +``` + +Po instalaci chatovacího klienta jednoduše spusťte `simplex-chat` z terminálu. + +![simplex-chat](./images/connection.gif) + +Více informací o [instalaci a používání terminálové aplikace](./docs/CLI.md). + +## Návrh platformy SimpleX + +SimpleX je síť klient-server s unikátní topologií sítě, která využívá redundantní, jednorázové uzly pro předávání zpráv (relay nodes) k asynchronnímu předávání zpráv prostřednictvím jednosměrných (simplexních) front zpráv, což zajišťuje anonymitu příjemce i odesílatele. + +Na rozdíl od sítí P2P jsou všechny zprávy předávány přes jeden nebo několik serverových uzlů, které ani nemusí mít perzistenci. Současná implementace [SMP serveru](https://github.com/simplex-chat/simplexmq#smp-server) ve skutečnosti používá ukládání zpráv v paměti a uchovává pouze záznamy o frontách. SimpleX poskytuje lepší ochranu metadat než návrhy P2P, protože k doručování zpráv se nepoužívají globální identifikátory účastníků, a vyhýbá se [problémům sítí P2P](./docs/SIMPLEX.md#comparison-with-p2p-messaging-protocols). + +Na rozdíl od federativních sítí nemají uzly serveru **záznamy o uživatelích**, **nekomunikují mezi sebou** a **neukládají zprávy** po jejich doručení příjemcům. Neexistuje způsob, jak zjistit úplný seznam serverů účastnících se sítě SimpleX. Tato konstrukce se vyhýbá problému viditelnosti metadat, který mají všechny federované sítě, a lépe chrání před útoky na celou síť. + +Informace o uživatelích, jejich kontaktech a skupinách mají pouze klientská zařízení. + +Další informace o cílech a technickém návrhu platformy naleznete v dokumentu [SimpleX whitepaper](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md). + +Formát zpráv zasílaných mezi klienty chatu prostřednictvím [SimpleX Messaging Protocol](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/simplex-messaging.md) viz [SimpleX Chat Protocol](./docs/protocol/simplex-chat.md). + +## Soukromí: technické podrobnosti a omezení + +SimpleX Chat je ve vývoji - vylepšení vydáváme, jakmile jsou hotová. Musíte se rozhodnout, zda je současný stav dostatečně dobrý pro váš scénář použití. + +Co je již implementováno: + +1. Místo identifikátorů uživatelského profilu, které používají všechny ostatní platformy, dokonce i ty nejprivátnější, používá SimpleX párové identifikátory pro jednotlivé fronty (2 adresy pro každou jednosměrnou frontu zpráv, s volitelnou 3. adresou pro push oznámení v systému iOS, 2 fronty v každém spojení mezi uživateli). To ztěžuje pozorování síťového grafu na úrovni aplikace, protože pro `n` uživatelů může existovat až `n * (n-1)` front zpráv. +2. Koncové šifrování v každé frontě zpráv pomocí [NaCl cryptobox](https://nacl.cr.yp.to/box.html). To je přidáno proto, aby byla v budoucnu umožněna redundance (předávání každé zprávy přes několik serverů), aby se zabránilo tomu, že v různých frontách bude stejný šifrový text (který by byl pro útočníka viditelný pouze v případě kompromitace TLS). Šifrovací klíče používané pro toto šifrování se nerotují, místo toho plánujeme rotaci front. Pro vyjednávání klíčů se používají klíče Curve25519. + +3. [Dvojité šifrování](https://signal.org/docs/specifications/doubleratchet/) koncové šifrování v každé konverzaci mezi dvěma uživateli (nebo členy skupiny). Jedná se o stejný algoritmus, který se používá v aplikaci Signal a mnoha dalších aplikacích pro zasílání zpráv; zajišťuje OTR zasílání zpráv s dopředným utajením (každá zpráva je šifrována vlastním efemérním klíčem), obnovou po vloupání (klíče jsou často znovu vyjednávány v rámci výměny zpráv). Pro počáteční dohodu klíčů se používají dva páry klíčů Curve448, iniciující strana předává tyto klíče prostřednictvím spojení, přijímající strana - v záhlaví potvrzovací zprávy. +4. Další vrstva šifrování pomocí kryptoboxu NaCL pro zprávy doručované ze serveru příjemci. Tato vrstva zamezuje tomu, aby mezi odesílaným a přijímaným provozem serveru uvnitř TLS byl společný šifrový text (a společné nejsou ani identifikátory). +5. Několik úrovní výplně obsahu pro zmaření útoků na velikost zprávy. +6. Počínaje verzí v2 protokolu SMP (současná verze je v4) jsou všechna metadata zprávy včetně času, kdy byla zpráva přijata serverem (zaokrouhleno na sekundy), odesílána příjemcům uvnitř šifrované obálky, takže ani v případě kompromitace TLS je nelze pozorovat. +7. Pro spojení klient-server je povoleno pouze TLS 1.2/1.3, omezené na kryptografické algoritmy: CHACHA20POLY1305_SHA256, Ed25519/Ed448, Curve25519/Curve448. +8. Na ochranu proti útokům typu replay vyžadují servery SimpleX [tlsunique channel binding](https://www.rfc-editor.org/rfc/rfc5929.html) jako ID relace v každém klientském příkazu podepsaném efemérním klíčem per-queue. +9. Pro ochranu vaší IP adresy podporují všichni klienti SimpleX Chat přístup k serverům pro zasílání zpráv přes Tor - více informací najdete v [oznámení o vydání v3.1](./blog/20220808-simplex-chat-v3.1-chat-groups.md). +10. Šifrování místní databáze s přístupovou frází - kontakty, skupiny a všechny odeslané a přijaté zprávy jsou uloženy šifrovaně. Pokud jste používali SimpleX Chat před verzí 4.0, musíte šifrování povolit prostřednictvím nastavení aplikace. +11. Izolace transportu - pro provoz různých uživatelských profilů se používají různá spojení TCP a okruhy Tor, volitelně - pro různá spojení kontaktů a členů skupin. + +Plánujeme brzy přidat: + +1. Automatická rotace fronty zpráv. V současné době se používají fronty vytvořené mezi dvěma uživateli, dokud uživatel frontu ručně nezmění nebo kontakt nesmaže. Plánujeme přidat automatickou rotaci front, aby tyto identifikátory byly dočasné a rotovaly na základě nějakého plánu TBC (např. každých X zpráv nebo každých X hodin/dnů). +2. Šifrování místních souborů. V současné době jsou obrázky a soubory, které odesíláte a přijímáte, uloženy v aplikaci nezašifrované, můžete je odstranit prostřednictvím `Nastavení / Databáze hesla a export`. +3. "Míchání" zpráv - přidání zpoždění k doručování zpráv, ochrana proti korelaci provozu podle času zprávy. + +## Pro vývojáře + +Můžete: + +- použít knihovnu SimpleX Chat k integraci funkcí chatu do svých mobilních aplikací. +- vytvářet chatovací boty a služby v jazyce Haskell - viz [simple](./apps/simplex-bot/) a více [advanced chat bot example](./apps/simplex-bot-advanced/). +- vytvářet chatovací boty a služby v libovolném jazyce se spuštěným terminálem SimpleX Chat CLI jako lokálním serverem WebSocket. Viz [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) a [JavaScript chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js). +- spustit [simplex-chat terminal CLI](./docs/CLI.md) pro provádění jednotlivých příkazů chatu, např. pro odesílání zpráv v rámci provádění shellových skriptů. + +Pokud uvažujete o vývoji s platformou SimpleX, obraťte se na nás pro případné rady a podporu. + +## Plán postupu + +- ✅ Snadné nasazení serveru SimpleX s ukládáním zpráv v paměti, bez jakýchkoli závislostí. +- ✅ Terminálový (konzolový) klient s podporou skupin a souborů. +- ✅ Nasazení serveru SimpleX na Linode jedním kliknutím. +- ✅ Koncové šifrování pomocí protokolu double-ratchet s další vrstvou šifrování. +- ✅ Mobilní aplikace v1 pro Android a iOS. +- ✅ Soukromá okamžitá oznámení pro Android pomocí služby na pozadí. +- ✅ Šablony chatovacích botů v jazyce Haskell. +- ✅ Verze v2.0 - podpora obrázků a souborů v mobilních aplikacích. +- ✅ Ruční mazání historie chatu. +- ✅ Koncové šifrované zvukové a obrazové hovory WebRTC prostřednictvím mobilních aplikací. +- ✅ Okamžitá oznámení zachovávající soukromí pro iOS pomocí služby Apple Push Notification. +- ✅ Export a import databáze chatů. +- ✅ Chatovací skupiny v mobilních aplikacích. +- ✅ Připojení k serverům pro zasílání zpráv přes Tor. +- ✅ Duální adresy serverů pro přístup k serverům pro zasílání zpráv jako skryté služby v3. +- ✅ Chatovací server a TypeScript klient SDK pro vývoj chatovacích rozhraní, integrací a chatovacích botů (připraveno k oznámení). +- ✅ Režim inkognito pro sdílení nového náhodného jména s každým kontaktem. +- ✅ Šifrování databáze chatu. +- ✅ Automatické mazání historie chatu. +- ✅ Odkazy pro připojení ke skupinám a zlepšení stability skupin. +- ✅ Hlasové zprávy (s možností odhlášení příjemce na kontakt). +- ✅ Základní ověřování pro servery SMP (pro autorizaci vytváření nových front). +- ✅ Zobrazení smazaných zpráv, úplné odstranění zpráv odesílatelem (s možností opt-in příjemce na kontakt). +- ✅ Blokování snímků obrazovky a zobrazení v posledních aplikacích. +- ✅ Pokročilá konfigurace serveru. +- ✅ Zmizení zpráv (s možností opt-in příjemce na kontakt). +- ✅ "Živé" zprávy. +- ✅ Ověření kontaktu prostřednictvím samostatného mimopásmového kanálu. +- ✅ Více uživatelských profilů v jedné chatové databázi. +- ✅ Volitelně zamezení opakovaného používání stejné relace TCP pro více spojení. +- ✅ Zachování návrhů zpráv. +- 🏗 Souborový server pro optimalizaci efektivního a soukromého odesílání velkých souborů. +- 🏗 Vylepšené audio a video hovory. +- 🏗 Redundance a rotace fronty SMP (je podporováno ruční nastavení). +- 🏗 Snížení spotřeby baterie a provozu ve velkých skupinách. +- 🏗 Podpora starších operačních systémů Android a 32bitových procesorů. +- Efemérní/zmizelé/OTR konverzace se stávajícími kontakty. +- Přístupové heslo/pin (s volitelným alternativním přístupovým heslem). +- Šifrování místních souborů aplikace. +- Videozprávy. +- Vylepšená navigace a vyhledávání v konverzaci (rozbalení a posun na citovanou zprávu, posun na výsledky vyhledávání atd.) +- Potvrzení o doručení zprávy (s možností přihlášení nebo odhlášení odesílatele pro každý kontakt, TBC). +- Zprávy/rozhlasové vysílání. +- Webové widgety pro vlastní interaktivitu v chatech. +- Programovatelné automatizace/pravidla chatu (automatické odpovědi/přeposlání/odstranění/odeslání, připomenutí atd.) +- Podpora stejného profilu na více zařízeních. +- Klient pro stolní počítače. +- Server identity zachovávající soukromí pro volitelné adresy kontaktů/skupin založené na DNS pro zjednodušení připojení a zjišťování, ale nepoužívaný k doručování zpráv: + - Zachovejte si všechny kontakty a skupiny, i když ztratíte doménu. + - Server nemá informace o vašich kontaktech a skupinách. +- Hostitelský server pro velké skupiny, komunity a veřejné kanály. +- Relé pro doručování zpráv pro odesílatele (pro skrytí IP adresy před servery příjemců a snížení provozu). +- Vysokokapacitní víceuzlové relé SMP. + +## Připojte se ke skupině uživatelů + +Pokud se chcete na něco zeptat, můžete se připojit k anglicky mluvící skupině: [#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) + +Existuje také několik skupin v jiných jazycích než v angličtině, do kterých jsme nechali přeložit rozhraní aplikací. Tyto skupiny slouží k testování a pokládání otázek ostatním uživatelům SimpleX Chat. Ne vždy v nich odpovídáme na dotazy, proto je prosím pokládejte v některé z anglicky mluvících skupin. + +- [\#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) (francouzsky mluvící). +- [\#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). + +K těmto skupinám se můžete připojit buď otevřením těchto odkazů v aplikaci, nebo jejich otevřením v prohlížeči počítače a naskenováním QR kódu. + +Připojte se prostřednictvím aplikace a sdílejte, co se děje, a pokládejte případné dotazy! + +## Přeložit aplikace + +Díky našim uživatelům a [Weblate](https://hosted.weblate.org/engage/simplex-chat/) jsou aplikace SimpleX Chat přeloženy do mnoha dalších jazyků. Přidejte se k našim překladatelům a pomozte SimpleX rychleji růst! + +Aktuální jazyky rozhraní: + +- Angličtina (vývojový jazyk) +- Němčina: [@mlanp](https://github.com/mlanp) +- Francouzština: [@ishi_sama](https://github.com/ishi-sama) +- Italština: [@unbranched](https://github.com/unbranched) +- Ruština: projektový tým + +Jazyky ve vývoji: Čínština, hindština, čeština, japonština, holandština a [mnoho dalších](https://hosted.weblate.org/projects/simplex-chat/#languages). Další jazyky budeme přidávat, jakmile budou některé z již přidaných jazyků dokončeny - navrhněte prosím nové jazyky, projděte si [průvodce překladem](./docs/TRANSLATIONS.md) a kontaktujte nás! + +## Přispívejte + +Budeme rádi, když se zapojíte do vývoje! Do SimpleX Chat můžete přispívat pomocí: + +- Přeložit domovskou stránku webu - je zde spousta obsahu, který bychom rádi sdíleli, pomohlo by to přivést nové uživatele. +- Napsáním návodu nebo receptů o hostování serverů, automatizaci chatbotů atd. +- Vývojem funkcí - spojte se s námi prostřednictvím chatu, abychom vám mohli pomoci začít. + +## Pomozte nám s dary + +Obrovské díky všem, kteří přispěli na SimpleX Chat! + +Prioritou je pro nás soukromí a bezpečnost uživatelů - bez vaší podpory by to nebylo možné. + +Naším závazkem vůči uživatelům je, že protokoly SimpleX jsou a zůstanou otevřené a ve veřejném vlastnictví - takže kdokoli může vytvářet budoucí implementace klientů a serverů. Platformu SimpleX budujeme na stejných principech jako e-mail a web, ale mnohem soukroměji a bezpečněji. + +Vaše dary nám pomohou získat další finanční prostředky - jakákoli částka, dokonce i cena šálku kávy, by pro nás měla velký význam. + +Přispět je možné prostřednictvím: + +- [GitHub](https://github.com/sponsors/simplex-chat) - je to pro nás bez provize. +- OpenCollective](https://opencollective.com/simplex-chat) - účtuje si provizi a přijímá také dary v kryptoměnách. +- Adresa Monero: 8568eeVjaJ1RQ65ZUn9PRQ8ENtqeX9VVhcCYYhnVLxhV4JtBqw42so2VEUDQZNkFfsH5sXCuV7FN8VhRQ21DkNibTZP57Qt. +- Bitcoinová adresa: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG +- BCH adresa: BCH: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG +- Ethereum adresa: 0x83fd788f7241a2be61780ea9dc72d2151e6843e2 +- Adresa Solana: 43tWFWDczgAcn4Rzwkpqg2mqwnQETSiTwznmCgA2tf1L +- dejte nám prosím vědět prostřednictvím GitHub issue nebo chatu, pokud chcete vytvořit příspěvek v nějaké jiné kryptoměně - přidáme adresu do seznamu. + +Děkujeme, + +Evgeny + +Zakladatel SimpleX Chat + +## Odmítnutí odpovědnosti + +Protokoly a bezpečnostní model [SimpleX](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) byly revidovány a ve verzi 1.0.0 došlo k mnoha zlomovým změnám a vylepšením. + +Bezpečnostní audit provedla v říjnu 2022 společnost [Trail of Bits](https://www.trailofbits.com/about) a většina oprav byla vydána ve verzi 4.2.0 - viz [oznámení](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md). + +SimpleX Chat je stále relativně ranou fází platformy (mobilní aplikace byly vydány v březnu 2022), takže můžete objevit některé chyby a chybějící funkce. Velmi oceníme, pokud nám dáte vědět o všem, co je třeba opravit nebo vylepšit. + +Výchozí servery nakonfigurované v aplikaci jsou poskytovány na základě nejlepšího úsilí. V současné době negarantujeme žádné smlouvy SLA, ačkoli historicky měly naše servery každý více než 99,9% provozuschopnost. + +Nikdy jsme neposkytli ani jsme nebyli požádáni o přístup k našim serverům nebo k jakýmkoli informacím z našich serverů žádnou třetí stranou. Pokud bychom někdy byli požádáni o poskytnutí takového přístupu nebo informací, budeme postupovat podle řádného právního postupu. + +Nezaznamenáváme IP adresy uživatelů a na našich serverech neprovádíme žádnou korelaci provozu. Pokud je pro vás bezpečnost na úrovni přenosu kritická, musíte pro přístup k serverům pro zasílání zpráv používat Tor nebo jinou podobnou síť. Klientské aplikace budeme vylepšovat, abychom omezili možnosti korelace provozu. + +Více informací naleznete v [Podmínky a zásady ochrany osobních údajů](./PRIVACY.md). + +## Bezpečnostní kontakt + +Chcete-li nahlásit bezpečnostní zranitelnost, pošlete nám e-mail na adresu chat@simplex.chat. Budeme koordinovat opravu a zveřejnění. Bezpečnostní zranitelnosti prosím NEHLAŠUJTE prostřednictvím issues GitHub. + +Jakákoli zjištění možných útoků korelace provozu umožňujících korelovat dvě různé konverzace se stejným uživatelem, jiná než ta, která jsou zahrnuta v [modelu hrozeb](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md#threat-model), považujte za bezpečnostní zranitelnosti a postupujte podle tohoto postupu zveřejnění. + +## Licence + +[AGPL v3](./LICENSE) + +[Aplikace iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084) +  +[![Aplikace pro Android](https://github.com/simplex-chat/.github/blob/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app) +  +[F-Droid](https://app.simplex.chat) +  +[iOS TestFlight](https://testflight.apple.com/join/DWuT2LQu) +  +[APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk) diff --git a/docs/lang/cs/SERVER.md b/docs/lang/cs/SERVER.md new file mode 100644 index 000000000..ba7dc3efd --- /dev/null +++ b/docs/lang/cs/SERVER.md @@ -0,0 +1,330 @@ +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/SERVER.md), [FR](/docs/lang/fr/SERVER.md) | + +# Hostování vlastního serveru SMP + +## Přehled + +SMP server je relay server používaný k předávání zpráv v síti SimpleX. Aplikace SimpleX Chat mají přednastavené servery (pro mobilní aplikace jsou to smp8, smp9 a smp10.simplex.im), ale konfiguraci aplikace můžete snadno změnit a používat jiné servery. + +Klienti SimpleX pouze určují, který server bude použit pro příjem zpráv, a to pro každý kontakt (nebo spojení skupiny s členem skupiny) zvlášť, přičemž tyto servery jsou pouze dočasné, protože adresa pro doručování se může změnit. + +_Upozornění_: když změníte servery v konfiguraci aplikace, ovlivní to pouze to, který server bude použit pro nové kontakty, stávající kontakty se na nové servery automaticky nepřesunou, ale můžete je přesunout ručně pomocí tlačítka ["Změnit adresu příjmu"](../blog/20221108-simplex-chat-v4.2-bezpecnostni-audit-novy-website.md#zmeny-dorucovani-adresy-beta) na stránkách s informacemi o kontaktech/členech - brzy bude automatizováno. + +## Instalace + +0. Nejprve nainstalujte `smp-server`: + + - Ruční nasazení: + + - [Kompilace ze zdrojových kódů](https://github.com/simplex-chat/simplexmq#using-your-distribution) + - [Použití předkompilovaných binárních souborů](https://github.com/simplex-chat/simplexmq#install-binaries) + + - Alternativně můžete `smp-server` nasadit pomocí: + - [Docker kontejner](https://github.com/simplex-chat/simplexmq#using-docker-1) + - [Linode StackScript](https://github.com/simplex-chat/simplexmq#deploy-smp-server-on-linode) + +Ruční instalace vyžaduje několik předběžných úkonů: + +1. Vytvoření uživatele a skupiny pro `smp-server`: + + ```sh + sudo useradd -m smp + ``` + +2. Vytvořte potřebné adresáře a přiřaďte jim oprávnění: + + ```sh + sudo mkdir -p /var/opt/simplex /etc/opt/simplex + sudo chown smp:smp /var/opt/simplex /etc/opt/simplex /etc/opt/simplex + ``` + +3. Povolte port `smp-server` ve firewallu: + + ```sh + # Pro Ubuntu + ufw allow 5233 + ``` + +4. **Volitelné** - Pokud používáte distribuci s `systemd`, vytvořte soubor `/etc/systemd/system/smp-server.service` s následujícím obsahem: + + ```sh + [Unit] + Description=SMP server + [Service] + User=smp + Group=smp + Type=simple + ExecStart=smp-server start + ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex/smp-server-store.log" ] && cp "/var/opt/simplex/smp-server-store.log" "/var/opt/simplex/smp-server-store.log.bak"' + KillSignal=SIGINT + TimeoutStopSec=infinity + Restart=vždy + RestartSec=10 + LimitNOFILE=65535 + [Install] + WantedBy=multi-user.target + ``` + + A spusťte `sudo systemctl daemon-reload`. + +## Konfigurace + +Chcete-li zjistit, které možnosti jsou k dispozici, spusťte `smp-server` bez příznaků: + +```sh +sudo su smp -c smp-server + +... +Dostupné příkazy: + init Inicializace serveru - vytvoří /etc/opt/simplex a + /var/opt/simplex adresáře a konfigurační soubory. + start Spustí server (konfigurace: + /etc/opt/simplex/smp-server.ini). + delete Odstranění konfiguračních a protokolových souborů +``` + +Další nápovědu můžete získat příkazem `sudo su smp -c "smp-server -h"` + +Poté musíme nakonfigurovat `smp-server`: + +### Interaktivně + +Spusťte následující příkaz: + +```sh +sudo su smp -c "smp-server init" +``` + +Je třeba zvážit několik možností: + +- `Povolit ukládání protokolu pro obnovení front a zpráv při restartu serveru (Yn):` + + Zadáním `y` povolíte ukládání a obnovu spojení a zpráv při restartu serveru. + + _Pozor_: je důležité použít SIGINT pro restart serveru, protože jinak nebudou nedoručené zprávy obnoveny. Spojení budou obnovena bez ohledu na to, jakým způsobem je server restartován, protože na rozdíl od zpráv jsou při každé změně přidávána do protokolu pouze pro doplnění. + +- `Zapnout protokolování denních statistik (yN):` + + Zadáním `y` povolíte protokolování statistik ve formátu CSV, které lze například použít k zobrazení souhrnných grafů využití v `Grafanu`. + +Tyto statistiky zahrnují denní počty vytvořených, zajištěných a smazaných front, odeslaných a přijatých zpráv a také denní, týdenní a měsíční počty aktivních front (tj. front, které byly použity pro nějaké zprávy). Domníváme se, že tyto informace neobsahují nic, co by umožňovalo korelovat různé fronty jako patřící stejným uživatelům, ale pokud se domníváte, že to lze nějak zneužít, dejte nám prosím důvěrně vědět. + +- `Vyžadovat heslo pro vytvoření nové fronty zpráv?` + + Zadejte `r` nebo své libovolné heslo pro ochranu heslem `smp-server` nebo `n` pro vypnutí ochrany heslem. + +- `Zadejte FQDN serveru nebo IP adresu pro certifikát (127.0.0.1):` + + Zadejte svou doménu nebo ip adresu, na které běží váš smp-server - bude zahrnuta do certifikátů serveru a také vypsána jako součást adresy serveru. + +### Prostřednictvím voleb příkazového řádku + +Spusťte následující příkaz: + +```sh +sudo su smp -c "smp-server init -h" + +... +Dostupné možnosti: + -l,--store-log Povolit protokol úložiště pro perzistenci + -s,--daily-stats Povolí protokolování denních statistik serveru + -a,--sign-algorithm ALG Algoritmus podpisu používaný pro certifikáty TLS: + ED25519, ED448 (výchozí: ED448). + --ip IP IP adresa serveru, používaná jako Common Name pro TLS online + certifikátu, pokud není zadáno FQDN + (výchozí: "127.0.0.1") + -n,--fqdn FQDN FQDN serveru použitý jako Common Name pro certifikát TLS online + certifikát + --no-password Povolit vytváření nových front bez hesla + --password PASSWORD Nastavení hesla pro vytváření nových front zpráv + -y,--yes Neinteraktivní inicializace pomocí příkazového řádku + volby + -h,--help Zobrazí text nápovědy +``` + +Měli byste určit, které příznaky jsou pro váš případ použití potřebné, a poté spustit `smp-server init` s příznakem `-y` pro neinteraktivní inicializaci: + +```sh +sudo su smp -c "smp-server init -y - " +``` + +Spusťte například: + +```sh +sudo su smp -c "smp-server init -y -l --ip 192.168.1.5 --heslo test" +``` + +a inicializujte konfiguraci `smp-serveru` pomocí: + +- obnovení spojení a zpráv při restartu serveru (příznak `-l`), +- IP adresa `192.168.1.5`, +- chránit `smp-server` heslem `test`. + +--- + +Poté je instalace dokončena a ve výstupu teminálu byste měli vidět něco takového: + +```sh +Certificate request self-signature ok +subject=CN = 127.0.0.1 +Server je inicializován, konfiguraci můžete upravit v souboru /etc/opt/simplex/smp-server.ini. +Spusťte `smp-server start` pro spuštění serveru. +---------- +Měli byste bezpečně uložit soukromý klíč CA a odstranit jej ze serveru. +Pokud dojde ke kompromitaci pověření TLS serveru, lze tento klíč použít k podpisu nového, přičemž zůstane zachována stejná identita serveru a navázaná spojení. +Umístění soukromého klíče CA: /etc/opt/simplex/ca.key. +---------- +SMP server v3.4.0 +Otisk prstu: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss= +Adresa serveru: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@ +``` + +Výše uvedená adresa serveru by měla být použita v konfiguraci klienta a pokud jste přidali heslo k serveru, mělo by být sdíleno s ostatními lidmi pouze tehdy, když jim chcete povolit používat váš server pro příjem zpráv (všechny vaše kontakty budou moci posílat zprávy, protože nevyžadují heslo). Pokud jste při inicializaci předali IP adresu nebo názvy hostitelů, budou vypsány jako součást adresy serveru, jinak nahraďte `` skutečnými adresami serverů. + +## Dokumentace + +Všechny potřebné soubory pro `smp-server` jsou umístěny ve složce `/etc/opt/simplex/`. + +Uložené zprávy, spojení, statistiky a protokol serveru jsou umístěny ve složce `/var/opt/simplex/`. + +### Adresa serveru SMP + +Adresa serveru SMP má následující formát: + +``` +smp://[:]@[,] +``` + +- `` + + Váš otisk certifikátu `smp-server`. Otisk svého certifikátu můžete zkontrolovat v souboru `/etc/opt/simplex/fingerprint`. + +- **nepovinné** `` + + Vaše nakonfigurované heslo `smp-serveru`. Nakonfigurované heslo můžete zkontrolovat v souboru `/etc/opt/simplex/smp-server.ini` v sekci `[AUTH]` v poli `create_password:`. + +- ``, **volitelně** ``. + + Vaše nakonfigurované jméno (jména) hostitele `smp-serveru`. Nakonfigurované hostitele můžete zkontrolovat v souboru `/etc/opt/simplex/smp-server.ini`, v části `[TRANSPORT]` v poli `host:`. + +### Příkazy Systemd + +Chcete-li spustit `smp-server` při startu hostitele, spusťte: + +```sh +sudo systemctl enable smp-server.service + +Vytvořen symlink /etc/systemd/system/multi-user.target.wants/smp-server.service → /etc/systemd/system/smp-server.service. +``` + +Chcete-li spustit `smp-server`, spusťte: + +```sh +sudo systemctl start smp-server.service +``` + +Chcete-li zkontrolovat stav `smp-serveru`, spusťte: + +```sh +sudo systemctl status smp-server.service + +● smp-server.service - server SMP + Načteno: načteno (/etc/systemd/system/smp-server.service; povoleno; předvolba dodavatele: povoleno) + Aktivní: aktivní (běží) od so 2022-11-23 19:23:21 UTC; před 1min 48s + Hlavní PID: 30878 (smp-server) + CGroup: /docker/5588ab759e80546b4296a7c50ffebbb1fb7b55b8401300e9201313b720989aa8/system.slice/smp-server.service + └─30878 smp-server start + +Nov 23 19:23:21 5588ab759e80 systemd[1]: Spuštěn SMP server. +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: SMP server v3.4.0 +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss= +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Adresa serveru: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@ +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Uložit protokol: /var/opt/simplex/smp-server-store.log +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Naslouchání na portu 5223 (TLS)... +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: neaktivní klienti nevypršeli. +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: vytváření nových front vyžaduje heslo +``` + +Chcete-li zastavit `smp-server`, spusťte: + +```sh +sudo systemctl stop smp-server.service +``` + +Chcete-li zkontrolovat ocas protokolu `smp-server`, spusťte: + +```sh +sudo journalctl -fu smp-server.service + +Nov 23 19:23:21 5588ab759e80 systemd[1]: Spuštěn SMP server. +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: SMP server v3.4.0 +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss= +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Adresa serveru: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@ +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Uložit protokol: /var/opt/simplex/smp-server-store.log +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Naslouchání na portu 5223 (TLS)... +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: neaktivní klienti nevypršeli. +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: vytváření nových front vyžaduje heslo +``` + +### Monitoring + +Statistiky `smp-serveru` pro `Grafana` dashboard můžete povolit nastavením hodnoty `on` v souboru `/etc/opt/simplex/smp-server.ini` v sekci `[STORE_LOG]` v poli `log_stats:`. + +Protokoly budou uloženy jako soubor `csv` v souboru `/var/opt/simplex/smp-server-stats.daily.log`. Pole pro soubor `csv` jsou: + +```sh +fromTime,qCreated,qSecured,qDeleted,msgSent,msgRecv,dayMsgQueues,weekMsgQueues,monthMsgQueues +``` + +- `fromTime` - časová značka; datum a čas události + +- `qCreated` - int; vytvořené fronty + +- `qSecured` - int; vytvořené fronty + +- `qDeleted` - int; smazané fronty + +- `msgSent` - int; odeslané zprávy + +- `msgRecv` - int; přijaté zprávy + +- `dayMsgQueues` - int; aktivní fronty za den + +- `weekMsgQueues` - int; aktivní fronty za týden + +- `monthMsgQueues` - int; aktivní fronty za měsíc + +Pro import `csv` do `Grafana` je třeba: + +1. Nainstalovat zásuvný modul Grafana: [Grafana - CSV datasource](https://grafana.com/grafana/plugins/marcusolsson-csv-datasource/) + +2. Povolit místní režim připojením následujícího: + + ```sh + [plugin.marcusolsson-csv-datasource]. + allow_local_mode = true + ``` + + ... do `/etc/grafana/grafana.ini` + +3. Přidejte zdroj dat CSV: + + - V postranní nabídce klikněte na záložku Configuration (ikona ozubeného kola). + - V pravém horním rohu karty Zdroje dat klikněte na tlačítko Přidat zdroj dat. + - Do vyhledávacího pole zadejte "CSV" a vyhledejte zdroj dat CSV. + - Klikněte na výsledek hledání s nápisem "CSV". + - Do pole URL zadejte soubor, který odkazuje na obsah CSV + +4. Hotovo! Měli byste být schopni vytvořit vlastní řídicí panel se statistikami. + +Další dokumentaci naleznete na adrese: [CSV Data Source for Grafana - Documentation](https://grafana.github.io/grafana-csv-datasource/) + +### Konfigurace aplikace pro použití serveru + +Chcete-li aplikaci nakonfigurovat tak, aby používala váš server pro zasílání zpráv, zkopírujte jeho úplnou adresu včetně hesla a přidejte ji do aplikace. Máte možnost používat svůj server společně s přednastavenými servery nebo bez nich - můžete je odebrat nebo zakázat. + +Adresu svého serveru můžete také sdílet se svými přáteli tak, že je necháte naskenovat QR kód z nastavení serveru - ten bude obsahovat heslo serveru, takže budou moci přijímat zprávy i prostřednictvím vašeho serveru. + +_Upozornění_: pro podporu hesla je třeba mít SMP server verze 4.0. Pokud již máte nasazený server, můžete heslo přidat přidáním do souboru INI serveru. + +       diff --git a/docs/lang/cs/SIMPLEX.md b/docs/lang/cs/SIMPLEX.md new file mode 100644 index 000000000..2727d2b9d --- /dev/null +++ b/docs/lang/cs/SIMPLEX.md @@ -0,0 +1,98 @@ +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/SIMPLEX.md), [FR](/docs/lang/fr/SIMPLEX.md) | + +# Platforma SimpleX - motivace a srovnání + +## Problémy + +Stávající chatovací platformy a protokoly mají některé nebo všechny následující problémy: + +- Nedostatek soukromí uživatelského profilu a kontaktů (soukromí metadat). +- Žádná ochrana (nebo pouze volitelná ochrana) implementací [E2EE][1] před útoky MITM prostřednictvím poskytovatele. +- Nevyžádané zprávy (spam a zneužití). +- Chybějící vlastnictví a ochrana dat. +- Složitost použití všech necentralizovaných protokolů pro netechnické uživatele. + +Koncentrace komunikace v malém počtu centralizovaných platforem činí řešení těchto problémů poměrně obtížným. + +## Navrhované řešení + +Navrhovaný zásobník protokolů řeší tyto problémy tím, že zprávy i kontakty jsou uloženy pouze v klientských zařízeních, čímž se role serverů omezuje na pouhé zprostředkovatele zpráv, kteří vyžadují pouze autorizaci zpráv odesílaných do front, ale NEvyžadují autentizaci uživatelů - chráněny jsou nejen zprávy, ale i metadata, protože uživatelé nemají přiřazeny žádné identifikátory - na rozdíl od jiných platforem. + +Více informací o cílech a technickém návrhu platformy naleznete v dokumentu [SimpleX whitepaper](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md). + +## Proč používat SimpleX + +## Jedinečný přístup SimpleX k ochraně soukromí a zabezpečení + +Každý by měl dbát na soukromí a bezpečnost své komunikace - i obyčejné konverzace vás mohou ohrozit. + +### Úplné soukromí vaší identity, profilu, kontaktů a metadat. + +**Na rozdíl od všech ostatních existujících platforem pro zasílání zpráv nemá SimpleX žádné identifikátory přiřazené uživatelům** - k identifikaci svých uživatelů nepoužívá telefonní čísla (jako Signal nebo WhatsApp), adresy založené na doméně (jako e-mail, XMPP nebo Matrix), uživatelská jména (jako Telegram), veřejné klíče nebo dokonce náhodná čísla (jako všechny ostatní messengery) - ani nevíme, kolik lidí SimpleX používá. + +K doručování zpráv místo identifikátorů uživatelů, které používají všechny ostatní platformy, používá SimpleX adresy jednosměrných (simplexních) front zpráv. Používání služby SimpleX je jako mít pro každý kontakt jinou e-mailovou adresu nebo telefonní číslo, ale bez starostí se správou všech těchto adres. V blízké budoucnosti budou aplikace SimpleX také automaticky měnit fronty zpráv a přesouvat konverzace z jednoho serveru na druhý, aby uživatelům poskytly ještě lepší soukromí. + +Tento přístup chrání soukromí toho, s kým komunikujete, a skrývá ho před servery platformy SimpleX a před jakýmikoli pozorovateli. Své soukromí můžete dále zlepšit nastavením přístupu k síti tak, abyste se k serverům SimpleX připojovali prostřednictvím některé překryvné transportní sítě, např. sítě Tor. + +### Nejlepší ochrana proti spamu a zneužití + +Protože na platformě SimpleX nemáte žádný identifikátor, nelze vás kontaktovat, pokud nesdílíte odkaz s jednorázovou pozvánkou nebo volitelnou dočasnou uživatelskou adresu. I v případě volitelných uživatelských adres je sice lze využít k zasílání nevyžádaných kontaktů, ale můžete je změnit nebo zcela odstranit, aniž byste přišli o jakékoli spojení. + +### Úplné vlastnictví, kontrola a zabezpečení vašich údajů + +SimpleX ukládá všechna uživatelská data v klientských zařízeních, zprávy jsou pouze dočasně uchovávány na relay serverech SimpleX, dokud nejsou přijaty. + +Používáme přenosný formát databáze, který lze použít na všech podporovaných zařízeních - brzy přidáme možnost exportovat databázi chatu z mobilní aplikace, aby ji bylo možné použít na jiném zařízení. + +Na rozdíl od serverů federativních sítí (e-mail, XMPP nebo Matrix) servery SimpleX neukládají uživatelské účty, pouze předávají zprávy příjemcům, čímž chrání soukromí obou stran. Mezi odesílaným a přijímaným provozem serveru nejsou žádné společné identifikátory ani šifrované zprávy, a to díky dodatečné vrstvě šifrování doručovaných zpráv. Pokud tedy kdokoli sleduje provoz serveru, nemůže snadno zjistit, kdo s kým komunikuje (známé útoky na korelaci provozu viz [SimpleX whitepaper](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md)). + +### Uživatelé vlastní síť SimpleX + +Můžete používat SimpleX s vlastními servery a přitom komunikovat s lidmi, kteří používají servery předkonfigurované v aplikacích nebo jakékoli jiné servery SimpleX. + +Platforma SimpleX používá otevřený protokol a poskytuje SDK pro vytváření chatovacích botů, což umožňuje implementaci služeb, s nimiž mohou uživatelé komunikovat prostřednictvím aplikací SimpleX Chat - opravdu se těšíme, jaké služby SimpleX bude možné vytvořit. + +Pokud uvažujete o vývoji s platformou SimpleX, ať už jde o služby chatovacích botů pro uživatele aplikací SimpleX, nebo o integraci knihovny SimpleX Chat do vašich mobilních aplikací, obraťte se na nás pro případné rady a podporu. + +## Srovnání s jinými protokoly + +| | SimpleX chat | Signal, big platforms | XMPP, Matrix | P2P protocols | +| :--------------------------------------------- | :----------------: | :-------------------: | :-------------: | :-------------: | +| Vyžaduje uživatelské identifikátory | Ne = private | Ano1 | Ano2 | Yes3 | +| Možnost MITM útoku | Žádná = bezpečné | Ano4 | Ano | Ano | Ano | +| Závislost na DNS | Ne = neumlčitelné | Ano | Ano | Ne | +| Single operator or network | Ne = decentralizované | Ano | Ne | Ano5 | +| Centrální součást nebo jiný celosíťový útok | Ne = neumlčitelné | Ano | Ano2 | Ano6 | + +1. Obvykle na základě telefonního čísla, v některých případech na základě uživatelských jmen. +2. Založeno na DNS. +3. Veřejný klíč nebo jiné globálně jedinečné ID. +4. Pokud jsou servery provozovatele kompromitovány. +5. Sítě P2P a sítě založené na kryptoměnách jsou sice distribuované, ale nejsou decentralizované - fungují jako jediná síť s jediným jmenným prostorem uživatelských adres. +6. Sítě P2P mají buď centrální autoritu, nebo může být kompromitována celá síť - viz následující část. + +## Srovnání s protokoly pro zasílání zpráv [P2P][9]. + +Existuje několik protokolů P2P pro chatování/zprávy a jejich implementací, jejichž cílem je vyřešit problém soukromí a centralizace, ale mají svůj vlastní soubor problémů, kvůli kterým jsou méně spolehlivé než navrhovaný návrh, složitější na implementaci a analýzu a zranitelnější vůči útokům. + +1. Sítě [P2P][9] používají k směrování zpráv/požadavků v síti některou variantu [DHT][10]. Implementace DHT mají složité návrhy, které musí vyvažovat spolehlivost, záruku doručení a latenci. Navrhovaný návrh má lepší záruky doručení i nižší latenci (zpráva je předávána vícekrát paralelně, pokaždé přes jeden uzel, přičemž se používají servery vybrané příjemcem, zatímco v sítích P2P je zpráva předávána přes `O(log N)` uzlů postupně, přičemž se používají uzly vybrané algoritmem). + +2. Navrhovaný návrh na rozdíl od většiny sítí P2P nemá žádné globální identifikátory uživatelů, a to ani dočasné. + +3. P2P samo o sobě neřeší problém [útoku MITM][2] a většina existujících řešení nepoužívá pro počáteční výměnu klíčů zprávy mimo pásmo. Navrhované řešení využívá pro počáteční výměnu klíčů zprávy mimo pásmo nebo v některých případech již existující bezpečná a důvěryhodná spojení. + +4. Implementace P2P mohou být blokovány některými poskytovateli internetu (jako například [BitTorrent][11]). Navrhovaný návrh je transportně agnostický - může fungovat přes standardní webové protokoly a servery mohou být nasazeny na stejných doménách jako webové stránky. + +5. Všechny známé sítě P2P jsou pravděpodobně zranitelné vůči [Sybilovu útoku][12], protože každý uzel je zjistitelný a síť funguje jako celek. Známá opatření ke snížení pravděpodobnosti Sybilova útoku buď vyžadují centralizovanou složku, nebo nákladný [proof of work][13]. Navrhovaný návrh naopak nemá žádnou zjistitelnost serverů - servery nejsou propojeny, nejsou známy navzájem ani všem klientům. Síť SimpleX je fragmentovaná a funguje jako několik izolovaných spojení. To znemožňuje útoky na celou síť SimpleX - i když jsou některé servery kompromitovány, ostatní části sítě mohou fungovat normálně a postižení klienti mohou přejít na používání jiných serverů, aniž by ztratili kontakty nebo zprávy. + +6. Sítě P2P jsou pravděpodobně [zranitelné][14] vůči [útoku DRDoS][15]. V navrhovaném návrhu klienti pouze předávají provoz ze známého důvěryhodného spojení a nelze je použít k odrážení a zesilování provozu v celé síti. + +[1]: https://en.wikipedia.org/wiki/End-to-end_encryption +[2]: https://en.wikipedia.org/wiki/Man-in-the-middle_attack +[9]: https://en.wikipedia.org/wiki/Peer-to-peer +[10]: https://en.wikipedia.org/wiki/Distributed_hash_table +[11]: https://en.wikipedia.org/wiki/BitTorrent +[12]: https://en.wikipedia.org/wiki/Sybil_attack +[13]: https://en.wikipedia.org/wiki/Proof_of_work +[14]: https://www.usenix.org/conference/woot15/workshop-program/presentation/p2p-file-sharing-hell-exploiting-bittorrent +[15]: https://en.wikipedia.org/wiki/Denial-of-service_attack#Reflected_attack diff --git a/docs/lang/cs/SQL.md b/docs/lang/cs/SQL.md new file mode 100644 index 000000000..d9ea8f236 --- /dev/null +++ b/docs/lang/cs/SQL.md @@ -0,0 +1,55 @@ +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/SQL.md), [FR](/docs/lang/fr/SQL.md) | + +# Přístup ke zprávám v databázi + +## Dešifrování databází + +Chcete-li zobrazit data v databázi, musíte je nejprve dešifrovat. Nainstalujte `sqlcipher` pomocí svého oblíbeného správce balíčků a v adresáři s databázemi spusťte následující příkazy: +```bash +sqlcipher files_chat.db +pragma key="youDecryptionPassphrase"; +# Ujistěte se, že vše funguje správně +select * from users; +``` + +Pokud se zobrazí `Parse error: no such table: users`, ujistěte se, že jste zadali správnou přístupovou frázi a že jste ji v aplikaci pro Android změnili z náhodné (pokud jste tuto databázi získali ze zařízení s Androidem, samozřejmě). + +## SQL dotazy + +Můžete spouštět dotazy proti `direct_messages`, `group_messages` a `all_messages` (nebo jejich jednodušším alternativám `direct_messages_plain`, `group_messages_plain` a `all_messages_plain`), např: + +```sql +-- tato nebo vámi preferovaná nastavení můžete vložit do souboru ~/.sqliterc +-- aby přetrvaly napříč relacemi klienta sqlite3 +.mode column +.headers on +.nullvalue NULL + +-- jednoduché pohledy na direct, group a all_messages +-- s deduplikací uživatelských zpráv pro group a all_messages; +-- pouze události chatu 'x.msg.new' ("nová zpráva") - filtruje události služby; +-- msg_sent je 0 pro přijaté, 1 pro odeslané +select * from direct_messages_plain; +select * from group_messages_plain; +select * from all_messages_plain; + +-- dotaz na další podrobnosti historie chatu pomocí běžného SQL, například: +-- soubory, které jste nabídli k odeslání +select * from direct_messages where msg_sent = 1 and chat_msg_event = 'x.file'; +-- vše, co catherine poslala v souvislosti s kočkami +select * from direct_messages where msg_sent = 0 and contact = 'catherine' and msg_body like '%cats%'; +-- veškerá korespondence s alice v #teamu +select * from group_messages where group_name = 'team' and contact = 'alice'; + +-- shrňte data z chatu +select contact_or_group, num_messages from ( + select + contact as contact_or_group, count(1) as num_messages + from direct_messages_plain group by contact + union + select + group_name as contact_or_group, count(1) as num_messages + from group_messages_plain group by group_name +) +order by num_messages desc; +``` diff --git a/docs/lang/cs/TRANSLATIONS.md b/docs/lang/cs/TRANSLATIONS.md new file mode 100644 index 000000000..0cdd13a2b --- /dev/null +++ b/docs/lang/cs/TRANSLATIONS.md @@ -0,0 +1,58 @@ +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/TRANSLATIONS.md) | + +# Přispívání překladů do SimpleX Chat + +Obrovské díky za váš zájem o překlady SimpleX Chat - velmi nám to pomáhá zpřístupnit jej širšímu okruhu uživatelů a vaší pomoci si opravdu vážíme. + +Vyžaduje to značnou časovou investici - většina lidí ji zpočátku podceňuje - a průběžnou údržbu v průběhu vývoje aplikace. + +Tento dokument vznikl proto, abychom tento proces urychlili, a podělili se s vámi o některé důležité "háčky", které jsme objevili při práci s Weblate - platformou, kterou používáme pro překlady rozhraní. + +## Než začnete překládat + +1. Vytvořte si účet na Weblate a použijte stejný e-mail, který používáte na GitHubu - díky tomu budou vaše příspěvky spojeny s vaším účtem na GitHubu a v některých případech vám to může pomoci. Jakmile bude překlad uvolněn pro uživatele, přidáme jméno vašeho účtu do [seznamu překladatelů](https://github.com/simplex-chat/simplex-chat#translate-the-apps). + +2. Před zahájením překladu je třeba podepsat jednoduchou smlouvu s přispěvatelem prostřednictvím Weblate - to proto, aby se předešlo případným konfliktům kolem práv duševního vlastnictví. + +3. Můžeme vás také přidat do skupiny překladatelů pro případné dotazy a aktualizace - spojte se se mnou přes chat. + +## Průběh překladu + +1. Začněte prosím od [aplikace pro Android](https://hosted.weblate.org/projects/simplex-chat/android/), a to jak při časově nejnáročnějším počátečním překladu, tak při pozdějším přidávání případných řetězců. Za prvé, řetězce pro iOS se mohou ve Weblate objevit s určitým zpožděním, protože to od nás vyžaduje ruční krok, než se zobrazí. Zadruhé, aplikace Android je nastavena jako slovník pro aplikaci iOS a 2/3 všech řetězců vyžadují jen kliknutí pro jejich převod z Androidu do iOS (to ještě nějakou dobu trvá, Weblate to bohužel neautomatizuje). + +2. Některé řetězce není třeba překládat, ale přesto je třeba je překopírovat - v uživatelském rozhraní Weblate je k tomu tlačítko: + +weblate: zkopírovat zdroj do překladu + +3. Weblate má také automatické návrhy, které mohou proces urychlit. Někdy je lze použít tak, jak jsou, jindy je třeba je upravit - kliknutím je použijete v překladu. + +4. Jakmile jsou všechny řetězce v aplikaci pro Android přeloženy, zkontrolujte je, abyste zajistili konzistentní styl a jazyk, aby se pro podobné uživatelské akce důsledně používala stejná slova jako v angličtině. Někdy budete muset použít různá slova v případech, kdy angličtina má jen jedno, snažte se prosím tyto volby používat důsledně v podobných kontextech, aby to bylo pro koncové uživatele jednodušší. + +5. Při překladu [aplikace pro iOS](https://hosted.weblate.org/projects/simplex-chat/ios/) je velká část řetězců naprosto stejná - lze je jedním kliknutím překopírovat do sekce glosář. Vizuální nápovědou, že to lze provést, je to, že celý zdrojový řetězec je zvýrazněn žlutě. Mnoho dalších řetězců je velmi podobných, liší se pouze syntaxí interpolace nebo způsobem použití tučného písma - vyžadují minimální úpravy. Existují některé řetězce, které jsou jedinečné pro platformu iOS - ty je třeba přeložit zvlášť. + +weblate: automatické návrhy + +## Po dokončení překladu + +Jakmile budou aplikace pro Android i iOS přeloženy, dejte nám prosím vědět. + +My pak: + - zkontrolujeme všechny překlady a navrhneme případné opravy - to také zabere trochu času :) + - sloučíme je do zdrojového kódu - během toho bude weblate uzamčen pro změny. + - vytvoříme beta verze aplikací pro iOS i Android - můžeme vás také přidat do interních skupin testerů, abyste mohli aplikace instalovat dříve než ostatní. + - Vydáme ji pro naše uživatele beta verzí - jedná se o více než tisíc lidí, kteří používají naše beta verze. + - Vydání aplikace a uvedení nového jazyka v oznámení. + +*Upozornění*: pokud je to možné, snažíme se zachovat konzistentní funkce aplikace mezi platformami Android a iOS, takže nový jazyk vydáme a oznámíme, až budou obě platformy přeloženy. Neznamená to, že to musíte udělat vy, ale budeme muset počkat, až druhou platformu přeloží někdo jiný. Pokud ale začnete od Androidu, přidání iOS obvykle trvá 3-4x kratší dobu. + +## Co bude dál + +1. Jakmile budeme aplikaci aktualizovat, zveřejníme aktualizace ve skupině překladatelů. Nemáte absolutně žádnou povinnost tyto dodatečné řetězce překládat. Nesmírně si však vážíme toho, pokud tak učiníte, protože uživatelé mají mnohem lepší zážitek, když jsou závislí na vašich překladech, než když nějaká nová část aplikace přeložena není. + +2. Adopci ve vaší zemi / jazykové skupině můžete pomoci také překládáním našich dokumentů - právě jsme s tím začali - a také obsahu našich webových stránek. Objevilo se mnoho žádostí o to a v současné době přidáváme překladový rámec pro webové stránky. + +3. Také pokud chcete být moderátorem/adminem skupiny uživatelů ve vašem jazyce, jakmile bude aplikace přeložena, můžeme takovou skupinu hostit - připravujeme komunitní směrnice a přidáváme do aplikace některé moderátorské nástroje, které budou vydány v březnu ve verzi v5. + +Ještě jednou děkujeme, že nám pomáháte rozvíjet SimpleX Chat! + +Evgeny, zakladatel SimpleX Chat. diff --git a/docs/lang/cs/WEBRTC.md b/docs/lang/cs/WEBRTC.md new file mode 100644 index 000000000..3a9dc30a8 --- /dev/null +++ b/docs/lang/cs/WEBRTC.md @@ -0,0 +1,142 @@ +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/WEBRTC.md), [FR](/docs/lang/fr/WEBRTC.md) | + +# Použití vlastních serverů WebRTC ICE v SimpleX Chat + +## Nasazení serveru STUN/TURN + +V tomto průvodci budeme používat nejvybavenější a nejosvědčenější implementaci serveru STUN/TURN - [`coturn`](https://github.com/coturn/coturn) a [`Ubuntu 20.04 LTS`](https://ubuntu.com/download/server) distribuci Linuxu. + +0. Získejte certifikáty `stun.$Vaše_doména` a `turn.$Vaše_doména`. + + Používáme [Let's Encrypt](https://letsencrypt.org/getting-started/). + +1. Nainstalujte balíček `coturn` z hlavního repozitáře. + +```sh +apt update && apt install coturn`. +``` + +2. Odkomentujte `TURNSERVER_ENABLED=1` z `/etc/default/coturn`: + +```sh +sed -i '/TURN/s/^#//g' /etc/default/coturn +``` + +3. Konfigurace `coturn` v souboru `/etc/turnserver.conf`: + + Viz také komentáře k jednotlivým volbám. + +```sh +# Naslouchejte také na portu 443 pro tls. +alt-tls-listening-port=443 +# Použijte otisky prstů ve zprávách TURN +fingerprint +# Použijte mechanismus dlouhodobých pověření +lt-cred-mech +# Vaše pověření +user=$YOUR_LOGIN:$YOUR_PASSWORD +# Vaše doména serveru +server-name=$YOUR_DOMAIN +# Výchozí sféra, která bude použita pro uživatele, pokud nebyl nalezen explicitní vztah origin/realm +realm=$YOUR_DOMAIN +# Cesta k vašim certifikátům. Ujistěte se, že jsou čitelné pro proces cotun user/group +cert=/var/lib/turn/cert.pem +pkey=/var/lib/turn/key.pem +# Použijte 2066 bitů předdefinovaného DH klíče TLS +dh2066 +# Přihlaste se do journalctl +syslog +# Uživatel/skupina, která bude provozovat službu coturn +proc-user=turnserver +proc-group=turnserver +# Zakázat slabé šifrování +no-tlsv1 +no-tlsv1_1 +no-tlsv1_2 +``` + +4. Spusťte a povolte službu `coturn`: + +```sh +systemctl enable coturn && systemctl start coturn +``` + +5. Pokud používáte firewall `ufw`, otevřete případně příslušné porty: + +- **3478** - "obyčejný" TURN/STUN; +- **5349** - TURN/STUN přes TLS; +- **443** - TURN/STUN přes TLS, který může obejít brány firewall; +- **49152:65535** - rozsah portů, který bude společnost Coturn ve výchozím nastavení používat pro přenos TURN. + +```sh +ufw allow 3478 && \ +ufw allow 443 && \ +ufw allow 5349 && \ +ufw allow 49152:65535/tcp && \ +ufw allow 49152:65535/udp +``` + +## Konfigurace mobilních aplikací + +Konfigurace mobilní aplikace pro použití vašeho serveru: + +1. Otevřete `Nastavení / Síť a servery / WebRTC ICE servery` a přepněte přepínač `Konfigurovat ICE servery`. + +2. Do pole zadejte všechny adresy serverů, jednu na řádek, například pokud máte servery na portu 5349: + +``` +stun:stun.example.com:5349 +turn:username:password@turn.example.com:5349 +``` + +To je vše - nyní můžete uskutečňovat audio a video hovory prostřednictvím vlastního serveru, aniž byste s našimi servery sdíleli jakákoli data (kromě výměny klíčů s kontaktem v šifrovaných zprávách E2E). + +## Řešení problémů + +- **Zjistěte, zda je server dostupný**: + + Spusťte tento příkaz v terminálu: + + ```sh + ping + ``` + + Pokud jsou pakety přenášeny, server je v provozu! + +- **Zjistěte, zda jsou otevřené porty**: + + Spusťte tento příkaz v terminálu: + + ```sh + nc -zvw10 443 5349 + ``` + + Měli byste vidět: + + ``` + Připojení k portu 443 [tcp/https] se podařilo! + Připojení k 5349 port [tcp/*] uspělo! + ``` + +- **Test připojení STUN/TURN**: + + 1. Přejděte na [IceTest](https://icetest.info/). + + 2. Do části **Sestavit seznam serverů ICE** přidejte: + + . + + - `STUN: stun::` a stiskněte `Add STUN`. + - `TURN: turn::`, `Username: `, `Credential: ` a stiskněte `Add TURN` + + Kde `` je 443 nebo 5349. + + 3. Měli byste vidět své servery v sekci **ICE server list**. Pokud je vše správně nastaveno, stiskněte `Start test`: + + + + 4. V části **Výsledky** byste měli vidět něco takového: + + + + Pokud výsledky zobrazují kandidáty `srflx` a `relay`, je vše nastaveno správně! diff --git a/images/kuketz-blog.jpg b/images/kuketz-blog.jpg new file mode 100644 index 000000000..a2edfb7c5 Binary files /dev/null and b/images/kuketz-blog.jpg differ diff --git a/images/privacy-guides.jpg b/images/privacy-guides.jpg new file mode 100644 index 000000000..f15a8862f Binary files /dev/null and b/images/privacy-guides.jpg differ diff --git a/images/simplex-chat-logo-only.svg b/images/simplex-chat-logo-only.svg new file mode 100644 index 000000000..6d423bf5c --- /dev/null +++ b/images/simplex-chat-logo-only.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/images/simplex-chat-logo.svg b/images/simplex-chat-logo.svg index 6d423bf5c..2f42e5073 100644 --- a/images/simplex-chat-logo.svg +++ b/images/simplex-chat-logo.svg @@ -1,16 +1,30 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + - + + + + + + + diff --git a/images/trail-of-bits.jpg b/images/trail-of-bits.jpg new file mode 100644 index 000000000..a3cb03b7e Binary files /dev/null and b/images/trail-of-bits.jpg differ diff --git a/package.yaml b/package.yaml index cd9a258f8..19674fc55 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 4.5.4.2 +version: 4.6.0.0 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 782dfc74f..7de66a5bd 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplex-chat -version: 4.5.4.2 +version: 4.6.0.0 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat @@ -85,7 +85,8 @@ library Simplex.Chat.Migrations.M20230129_drop_chat_items_group_idx Simplex.Chat.Migrations.M20230206_item_deleted_by_group_member_id Simplex.Chat.Migrations.M20230303_group_link_role - Simplex.Chat.Migrations.M20230304_file_description + Simplex.Chat.Migrations.M20230317_hidden_profiles + Simplex.Chat.Migrations.M20230318_file_description Simplex.Chat.Migrations.M20230321_agent_file_deleted Simplex.Chat.Mobile Simplex.Chat.Mobile.WebRTC diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index d58b0a4bd..392e260e7 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -42,7 +42,7 @@ import Data.Maybe (catMaybes, fromMaybe, isJust, isNothing, listToMaybe, mapMayb import Data.Text (Text) import qualified Data.Text as T import Data.Text.Encoding (encodeUtf8) -import Data.Time (NominalDiffTime, addUTCTime) +import Data.Time (NominalDiffTime, addUTCTime, defaultTimeLocale, formatTime) import Data.Time.Clock (UTCTime, diffUTCTime, getCurrentTime, nominalDiffTimeToSeconds) import Data.Time.Clock.System (SystemTime, systemToUTCTime) import Data.Time.LocalTime (getCurrentTimeZone, getZonedTime) @@ -204,7 +204,7 @@ activeAgentServers ChatConfig {defaultServers} srvSel = . map (\ServerCfg {server} -> server) . filter (\ServerCfg {enabled} -> enabled) -startChatController :: forall m. (MonadUnliftIO m, MonadReader ChatController m) => Bool -> Bool -> m (Async ()) +startChatController :: forall m. ChatMonad' m => Bool -> Bool -> m (Async ()) startChatController subConns enableExpireCIs = do asks smpAgent >>= resumeAgentClient users <- fromRight [] <$> runExceptT (withStore' getUsers) @@ -242,7 +242,7 @@ startChatController subConns enableExpireCIs = do startExpireCIThread user setExpireCIFlag user True -subscribeUsers :: forall m. (MonadUnliftIO m, MonadReader ChatController m) => [User] -> m () +subscribeUsers :: forall m. ChatMonad' m => [User] -> m () subscribeUsers users = do let (us, us') = partition activeUser users subscribe us @@ -251,7 +251,7 @@ subscribeUsers users = do subscribe :: [User] -> m () subscribe = mapM_ $ runExceptT . subscribeUserConnections Agent.subscribeConnections -restoreCalls :: (MonadUnliftIO m, MonadReader ChatController m) => m () +restoreCalls :: ChatMonad' m => m () restoreCalls = do savedCalls <- fromRight [] <$> runExceptT (withStore' $ \db -> getCalls db) let callsMap = M.fromList $ map (\call@Call {contactId} -> (contactId, call)) savedCalls @@ -275,7 +275,7 @@ stopChatController ChatController {smpAgent, agentAsync = s, sndFiles, rcvFiles, mapM_ hClose fs atomically $ writeTVar files M.empty -execChatCommand :: (MonadUnliftIO m, MonadReader ChatController m) => ByteString -> m ChatResponse +execChatCommand :: ChatMonad' m => ByteString -> m ChatResponse execChatCommand s = do u <- readTVarIO =<< asks currentUser case parseChatCommand s of @@ -323,27 +323,61 @@ processChatCommand = \case DefaultAgentServers {smp} <- asks $ defaultServers . config pure (smp, []) ListUsers -> CRUsersList <$> withStore' getUsersInfo - APISetActiveUser userId -> do - u <- asks currentUser - user <- withStore $ \db -> getSetActiveUser db userId + APISetActiveUser userId' viewPwd_ -> withUser $ \user -> do + user' <- privateGetUser userId' + validateUserPassword user user' viewPwd_ + withStore' $ \db -> setActiveUser db userId' setActive ActiveNone - atomically . writeTVar u $ Just user - pure $ CRActiveUser user - SetActiveUser uName -> withUserName uName APISetActiveUser - APIDeleteUser userId delSMPQueues -> do - user <- withStore (`getUser` userId) - when (activeUser user) $ throwChatError (CECantDeleteActiveUser userId) - users <- withStore' getUsers - -- shouldn't happen - last user should be active - when (length users == 1) $ throwChatError (CECantDeleteLastUser userId) - filesInfo <- withStore' (`getUserFileInfo` user) - withChatLock "deleteUser" . procCmd $ do - forM_ filesInfo $ \fileInfo -> deleteFile user fileInfo - withAgent $ \a -> deleteUser a (aUserId user) delSMPQueues - withStore' (`deleteUserRecord` user) - setActive ActiveNone - ok_ - DeleteUser uName delSMPQueues -> withUserName uName $ \uId -> APIDeleteUser uId delSMPQueues + let user'' = user' {activeUser = True} + asks currentUser >>= atomically . (`writeTVar` Just user'') + pure $ CRActiveUser user'' + SetActiveUser uName viewPwd_ -> do + tryError (withStore (`getUserIdByName` uName)) >>= \case + Left _ -> throwChatError CEUserUnknown + Right userId -> processChatCommand $ APISetActiveUser userId viewPwd_ + APIHideUser userId' (UserPwd viewPwd) -> withUser $ \_ -> do + user' <- privateGetUser userId' + case viewPwdHash user' of + Just _ -> throwChatError $ CEUserAlreadyHidden userId' + _ -> do + when (T.null viewPwd) $ throwChatError $ CEEmptyUserPassword userId' + users <- withStore' getUsers + unless (length (filter (isNothing . viewPwdHash) users) > 1) $ throwChatError $ CECantHideLastUser userId' + viewPwdHash' <- hashPassword + setUserPrivacy user' {viewPwdHash = viewPwdHash', showNtfs = False} + where + hashPassword = do + salt <- drgRandomBytes 16 + let hash = B64UrlByteString $ C.sha512Hash $ encodeUtf8 viewPwd <> salt + pure $ Just UserPwdHash {hash, salt = B64UrlByteString salt} + APIUnhideUser userId' viewPwd_ -> withUser $ \user -> do + user' <- privateGetUser userId' + case viewPwdHash user' of + Nothing -> throwChatError $ CEUserNotHidden userId' + _ -> do + validateUserPassword user user' viewPwd_ + setUserPrivacy user' {viewPwdHash = Nothing, showNtfs = True} + APIMuteUser userId' viewPwd_ -> withUser $ \user -> do + user' <- privateGetUser userId' + validateUserPassword user user' viewPwd_ + setUserPrivacy user' {showNtfs = False} + APIUnmuteUser userId' viewPwd_ -> withUser $ \user -> do + user' <- privateGetUser userId' + case viewPwdHash user' of + Just _ -> throwChatError $ CECantUnmuteHiddenUser userId' + _ -> do + validateUserPassword user user' viewPwd_ + setUserPrivacy user' {showNtfs = True} + HideUser viewPwd -> withUser $ \User {userId} -> processChatCommand $ APIHideUser userId viewPwd + UnhideUser -> withUser $ \User {userId} -> processChatCommand $ APIUnhideUser userId Nothing + MuteUser -> withUser $ \User {userId} -> processChatCommand $ APIMuteUser userId Nothing + UnmuteUser -> withUser $ \User {userId} -> processChatCommand $ APIUnmuteUser userId Nothing + APIDeleteUser userId' delSMPQueues viewPwd_ -> withUser $ \user -> do + user' <- privateGetUser userId' + validateUserPassword user user' viewPwd_ + checkDeleteChatUser user' + withChatLock "deleteUser" . procCmd $ deleteChatUser user' delSMPQueues + DeleteUser uName delSMPQueues viewPwd_ -> withUserName uName $ \userId -> APIDeleteUser userId delSMPQueues viewPwd_ StartChat subConns enableExpireCIs -> withUser' $ \_ -> asks agentAsync >>= readTVarIO >>= \case Just _ -> pure CRChatRunning @@ -377,6 +411,10 @@ processChatCommand = \case asks incognitoMode >>= atomically . (`writeTVar` onOff) ok_ APIExportArchive cfg -> checkChatStopped $ exportArchive cfg >> ok_ + ExportArchive -> do + ts <- liftIO getCurrentTime + let filePath = "simplex-chat." <> formatTime defaultTimeLocale "%FT%H%M%SZ" ts <> ".zip" + processChatCommand $ APIExportArchive $ ArchiveConfig filePath Nothing Nothing APIImportArchive cfg -> withStoreChanged $ importArchive cfg APIDeleteStorage -> withStoreChanged deleteStorage APIStorageEncryption cfg -> withStoreChanged $ sqlCipherExport cfg @@ -761,7 +799,7 @@ processChatCommand = \case assertDirectAllowed user MDSnd ct XCallInv_ calls <- asks currentCalls withChatLock "sendCallInvitation" $ do - callId <- CallId <$> (asks idsDrg >>= liftIO . (`randomBytes` 16)) + callId <- CallId <$> drgRandomBytes 16 dhKeyPair <- if encryptedCall callType then Just <$> liftIO C.generateKeyPair' else pure Nothing let invitation = CallInvitation {callType, callDhPubKey = fst <$> dhKeyPair} callState = CallInvitationSent {localCallType = callType, localDhPrivKey = snd <$> dhKeyPair} @@ -1263,7 +1301,7 @@ processChatCommand = \case gInfo <- withStore $ \db -> getGroupInfo db user groupId assertUserGroupRole gInfo GRAdmin when (mRole > GRMember) $ throwChatError $ CEGroupMemberInitialRole gInfo mRole - groupLinkId <- GroupLinkId <$> (asks idsDrg >>= liftIO . (`randomBytes` 16)) + groupLinkId <- GroupLinkId <$> drgRandomBytes 16 let crClientData = encodeJSON $ CRDataGroup groupLinkId (connId, cReq) <- withAgent $ \a -> createConnection a (aUserId user) True SCMContact $ Just crClientData withStore $ \db -> createGroupLink db user gInfo connId cReq groupLinkId mRole @@ -1479,7 +1517,7 @@ processChatCommand = \case withStore' (\db -> getConnReqContactXContactId db user cReqHash) >>= \case (Just contact, _) -> pure $ CRContactAlreadyExists user contact (_, xContactId_) -> procCmd $ do - let randomXContactId = XContactId <$> (asks idsDrg >>= liftIO . (`randomBytes` 16)) + let randomXContactId = XContactId <$> drgRandomBytes 16 xContactId <- maybe randomXContactId pure xContactId_ -- [incognito] generate profile to send -- if user makes a contact request using main profile, then turns on incognito mode and repeats the request, @@ -1644,6 +1682,42 @@ processChatCommand = \case <$> if live then pure Nothing else Just . addUTCTime (realToFrac ttl) <$> liftIO getCurrentTime + drgRandomBytes :: Int -> m ByteString + drgRandomBytes n = asks idsDrg >>= liftIO . (`randomBytes` n) + privateGetUser :: UserId -> m User + privateGetUser userId = + tryError (withStore (`getUser` userId)) >>= \case + Left _ -> throwChatError CEUserUnknown + Right user -> pure user + validateUserPassword :: User -> User -> Maybe UserPwd -> m () + validateUserPassword User {userId} User {userId = userId', viewPwdHash} viewPwd_ = + forM_ viewPwdHash $ \pwdHash -> + let pwdOk = case viewPwd_ of + Nothing -> userId == userId' + Just (UserPwd viewPwd) -> validPassword viewPwd pwdHash + in unless pwdOk $ throwChatError CEUserUnknown + validPassword :: Text -> UserPwdHash -> Bool + validPassword pwd UserPwdHash {hash = B64UrlByteString hash, salt = B64UrlByteString salt} = + hash == C.sha512Hash (encodeUtf8 pwd <> salt) + setUserPrivacy :: User -> m ChatResponse + setUserPrivacy user = do + asks currentUser >>= atomically . (`writeTVar` Just user) + withStore' (`updateUserPrivacy` user) + pure $ CRUserPrivacy user + checkDeleteChatUser :: User -> m () + checkDeleteChatUser user@User {userId} = do + when (activeUser user) $ throwChatError (CECantDeleteActiveUser userId) + users <- withStore' getUsers + unless (length users > 1 && (isJust (viewPwdHash user) || length (filter (isNothing . viewPwdHash) users) > 1)) $ + throwChatError (CECantDeleteLastUser userId) + setActive ActiveNone + deleteChatUser :: User -> Bool -> m ChatResponse + deleteChatUser user delSMPQueues = do + filesInfo <- withStore' (`getUserFileInfo` user) + forM_ filesInfo $ \fileInfo -> deleteFile user fileInfo + withAgent $ \a -> deleteUser a (aUserId user) delSMPQueues + withStore' (`deleteUserRecord` user) + ok_ assertDirectAllowed :: ChatMonad m => User -> MsgDirection -> Contact -> CMEventTag e -> m () assertDirectAllowed user dir ct event = @@ -1660,7 +1734,7 @@ assertDirectAllowed user dir ct event = XCallInv_ -> False _ -> True -startExpireCIThread :: forall m. (MonadUnliftIO m, MonadReader ChatController m) => User -> m () +startExpireCIThread :: forall m. ChatMonad' m => User -> m () startExpireCIThread user@User {userId} = do expireThreads <- asks expireCIThreads atomically (TM.lookup userId expireThreads) >>= \case @@ -1679,12 +1753,12 @@ startExpireCIThread user@User {userId} = do forM_ ttl $ \t -> expireChatItems user t False threadDelay interval -setExpireCIFlag :: (MonadUnliftIO m, MonadReader ChatController m) => User -> Bool -> m () +setExpireCIFlag :: ChatMonad' m => User -> Bool -> m () setExpireCIFlag User {userId} b = do expireFlags <- asks expireCIFlags atomically $ TM.insert userId b expireFlags -setAllExpireCIFlags :: (MonadUnliftIO m, MonadReader ChatController m) => Bool -> m () +setAllExpireCIFlags :: ChatMonad' m => Bool -> m () setAllExpireCIFlags b = do expireFlags <- asks expireCIFlags atomically $ do @@ -2293,7 +2367,7 @@ processAgentMessageConn user _ agentConnId END = withStore (\db -> getConnectionEntity db user $ AgentConnId agentConnId) >>= \case RcvDirectMsgConnection _ (Just ct@Contact {localDisplayName = c}) -> do toView $ CRContactAnotherClient user ct - showToast (c <> "> ") "connected to another client" + whenUserNtfs user $ showToast (c <> "> ") "connected to another client" unsetActive $ ActiveC c entity -> toView $ CRSubscriptionEnd user entity processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do @@ -2428,8 +2502,9 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do incognitoProfile <- forM customUserProfileId $ \profileId -> withStore (\db -> getProfileById db userId profileId) toView $ CRContactConnected user ct (fmap fromLocalProfile incognitoProfile) when (directOrUsed ct) $ createFeatureEnabledItems ct - setActive $ ActiveC c - showToast (c <> "> ") "connected" + whenUserNtfs user $ do + setActive $ ActiveC c + showToast (c <> "> ") "connected" forM_ groupLinkId $ \_ -> probeMatchingContacts ct $ contactConnIncognito ct forM_ viaUserContactLink $ \userContactLinkId -> withStore' (\db -> getUserContactLinkById db userId userContactLinkId) >>= \case @@ -2559,13 +2634,15 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do let GroupInfo {groupProfile = GroupProfile {description}} = gInfo memberConnectedChatItem gInfo m forM_ description $ groupDescriptionChatItem gInfo m - setActive $ ActiveG gName - showToast ("#" <> gName) "you are connected to group" + whenUserNtfs user $ do + setActive $ ActiveG gName + showToast ("#" <> gName) "you are connected to group" GCInviteeMember -> do memberConnectedChatItem gInfo m toView $ CRJoinedGroupMember user gInfo m {memberStatus = GSMemConnected} - setActive $ ActiveG gName - showToast ("#" <> gName) $ "member " <> localDisplayName (m :: GroupMember) <> " is connected" + whenGroupNtfs user gInfo $ do + setActive $ ActiveG gName + showToast ("#" <> gName) $ "member " <> localDisplayName (m :: GroupMember) <> " is connected" intros <- withStore' $ \db -> createIntroductions db members m void . sendGroupMessage user gInfo members . XGrpMemNew $ memberInfo m forM_ intros $ \intro -> @@ -2807,7 +2884,8 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do toView $ CRAcceptingGroupJoinRequest user gInfo ct _ -> do toView $ CRReceivedContactRequest user cReq - showToast (localDisplayName <> "> ") "wants to connect to you" + whenUserNtfs user $ + showToast (localDisplayName <> "> ") "wants to connect to you" _ -> pure () incAuthErrCounter :: ConnectionEntity -> Connection -> AgentErrorType -> m () @@ -2888,8 +2966,9 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do memberConnectedChatItem gInfo m toView $ CRConnectedToGroupMember user gInfo m let g = groupName' gInfo - setActive $ ActiveG g - showToast ("#" <> g) $ "member " <> c <> " is connected" + whenGroupNtfs user gInfo $ do + setActive $ ActiveG g + showToast ("#" <> g) $ "member " <> c <> " is connected" probeMatchingContacts :: Contact -> Bool -> m () probeMatchingContacts ct connectedIncognito = do @@ -2915,7 +2994,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do messageError = toView . CRMessageError user "error" newContentMessage :: Contact -> MsgContainer -> RcvMessage -> MsgMeta -> m () - newContentMessage ct@Contact {localDisplayName = c, contactUsed, chatSettings} mc msg@RcvMessage {sharedMsgId_} msgMeta = do + newContentMessage ct@Contact {localDisplayName = c, contactUsed} mc msg@RcvMessage {sharedMsgId_} msgMeta = do unless contactUsed $ withStore' $ \db -> updateContactUsed db user ct checkIntegrityCreateItem (CDDirectRcv ct) msgMeta let ExtMsgContent content fInv_ _ _ = mcExtMsgContent mc @@ -2929,7 +3008,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do live = fromMaybe False live_ ciFile_ <- processFileInvitation fInv_ content $ \db -> createRcvFileTransfer db userId ct ChatItem {formattedText} <- newChatItem (CIRcvMsgContent content) ciFile_ timed_ live - when (enableNtfs chatSettings) $ do + whenContactNtfs user ct $ do showMsgToast (c <> "> ") content formattedText setActive $ ActiveC c where @@ -3028,7 +3107,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do SMDSnd -> messageError "x.msg.del: contact attempted invalid message delete" newGroupContentMessage :: GroupInfo -> GroupMember -> MsgContainer -> RcvMessage -> MsgMeta -> m () - newGroupContentMessage gInfo@GroupInfo {chatSettings} m@GroupMember {localDisplayName = c} mc msg@RcvMessage {sharedMsgId_} msgMeta = do + newGroupContentMessage gInfo m@GroupMember {localDisplayName = c} mc msg@RcvMessage {sharedMsgId_} msgMeta = do let (ExtMsgContent content fInv_ _ _) = mcExtMsgContent mc if isVoice content && not (groupFeatureAllowed SGFVoice gInfo) then void $ newChatItem (CIRcvGroupFeatureRejected GFVoice) Nothing Nothing False @@ -3039,7 +3118,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do ciFile_ <- processFileInvitation fInv_ content $ \db -> createRcvGroupFileTransfer db userId m ChatItem {formattedText} <- newChatItem (CIRcvMsgContent content) ciFile_ timed_ live let g = groupName' gInfo - when (enableNtfs chatSettings) $ do + whenGroupNtfs user gInfo $ do showMsgToast ("#" <> g <> " " <> c <> "> ") content formattedText setActive $ ActiveG g where @@ -3113,8 +3192,9 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do let ciFile = Just $ CIFile {fileId, fileName, fileSize, filePath = Nothing, fileStatus = CIFSRcvInvitation} ci <- saveRcvChatItem' user (CDDirectRcv ct) msg sharedMsgId_ msgMeta (CIRcvMsgContent $ MCFile "") ciFile Nothing False toView $ CRNewChatItem user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci) - showToast (c <> "> ") "wants to send a file" - setActive $ ActiveC c + whenContactNtfs user ct $ do + showToast (c <> "> ") "wants to send a file" + setActive $ ActiveC c -- TODO remove once XFile is discontinued processGroupFileInvitation' :: GroupInfo -> GroupMember -> FileInvitation -> RcvMessage -> MsgMeta -> m () @@ -3126,8 +3206,9 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do ci <- saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ msgMeta (CIRcvMsgContent $ MCFile "") ciFile Nothing False groupMsgToView gInfo m ci msgMeta let g = groupName' gInfo - showToast ("#" <> g <> " " <> c <> "> ") "wants to send a file" - setActive $ ActiveG g + whenGroupNtfs user gInfo $ do + showToast ("#" <> g <> " " <> c <> "> ") "wants to send a file" + setActive $ ActiveG g receiveInlineMode :: FileInvitation -> Maybe MsgContent -> Integer -> m (Maybe InlineFileMode) receiveInlineMode FileInvitation {fileSize, fileInline, fileDescr} mc_ chSize = case (fileInline, fileDescr) of @@ -3258,7 +3339,9 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do toView $ CRNewChatItem user (AChatItem SCTGroup SMDRcv (GroupChat gInfo) ci) processGroupInvitation :: Contact -> GroupInvitation -> RcvMessage -> MsgMeta -> m () - processGroupInvitation ct@Contact {localDisplayName = c, activeConn = Connection {customUserProfileId, groupLinkId = groupLinkId'}} inv@GroupInvitation {fromMember = (MemberIdRole fromMemId fromRole), invitedMember = (MemberIdRole memId memRole), connRequest, groupLinkId} msg msgMeta = do + processGroupInvitation ct inv msg msgMeta = do + let Contact {localDisplayName = c, activeConn = Connection {customUserProfileId, groupLinkId = groupLinkId'}} = ct + GroupInvitation {fromMember = (MemberIdRole fromMemId fromRole), invitedMember = (MemberIdRole memId memRole), connRequest, groupLinkId} = inv checkIntegrityCreateItem (CDDirectRcv ct) msgMeta when (fromRole < GRAdmin || fromRole < memRole) $ throwChatError (CEGroupContactRole c) when (fromMemId == memId) $ throwChatError CEGroupDuplicateMemberId @@ -3278,7 +3361,8 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do withStore' $ \db -> setGroupInvitationChatItemId db user groupId (chatItemId' ci) toView $ CRNewChatItem user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci) toView $ CRReceivedGroupInvitation user gInfo ct memRole - showToast ("#" <> localDisplayName <> " " <> c <> "> ") "invited you to join the group" + whenContactNtfs user ct $ + showToast ("#" <> localDisplayName <> " " <> c <> "> ") "invited you to join the group" where sameGroupLinkId :: Maybe GroupLinkId -> Maybe GroupLinkId -> Bool sameGroupLinkId (Just gli) (Just gli') = gli == gli' @@ -4126,17 +4210,26 @@ getCreateActiveUser st = do getWithPrompt :: String -> IO String getWithPrompt s = putStr (s <> ": ") >> hFlush stdout >> getLine -showMsgToast :: (MonadUnliftIO m, MonadReader ChatController m) => Text -> MsgContent -> Maybe MarkdownList -> m () +whenUserNtfs :: ChatMonad' m => User -> m () -> m () +whenUserNtfs User {showNtfs, activeUser} = when $ showNtfs || activeUser + +whenContactNtfs :: ChatMonad' m => User -> Contact -> m () -> m () +whenContactNtfs user Contact {chatSettings} = whenUserNtfs user . when (enableNtfs chatSettings) + +whenGroupNtfs :: ChatMonad' m => User -> GroupInfo -> m () -> m () +whenGroupNtfs user GroupInfo {chatSettings} = whenUserNtfs user . when (enableNtfs chatSettings) + +showMsgToast :: ChatMonad' m => Text -> MsgContent -> Maybe MarkdownList -> m () showMsgToast from mc md_ = showToast from $ maybe (msgContentText mc) (mconcat . map hideSecret) md_ where hideSecret :: FormattedText -> Text hideSecret FormattedText {format = Just Secret} = "..." hideSecret FormattedText {text} = text -showToast :: (MonadUnliftIO m, MonadReader ChatController m) => Text -> Text -> m () +showToast :: ChatMonad' m => Text -> Text -> m () showToast title text = atomically . (`writeTBQueue` Notification {title, text}) =<< asks notifyQ -notificationSubscriber :: (MonadUnliftIO m, MonadReader ChatController m) => m () +notificationSubscriber :: ChatMonad' m => m () notificationSubscriber = do ChatController {notifyQ, sendNotification} <- ask forever $ atomically (readTBQueue notifyQ) >>= liftIO . sendNotification @@ -4196,8 +4289,8 @@ withStoreCtx ctx_ action = do chatCommandP :: Parser ChatCommand chatCommandP = choice - [ "/mute " *> ((`ShowMessages` False) <$> chatNameP'), - "/unmute " *> ((`ShowMessages` True) <$> chatNameP'), + [ "/mute " *> ((`ShowMessages` False) <$> chatNameP), + "/unmute " *> ((`ShowMessages` True) <$> chatNameP), "/create user" *> ( do sameSmp <- (A.space *> "same_smp=" *> onOffP) <|> pure False @@ -4205,10 +4298,18 @@ chatCommandP = pure $ CreateActiveUser uProfile sameSmp ), "/users" $> ListUsers, - "/_user " *> (APISetActiveUser <$> A.decimal), - ("/user " <|> "/u ") *> (SetActiveUser <$> displayName), - "/_delete user " *> (APIDeleteUser <$> A.decimal <* " del_smp=" <*> onOffP), - "/delete user " *> (DeleteUser <$> displayName <*> pure True), + "/_user " *> (APISetActiveUser <$> A.decimal <*> optional (A.space *> jsonP)), + ("/user " <|> "/u ") *> (SetActiveUser <$> displayName <*> optional (A.space *> pwdP)), + "/_hide user " *> (APIHideUser <$> A.decimal <* A.space <*> jsonP), + "/_unhide user " *> (APIUnhideUser <$> A.decimal <*> optional (A.space *> jsonP)), + "/_mute user " *> (APIMuteUser <$> A.decimal <*> optional (A.space *> jsonP)), + "/_unmute user " *> (APIUnmuteUser <$> A.decimal <*> optional (A.space *> jsonP)), + "/hide user " *> (HideUser <$> pwdP), + "/unhide user" $> UnhideUser, + "/mute user" $> MuteUser, + "/unmute user" $> UnmuteUser, + "/_delete user " *> (APIDeleteUser <$> A.decimal <* " del_smp=" <*> onOffP <*> optional (A.space *> jsonP)), + "/delete user " *> (DeleteUser <$> displayName <*> pure True <*> optional (A.space *> pwdP)), ("/user" <|> "/u") $> ShowActiveUser, "/_start subscribe=" *> (StartChat <$> onOffP <* " expire=" <*> onOffP), "/_start" $> StartChat True True, @@ -4217,10 +4318,11 @@ chatCommandP = "/_app suspend " *> (APISuspendChat <$> A.decimal), "/_resubscribe all" $> ResubscribeAllConnections, "/_temp_folder " *> (SetTempFolder <$> filePath), - "/_files_folder " *> (SetFilesFolder <$> filePath), + ("/_files_folder " <|> "/files_folder ") *> (SetFilesFolder <$> filePath), "/_xftp " *> (APISetXFTPConfig <$> ("on " *> (Just <$> jsonP) <|> ("off" $> Nothing))), "/xftp " *> (APISetXFTPConfig <$> ("on " *> (Just <$> xftpCfgP) <|> ("off" $> Nothing))), "/_db export " *> (APIExportArchive <$> jsonP), + "/db export" $> ExportArchive, "/_db import " *> (APIImportArchive <$> jsonP), "/_db delete" $> APIDeleteStorage, "/_db encryption " *> (APIStorageEncryption <$> jsonP), @@ -4312,6 +4414,7 @@ chatCommandP = ("/help address" <|> "/ha") $> ChatHelp HSMyAddress, ("/help messages" <|> "/hm") $> ChatHelp HSMessages, ("/help settings" <|> "/hs") $> ChatHelp HSSettings, + ("/help db" <|> "/hd") $> ChatHelp HSDatabase, ("/help" <|> "/h") $> ChatHelp HSMain, ("/group " <|> "/g ") *> char_ '#' *> (NewGroup <$> groupProfile), "/_group " *> (APINewGroup <$> A.decimal <* A.space <*> jsonP), @@ -4438,6 +4541,7 @@ chatCommandP = n <- (A.space *> A.takeByteString) <|> pure "" pure $ if B.null n then name else safeDecodeUtf8 n textP = safeDecodeUtf8 <$> A.takeByteString + pwdP = jsonP <|> (UserPwd . safeDecodeUtf8 <$> A.takeTill (== ' ')) msgTextP = jsonP <|> textP stringP = T.unpack . safeDecodeUtf8 <$> A.takeByteString filePath = stringP diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index c1192dfe5..7a4e91150 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -19,7 +19,7 @@ import Control.Monad.Except import Control.Monad.IO.Unlift import Control.Monad.Reader import Crypto.Random (ChaChaDRG) -import Data.Aeson (FromJSON, ToJSON) +import Data.Aeson (FromJSON (..), ToJSON (..)) import qualified Data.Aeson as J import qualified Data.Attoparsec.ByteString.Char8 as A import Data.ByteString.Char8 (ByteString) @@ -176,7 +176,7 @@ data ChatController = ChatController logFilePath :: Maybe FilePath } -data HelpSection = HSMain | HSFiles | HSGroups | HSContacts | HSMyAddress | HSMarkdown | HSMessages | HSSettings +data HelpSection = HSMain | HSFiles | HSGroups | HSContacts | HSMyAddress | HSMarkdown | HSMessages | HSSettings | HSDatabase deriving (Show, Generic) instance ToJSON HelpSection where @@ -187,10 +187,18 @@ data ChatCommand = ShowActiveUser | CreateActiveUser Profile Bool | ListUsers - | APISetActiveUser UserId - | SetActiveUser UserName - | APIDeleteUser UserId Bool - | DeleteUser UserName Bool + | APISetActiveUser UserId (Maybe UserPwd) + | SetActiveUser UserName (Maybe UserPwd) + | APIHideUser UserId UserPwd + | APIUnhideUser UserId (Maybe UserPwd) + | APIMuteUser UserId (Maybe UserPwd) + | APIUnmuteUser UserId (Maybe UserPwd) + | HideUser UserPwd + | UnhideUser + | MuteUser + | UnmuteUser + | APIDeleteUser UserId Bool (Maybe UserPwd) + | DeleteUser UserName Bool (Maybe UserPwd) | StartChat {subscribeConnections :: Bool, enableExpireChatItems :: Bool} | APIStopChat | APIActivateChat @@ -201,6 +209,7 @@ data ChatCommand | APISetXFTPConfig (Maybe XFTPFileConfig) | SetIncognito Bool | APIExportArchive ArchiveConfig + | ExportArchive | APIImportArchive ArchiveConfig | APIDeleteStorage | APIStorageEncryption DBEncryptionConfig @@ -412,6 +421,7 @@ data ChatResponse | CRFileTransferStatus User (FileTransfer, [Integer]) -- TODO refactor this type to FileTransferStatus | CRUserProfile {user :: User, profile :: Profile} | CRUserProfileNoChange {user :: User} + | CRUserPrivacy {user :: User} | CRVersionInfo {versionInfo :: CoreVersionInfo} | CRInvitation {user :: User, connReqInvitation :: ConnReqInvitation} | CRSentConfirmation {user :: User} @@ -535,6 +545,16 @@ instance ToJSON ChatResponse where toJSON = J.genericToJSON . sumTypeJSON $ dropPrefix "CR" toEncoding = J.genericToEncoding . sumTypeJSON $ dropPrefix "CR" +newtype UserPwd = UserPwd {unUserPwd :: Text} + deriving (Eq, Show) + +instance FromJSON UserPwd where + parseJSON v = UserPwd <$> parseJSON v + +instance ToJSON UserPwd where + toJSON (UserPwd p) = toJSON p + toEncoding (UserPwd p) = toEncoding p + newtype AgentQueueId = AgentQueueId QueueId deriving (Eq, Show) @@ -715,11 +735,17 @@ data ChatErrorType | CENoConnectionUser {agentConnId :: AgentConnId} | CENoSndFileUser {agentSndFileId :: AgentSndFileId} | CENoRcvFileUser {agentRcvFileId :: AgentRcvFileId} + | CEUserUnknown | CEActiveUserExists -- TODO delete | CEUserExists {contactName :: ContactName} | CEDifferentActiveUser {commandUserId :: UserId, activeUserId :: UserId} | CECantDeleteActiveUser {userId :: UserId} | CECantDeleteLastUser {userId :: UserId} + | CECantHideLastUser {userId :: UserId} + | CECantUnmuteHiddenUser {userId :: UserId} + | CEEmptyUserPassword {userId :: UserId} + | CEUserAlreadyHidden {userId :: UserId} + | CEUserNotHidden {userId :: UserId} | CEChatNotStarted | CEChatNotStopped | CEChatStoreChanged @@ -797,7 +823,9 @@ instance ToJSON SQLiteError where throwDBError :: ChatMonad m => DatabaseError -> m () throwDBError = throwError . ChatErrorDatabase -type ChatMonad m = (MonadUnliftIO m, MonadReader ChatController m, MonadError ChatError m) +type ChatMonad' m = (MonadUnliftIO m, MonadReader ChatController m) + +type ChatMonad m = (ChatMonad' m, MonadError ChatError m) chatCmdError :: Maybe User -> String -> ChatResponse chatCmdError user = CRChatCmdError user . ChatError . CECommandError diff --git a/src/Simplex/Chat/Help.hs b/src/Simplex/Chat/Help.hs index 7334b32a8..37770d1bd 100644 --- a/src/Simplex/Chat/Help.hs +++ b/src/Simplex/Chat/Help.hs @@ -11,6 +11,7 @@ module Simplex.Chat.Help messagesHelpInfo, markdownInfo, settingsInfo, + databaseHelpInfo, ) where @@ -85,7 +86,7 @@ chatHelpInfo = green "Create your address: " <> highlight "/address", "", green "Other commands:", - indent <> highlight "/help " <> " - help on: " <> listHighlight ["groups", "contacts", "messages", "files", "address", "settings"], + indent <> highlight "/help " <> " - help on: " <> listHighlight ["groups", "contacts", "messages", "files", "address", "settings", "db"], indent <> highlight "/profile " <> " - show / update user profile", indent <> highlight "/delete " <> " - delete contact and all messages with them", indent <> highlight "/chats " <> " - most recent chats", @@ -276,3 +277,17 @@ settingsInfo = indent <> highlight "/get stats " <> " - get usage statistics", indent <> highlight "/reset stats " <> " - reset usage statistics" ] + +databaseHelpInfo :: [StyledString] +databaseHelpInfo = + map + styleMarkdown + [ green "Database export:", + indent <> highlight "/db export " <> " - create database export file that can be imported in mobile apps", + indent <> highlight "/files_folder " <> " - set files folder path to include app files in the exported archive", + "", + green "Database encryption:", + indent <> highlight "/db encrypt " <> " - encrypt chat database with key/passphrase", + indent <> highlight "/db key " <> " - change the key of the encrypted app database", + indent <> highlight "/db decrypt " <> " - decrypt chat database" + ] diff --git a/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs b/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs new file mode 100644 index 000000000..27ae711a0 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs @@ -0,0 +1,14 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20230317_hidden_profiles where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20230317_hidden_profiles :: Query +m20230317_hidden_profiles = + [sql| +ALTER TABLE users ADD COLUMN view_pwd_hash BLOB; +ALTER TABLE users ADD COLUMN view_pwd_salt BLOB; +ALTER TABLE users ADD COLUMN show_ntfs INTEGER NOT NULL DEFAULT 1; +|] diff --git a/src/Simplex/Chat/Migrations/M20230304_file_description.hs b/src/Simplex/Chat/Migrations/M20230318_file_description.hs similarity index 90% rename from src/Simplex/Chat/Migrations/M20230304_file_description.hs rename to src/Simplex/Chat/Migrations/M20230318_file_description.hs index 54bf3b8ff..76d4ec979 100644 --- a/src/Simplex/Chat/Migrations/M20230304_file_description.hs +++ b/src/Simplex/Chat/Migrations/M20230318_file_description.hs @@ -1,6 +1,6 @@ {-# LANGUAGE QuasiQuotes #-} -module Simplex.Chat.Migrations.M20230304_file_description where +module Simplex.Chat.Migrations.M20230318_file_description where import Database.SQLite.Simple (Query) import Database.SQLite.Simple.QQ (sql) @@ -8,8 +8,8 @@ import Database.SQLite.Simple.QQ (sql) -- this table includes file descriptions for the recipients for both sent and received files -- in the latter case the user is the recipient -m20230304_file_description :: Query -m20230304_file_description = +m20230318_file_description :: Query +m20230318_file_description = [sql| CREATE TABLE xftp_file_descriptions ( file_descr_id INTEGER PRIMARY KEY AUTOINCREMENT, diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 68ebe73e2..f5e7525e6 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -30,7 +30,10 @@ CREATE TABLE users( active_user INTEGER NOT NULL DEFAULT 0, created_at TEXT CHECK(created_at NOT NULL), updated_at TEXT CHECK(updated_at NOT NULL), - agent_user_id INTEGER CHECK(agent_user_id NOT NULL), -- 1 for active user + agent_user_id INTEGER CHECK(agent_user_id NOT NULL), + view_pwd_hash BLOB, + view_pwd_salt BLOB, + show_ntfs INTEGER NOT NULL DEFAULT 1, -- 1 for active user FOREIGN KEY(user_id, local_display_name) REFERENCES display_names(user_id, local_display_name) ON DELETE CASCADE diff --git a/src/Simplex/Chat/Mobile.hs b/src/Simplex/Chat/Mobile.hs index d40df7cfe..cf7029101 100644 --- a/src/Simplex/Chat/Mobile.hs +++ b/src/Simplex/Chat/Mobile.hs @@ -12,12 +12,15 @@ import Control.Monad.Except import Control.Monad.Reader import Data.Aeson (ToJSON (..)) import qualified Data.Aeson as J +import qualified Data.ByteString.Base64.URL as U import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy.Char8 as LB import Data.Functor (($>)) import Data.List (find) import qualified Data.List.NonEmpty as L import Data.Maybe (fromMaybe) +import qualified Data.Text as T +import Data.Text.Encoding (encodeUtf8) import Data.Word (Word8) import Database.SQLite.Simple (SQLError (..)) import qualified Database.SQLite.Simple as DB @@ -65,6 +68,8 @@ foreign export ccall "chat_parse_markdown" cChatParseMarkdown :: CString -> IO C foreign export ccall "chat_parse_server" cChatParseServer :: CString -> IO CJSONString +foreign export ccall "chat_password_hash" cChatPasswordHash :: CString -> CString -> IO CString + foreign export ccall "chat_encrypt_media" cChatEncryptMedia :: CString -> Ptr Word8 -> CInt -> IO CString foreign export ccall "chat_decrypt_media" cChatDecryptMedia :: CString -> Ptr Word8 -> CInt -> IO CString @@ -122,6 +127,12 @@ cChatParseMarkdown s = newCAString . chatParseMarkdown =<< peekCAString s cChatParseServer :: CString -> IO CJSONString cChatParseServer s = newCAString . chatParseServer =<< peekCAString s +cChatPasswordHash :: CString -> CString -> IO CString +cChatPasswordHash cPwd cSalt = do + pwd <- peekCAString cPwd + salt <- peekCAString cSalt + newCAString $ chatPasswordHash pwd salt + mobileChatOpts :: String -> String -> ChatOpts mobileChatOpts dbFilePrefix dbKey = ChatOpts @@ -242,6 +253,12 @@ chatParseServer = LB.unpack . J.encode . toServerAddress . strDecode . B.pack enc :: StrEncoding a => a -> String enc = B.unpack . strEncode +chatPasswordHash :: String -> String -> String +chatPasswordHash pwd salt = either (const "") passwordHash salt' + where + salt' = U.decode $ B.pack salt + passwordHash = B.unpack . U.encode . C.sha512Hash . (encodeUtf8 (T.pack pwd) <>) + data APIResponse = APIResponse {corr :: Maybe CorrId, resp :: ChatResponse} deriving (Generic) diff --git a/src/Simplex/Chat/Store.hs b/src/Simplex/Chat/Store.hs index be444e545..b443fa36e 100644 --- a/src/Simplex/Chat/Store.hs +++ b/src/Simplex/Chat/Store.hs @@ -41,6 +41,7 @@ module Simplex.Chat.Store getUserByContactRequestId, getUserFileInfo, deleteUserRecord, + updateUserPrivacy, createDirectConnection, createConnReqConnection, getProfileById, @@ -289,6 +290,7 @@ import Data.Functor (($>)) import Data.Int (Int64) import Data.List (sortBy, sortOn) import Data.List.NonEmpty (NonEmpty) +import qualified Data.List.NonEmpty as L import Data.Maybe (fromMaybe, isJust, isNothing, listToMaybe, mapMaybe) import Data.Ord (Down (..)) import Data.Text (Text) @@ -357,7 +359,8 @@ import Simplex.Chat.Migrations.M20230118_recreate_smp_servers import Simplex.Chat.Migrations.M20230129_drop_chat_items_group_idx import Simplex.Chat.Migrations.M20230206_item_deleted_by_group_member_id import Simplex.Chat.Migrations.M20230303_group_link_role -import Simplex.Chat.Migrations.M20230304_file_description +import Simplex.Chat.Migrations.M20230317_hidden_profiles +import Simplex.Chat.Migrations.M20230318_file_description import Simplex.Chat.Migrations.M20230321_agent_file_deleted import Simplex.Chat.Protocol import Simplex.Chat.Types @@ -426,7 +429,8 @@ schemaMigrations = ("20230129_drop_chat_items_group_idx", m20230129_drop_chat_items_group_idx), ("20230206_item_deleted_by_group_member_id", m20230206_item_deleted_by_group_member_id), ("20230303_group_link_role", m20230303_group_link_role), - ("20230304_file_description", m20230304_file_description), + ("20230317_hidden_profiles", m20230317_hidden_profiles), + ("20230318_file_description", m20230318_file_description), ("20230321_agent_file_deleted", m20230321_agent_file_deleted) ] @@ -463,8 +467,8 @@ createUserRecord db (AgentUserId auId) Profile {displayName, fullName, image, pr when activeUser $ DB.execute_ db "UPDATE users SET active_user = 0" DB.execute db - "INSERT INTO users (agent_user_id, local_display_name, active_user, contact_id, created_at, updated_at) VALUES (?,?,?,0,?,?)" - (auId, displayName, activeUser, currentTs, currentTs) + "INSERT INTO users (agent_user_id, local_display_name, active_user, contact_id, show_ntfs, created_at, updated_at) VALUES (?,?,?,0,?,?,?)" + (auId, displayName, activeUser, True, currentTs, currentTs) userId <- insertedRowId db DB.execute db @@ -481,7 +485,7 @@ createUserRecord db (AgentUserId auId) Profile {displayName, fullName, image, pr (profileId, displayName, userId, True, currentTs, currentTs) contactId <- insertedRowId db DB.execute db "UPDATE users SET contact_id = ? WHERE user_id = ?" (contactId, userId) - pure $ toUser (userId, auId, contactId, profileId, activeUser, displayName, fullName, image, userPreferences) + pure $ toUser $ (userId, auId, contactId, profileId, activeUser, displayName, fullName, image, userPreferences, True) :. (Nothing, Nothing) getUsersInfo :: DB.Connection -> IO [UserInfo] getUsersInfo db = getUsers db >>= mapM getUserInfo @@ -519,16 +523,19 @@ getUsers db = userQuery :: Query userQuery = [sql| - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.local_display_name, ucp.full_name, ucp.image, ucp.preferences + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.local_display_name, ucp.full_name, ucp.image, ucp.preferences, u.show_ntfs, u.view_pwd_hash, u.view_pwd_salt FROM users u JOIN contacts uct ON uct.contact_id = u.contact_id JOIN contact_profiles ucp ON ucp.contact_profile_id = uct.contact_profile_id |] -toUser :: (UserId, UserId, ContactId, ProfileId, Bool, ContactName, Text, Maybe ImageData, Maybe Preferences) -> User -toUser (userId, auId, userContactId, profileId, activeUser, displayName, fullName, image, userPreferences) = - let profile = LocalProfile {profileId, displayName, fullName, image, preferences = userPreferences, localAlias = ""} - in User {userId, agentUserId = AgentUserId auId, userContactId, localDisplayName = displayName, profile, activeUser, fullPreferences = mergePreferences Nothing userPreferences} +toUser :: (UserId, UserId, ContactId, ProfileId, Bool, ContactName, Text, Maybe ImageData, Maybe Preferences, Bool) :. (Maybe B64UrlByteString, Maybe B64UrlByteString) -> User +toUser ((userId, auId, userContactId, profileId, activeUser, displayName, fullName, image, userPreferences, showNtfs) :. (viewPwdHash_, viewPwdSalt_)) = + User {userId, agentUserId = AgentUserId auId, userContactId, localDisplayName = displayName, profile, activeUser, fullPreferences, showNtfs, viewPwdHash} + where + profile = LocalProfile {profileId, displayName, fullName, image, preferences = userPreferences, localAlias = ""} + fullPreferences = mergePreferences Nothing userPreferences + viewPwdHash = UserPwdHash <$> viewPwdHash_ <*> viewPwdSalt_ setActiveUser :: DB.Connection -> UserId -> IO () setActiveUser db userId = do @@ -605,6 +612,19 @@ deleteUserRecord :: DB.Connection -> User -> IO () deleteUserRecord db User {userId} = DB.execute db "DELETE FROM users WHERE user_id = ?" (Only userId) +updateUserPrivacy :: DB.Connection -> User -> IO () +updateUserPrivacy db User {userId, showNtfs, viewPwdHash} = + DB.execute + db + [sql| + UPDATE users + SET view_pwd_hash = ?, view_pwd_salt = ?, show_ntfs = ? + WHERE user_id = ? + |] + (hashSalt viewPwdHash :. (showNtfs, userId)) + where + hashSalt = L.unzip . fmap (\UserPwdHash {hash, salt} -> (hash, salt)) + createConnReqConnection :: DB.Connection -> UserId -> ConnId -> ConnReqUriHash -> XContactId -> Maybe Profile -> Maybe GroupLinkId -> IO PendingContactConnection createConnReqConnection db userId acId cReqHash xContactId incognitoProfile groupLinkId = do createdAt <- getCurrentTime diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index d0fc6acf1..36ce9e863 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -110,11 +110,38 @@ data User = User localDisplayName :: ContactName, profile :: LocalProfile, fullPreferences :: FullPreferences, - activeUser :: Bool + activeUser :: Bool, + viewPwdHash :: Maybe UserPwdHash, + showNtfs :: Bool } deriving (Show, Generic, FromJSON) -instance ToJSON User where toEncoding = J.genericToEncoding J.defaultOptions +instance ToJSON User where + toEncoding = J.genericToEncoding J.defaultOptions {J.omitNothingFields = True} + toJSON = J.genericToJSON J.defaultOptions {J.omitNothingFields = True} + +newtype B64UrlByteString = B64UrlByteString ByteString + deriving (Eq, Show) + +instance FromField B64UrlByteString where fromField f = B64UrlByteString <$> fromField f + +instance ToField B64UrlByteString where toField (B64UrlByteString m) = toField m + +instance StrEncoding B64UrlByteString where + strEncode (B64UrlByteString m) = strEncode m + strP = B64UrlByteString <$> strP + +instance FromJSON B64UrlByteString where + parseJSON = strParseJSON "B64UrlByteString" + +instance ToJSON B64UrlByteString where + toJSON = strToJSON + toEncoding = strToJEncoding + +data UserPwdHash = UserPwdHash {hash :: B64UrlByteString, salt :: B64UrlByteString} + deriving (Eq, Show, Generic, FromJSON) + +instance ToJSON UserPwdHash where toEncoding = J.genericToEncoding J.defaultOptions data UserInfo = UserInfo { user :: User, diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 8cfbe66cd..27ebf9c5d 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -99,6 +99,7 @@ responseToView user_ ChatConfig {logLevel, testView} liveItems ts = \case HSMessages -> messagesHelpInfo HSMarkdown -> markdownInfo HSSettings -> settingsInfo + HSDatabase -> databaseHelpInfo CRWelcome user -> chatWelcome user CRContactsList u cs -> ttyUser u $ viewContactsList cs CRUserContactLink u UserContactLink {connReqContact, autoAccept} -> ttyUser u $ connReqContact_ "Your chat address:" connReqContact <> autoAcceptStatus_ autoAccept @@ -115,6 +116,7 @@ responseToView user_ ChatConfig {logLevel, testView} liveItems ts = \case CRFileTransferStatus u ftStatus -> ttyUser u $ viewFileTransferStatus ftStatus CRUserProfile u p -> ttyUser u $ viewUserProfile p CRUserProfileNoChange u -> ttyUser u ["user profile did not change"] + CRUserPrivacy u -> ttyUserPrefix u $ viewUserPrivacy u CRVersionInfo info -> viewVersionInfo logLevel info CRInvitation u cReq -> ttyUser u $ viewConnReqInvitation cReq CRSentConfirmation u -> ttyUser u ["confirmation sent!"] @@ -235,12 +237,16 @@ responseToView user_ ChatConfig {logLevel, testView} liveItems ts = \case CRAgentConnDeleted acId -> ["completed deleting connection, agent connection id: " <> sShow acId | logLevel <= CLLInfo] CRAgentUserDeleted auId -> ["completed deleting user" <> if logLevel <= CLLInfo then ", agent user id: " <> sShow auId else ""] CRMessageError u prefix err -> ttyUser u [plain prefix <> ": " <> plain err | prefix == "error" || logLevel <= CLLWarning] - CRChatCmdError u e -> ttyUser' u $ viewChatError logLevel e + CRChatCmdError u e -> ttyUserPrefix' u $ viewChatError logLevel e CRChatError u e -> ttyUser' u $ viewChatError logLevel e where ttyUser :: User -> [StyledString] -> [StyledString] - ttyUser _ [] = [] - ttyUser User {userId, localDisplayName = u} ss = prependFirst userPrefix ss + ttyUser user@User {showNtfs, activeUser} ss + | showNtfs || activeUser = ttyUserPrefix user ss + | otherwise = [] + ttyUserPrefix :: User -> [StyledString] -> [StyledString] + ttyUserPrefix _ [] = [] + ttyUserPrefix User {userId, localDisplayName = u} ss = prependFirst userPrefix ss where userPrefix = case user_ of Just User {userId = activeUserId} -> if userId /= activeUserId then prefix else "" @@ -248,6 +254,8 @@ responseToView user_ ChatConfig {logLevel, testView} liveItems ts = \case prefix = "[user: " <> highlight u <> "] " ttyUser' :: Maybe User -> [StyledString] -> [StyledString] ttyUser' = maybe id ttyUser + ttyUserPrefix' :: Maybe User -> [StyledString] -> [StyledString] + ttyUserPrefix' = maybe id ttyUserPrefix testViewChats :: [AChat] -> [StyledString] testViewChats chats = [sShow $ map toChatView chats] where @@ -299,14 +307,19 @@ chatItemDeletedText ci membership_ = deletedStateToText <$> chatItemDeletedState _ -> "" viewUsersList :: [UserInfo] -> [StyledString] -viewUsersList = map userInfo . sortOn ldn +viewUsersList = mapMaybe userInfo . sortOn ldn where ldn (UserInfo User {localDisplayName = n} _) = T.toLower n - userInfo (UserInfo User {localDisplayName = n, profile = LocalProfile {fullName}, activeUser} count) = - ttyFullName n fullName <> active <> unread + userInfo (UserInfo User {localDisplayName = n, profile = LocalProfile {fullName}, activeUser, showNtfs, viewPwdHash} count) + | activeUser || isNothing viewPwdHash = Just $ ttyFullName n fullName <> infoStr + | otherwise = Nothing where - active = if activeUser then highlight' " (active)" else "" - unread = if count /= 0 then plain $ " (unread: " <> show count <> ")" else "" + infoStr = if null info then "" else " (" <> mconcat (intersperse ", " info) <> ")" + info = + [highlight' "active" | activeUser] + <> [highlight' "hidden" | isJust viewPwdHash] + <> ["muted" | not showNtfs] + <> [plain ("unread: " <> show count) | count /= 0] muted :: ChatInfo c -> ChatItem c d -> Bool muted chat ChatItem {chatDir} = case (chat, chatDir) of @@ -728,6 +741,12 @@ viewUserProfile Profile {displayName, fullName} = "(the updated profile will be sent to all your contacts)" ] +viewUserPrivacy :: User -> [StyledString] +viewUserPrivacy User {showNtfs, viewPwdHash} = + [ "user messages are " <> if showNtfs then "shown" else "hidden (use /tail to view)", + "user profile is " <> if isJust viewPwdHash then "hidden" else "visible" + ] + -- TODO make more generic messages or split viewSMPServers :: ProtocolTypeI p => [ServerCfg p] -> Bool -> [StyledString] viewSMPServers servers testView = @@ -1218,9 +1237,15 @@ viewChatError logLevel = \case CENoRcvFileUser aFileId -> ["error: rcv file user not found, file id: " <> sShow aFileId | logLevel <= CLLError] CEActiveUserExists -> ["error: active user already exists"] CEUserExists name -> ["user with the name " <> ttyContact name <> " already exists"] + CEUserUnknown -> ["user does not exist or incorrect password"] CEDifferentActiveUser commandUserId activeUserId -> ["error: different active user, command user id: " <> sShow commandUserId <> ", active user id: " <> sShow activeUserId] CECantDeleteActiveUser _ -> ["cannot delete active user"] CECantDeleteLastUser _ -> ["cannot delete last user"] + CECantHideLastUser _ -> ["cannot hide the only not hidden user"] + CECantUnmuteHiddenUser _ -> ["cannot unmute hidden user"] + CEEmptyUserPassword _ -> ["cannot set empty password"] + CEUserAlreadyHidden _ -> ["user is already hidden"] + CEUserNotHidden _ -> ["user is not hidden"] CEChatNotStarted -> ["error: chat not started"] CEChatNotStopped -> ["error: chat not stopped"] CEChatStoreChanged -> ["error: chat store changed, please restart chat"] diff --git a/tests/ChatTests/Direct.hs b/tests/ChatTests/Direct.hs index b18b43c8d..6116eeb29 100644 --- a/tests/ChatTests/Direct.hs +++ b/tests/ChatTests/Direct.hs @@ -62,6 +62,7 @@ chatDirectTests = do it "chat items only expire for users who configured expiration" testEnableCIExpirationOnlyForOneUser it "disabling chat item expiration doesn't disable it for other users" testDisableCIExpirationOnlyForOneUser it "both users have configured timed messages with contacts, messages expire, restart" testUsersTimedMessages + it "user profile privacy: hide profiles and notificaitons" testUserPrivacy describe "chat item expiration" $ do it "set chat item TTL" testSetChatItemTTL describe "queue rotation" $ do @@ -787,13 +788,13 @@ testMuteContact = connectUsers alice bob alice #> "@bob hello" bob <# "alice> hello" - bob ##> "/mute alice" + bob ##> "/mute @alice" bob <## "ok" alice #> "@bob hi" (bob "/contacts" bob <## "alice (Alice) (muted, you can /unmute @alice)" - bob ##> "/unmute alice" + bob ##> "/unmute @alice" bob <## "ok" bob ##> "/contacts" bob <## "alice (Alice)" @@ -1502,6 +1503,104 @@ testUsersTimedMessages tmp = do alice <## ("Disappearing messages: enabled (you allow: yes (" <> ttl <> " sec), contact allows: yes (" <> ttl <> " sec))") alice #$> ("/clear bob", id, "bob: all messages are removed locally ONLY") -- to remove feature items +testUserPrivacy :: HasCallStack => FilePath -> IO () +testUserPrivacy = + testChat2 aliceProfile bobProfile $ + \alice bob -> do + connectUsers alice bob + alice ##> "/create user alisa" + showActiveUser alice "alisa" + -- connect using second user + connectUsers alice bob + alice #> "@bob hello" + bob <# "alisa> hello" + bob #> "@alisa hey" + alice <# "bob> hey" + -- hide user profile + alice ##> "/hide user my_password" + userHidden alice + -- shows messages when active + bob #> "@alisa hello again" + alice <# "bob> hello again" + alice ##> "/user alice" + showActiveUser alice "alice (Alice)" + -- does not show messages to user + bob #> "@alisa this won't show" + (alice "/users" + alice <## "alice (Alice) (active)" + (alice "/user alisa" + alice <## "user does not exist or incorrect password" + alice ##> "/user alisa wrong_password" + alice <## "user does not exist or incorrect password" + alice ##> "/user alisa my_password" + showActiveUser alice "alisa" + -- shows hidden user when active + alice ##> "/users" + alice <## "alice (Alice)" + alice <## "alisa (active, hidden, muted)" + -- hidden message is saved + alice ##> "/tail" + alice + <##? [ "bob> Disappearing messages: off", + "bob> Full deletion: off", + "bob> Voice messages: enabled", + "@bob hello", + "bob> hey", + "bob> hello again", + "bob> this won't show" + ] + -- change profile password + alice ##> "/unmute user" + alice <## "cannot unmute hidden user" + alice ##> "/hide user password" + alice <## "user is already hidden" + alice ##> "/unhide user" + userVisible alice + alice ##> "/hide user new_password" + userHidden alice + alice ##> "/_delete user 1 del_smp=on" + alice <## "cannot delete last user" + alice ##> "/_hide user 1 \"password\"" + alice <## "cannot hide the only not hidden user" + alice ##> "/user alice" + showActiveUser alice "alice (Alice)" + -- change profile privacy for inactive user via API requires correct password + alice ##> "/_unmute user 2" + alice <## "cannot unmute hidden user" + alice ##> "/_hide user 2 \"password\"" + alice <## "user is already hidden" + alice ##> "/_unhide user 2" + alice <## "user does not exist or incorrect password" + alice ##> "/_unhide user 2 \"wrong_password\"" + alice <## "user does not exist or incorrect password" + alice ##> "/_unhide user 2 \"new_password\"" + userVisible alice + alice ##> "/_hide user 2 \"another_password\"" + userHidden alice + -- check new password + alice ##> "/user alisa another_password" + showActiveUser alice "alisa" + alice ##> "/user alice" + showActiveUser alice "alice (Alice)" + alice ##> "/_delete user 2 del_smp=on" + alice <## "user does not exist or incorrect password" + alice ##> "/_delete user 2 del_smp=on \"wrong_password\"" + alice <## "user does not exist or incorrect password" + alice ##> "/_delete user 2 del_smp=on \"another_password\"" + alice <## "ok" + alice <## "completed deleting user" + where + userHidden alice = do + alice <## "user messages are hidden (use /tail to view)" + alice <## "user profile is hidden" + userVisible alice = do + alice <## "user messages are shown" + alice <## "user profile is visible" + testSetChatItemTTL :: HasCallStack => FilePath -> IO () testSetChatItemTTL = testChat2 aliceProfile bobProfile $ diff --git a/tests/MobileTests.hs b/tests/MobileTests.hs index 83e91f044..432f2c024 100644 --- a/tests/MobileTests.hs +++ b/tests/MobileTests.hs @@ -25,16 +25,16 @@ noActiveUser = "{\"resp\":{\"type\":\"chatCmdError\",\"chatError\":{\"type\":\"e activeUserExists :: String #if defined(darwin_HOST_OS) && defined(swiftJSON) -activeUserExists = "{\"resp\":{\"chatCmdError\":{\"user_\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true},\"chatError\":{\"error\":{\"errorType\":{\"userExists\":{\"contactName\":\"alice\"}}}}}}}" +activeUserExists = "{\"resp\":{\"chatCmdError\":{\"user_\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true,\"showNtfs\":true},\"chatError\":{\"error\":{\"errorType\":{\"userExists\":{\"contactName\":\"alice\"}}}}}}}" #else -activeUserExists = "{\"resp\":{\"type\":\"chatCmdError\",\"user_\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true},\"chatError\":{\"type\":\"error\",\"errorType\":{\"type\":\"userExists\",\"contactName\":\"alice\"}}}}" +activeUserExists = "{\"resp\":{\"type\":\"chatCmdError\",\"user_\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true,\"showNtfs\":true},\"chatError\":{\"type\":\"error\",\"errorType\":{\"type\":\"userExists\",\"contactName\":\"alice\"}}}}" #endif activeUser :: String #if defined(darwin_HOST_OS) && defined(swiftJSON) -activeUser = "{\"resp\":{\"activeUser\":{\"user\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true}}}}" +activeUser = "{\"resp\":{\"activeUser\":{\"user\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true,\"showNtfs\":true}}}}" #else -activeUser = "{\"resp\":{\"type\":\"activeUser\",\"user\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true}}}" +activeUser = "{\"resp\":{\"type\":\"activeUser\",\"user\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true,\"showNtfs\":true}}}" #endif chatStarted :: String @@ -73,7 +73,7 @@ pendingSubSummary = "{\"resp\":{\"type\":\"pendingSubSummary\"," <> userJSON <> #endif userJSON :: String -userJSON = "\"user\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true}" +userJSON = "\"user\":{\"userId\":1,\"agentUserId\":\"1\",\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"fullPreferences\":{\"timedMessages\":{\"allow\":\"no\"},\"fullDelete\":{\"allow\":\"no\"},\"voice\":{\"allow\":\"yes\"}},\"activeUser\":true,\"showNtfs\":true}" parsedMarkdown :: String #if defined(darwin_HOST_OS) && defined(swiftJSON) diff --git a/website/langs/ar.json b/website/langs/ar.json new file mode 100644 index 000000000..9dc3143de --- /dev/null +++ b/website/langs/ar.json @@ -0,0 +1,213 @@ +{ + "home": "الشاشة الرئيسية", + "reference": "المرجع", + "blog": "مدونة", + "why-simplex": "لماذا SimpleX", + "simplex-network": "شبكة SimpleX", + "simplex-explained": "شرح SimpleX", + "simplex-explained-tab-1-text": "1. تجربة المستخدم", + "simplex-privacy": "خصوصية SimpleX", + "simplex-explained-tab-3-text": "3. ما الذي تراة الخوادم", + "simplex-explained-tab-1-p-1": "يمكنك إنشاء جهات اتصال ومجموعات وإجراء محادثات ثنائية الاتجاه ، كما هو الحال في أي برنامج مراسلة آخر.", + "simplex-explained-tab-3-p-2": "يمكن للمستخدمين زيادة تحسين خصوصية البيانات الوصفية باستخدام Tor للوصول إلى الخوادم ، ومنع الارتباط بواسطة عنوان IP.", + "chat-bot-example": "مثال بوت الدردشة", + "smp-protocol": "بروتوكول SMP", + "chat-protocol": "بروتوكول الدردشة", + "donate": "تبرع", + "terminal-cli": "طرفية CLI", + "terms-and-privacy-policy": "الشروط وسياسة الخصوصية", + "hero-header": "إعادة تعريف الخصوصية", + "hero-overlay-1-textlink": "لماذا تعتبر معرفات المستخدم ضارة بالخصوصية؟", + "hero-overlay-2-textlink": "كيف يعمل SimpleX؟", + "hero-overlay-2-title": "لماذا تعتبر معرفات المستخدم ضارة بالخصوصية؟", + "feature-2-title": "تشفير
صور وملفات E2E", + "feature-3-title": "المجموعات السرية اللامركزية —
المستخدمون فقط يعرفون بوجودها", + "feature-5-title": "محادثات سرية اختفائية", + "feature-6-title": "مكالمات الصوت والفيديو
المشفرة بـ E2E", + "simplex-network-overlay-1-title": "مقارنة مع بروتوكولات المراسلة P2P", + "simplex-private-4-title": "وصول
اختياري عبر Tor", + "simplex-explained-tab-2-text": "2. كيف يعمل", + "simplex-explained-tab-1-p-2": "كيف يمكن أن تعمل مع قوائم انتظار أحادية الاتجاه وبدون معرفات ملف تعريف المستخدم؟", + "simplex-explained-tab-2-p-1": "لكل اتصال، تستخدم قائمتي انتظار منفصلتين للمراسلة لإرسال واستقبال الرسائل عبر خوادم مختلفة.", + "simplex-explained-tab-2-p-2": "تقوم الخوادم بتمرير الرسائل في اتجاه واحد فقط ، دون الحصول على الصورة الكاملة لمحادثات المستخدم أو اتصالاته.", + "simplex-explained-tab-3-p-1": "تحتوي الخوادم على بيانات اعتماد مجهولة منفصلة لكل قائمة انتظار ، ولا تعرف المستخدمين الذين ينتمون إليهم.", + "copyright-label": "مشروع مفتوح المصدر © SimpleX 2020-2023", + "simplex-chat-protocol": "بروتوكول دردشة SimpleX", + "developers": "المطورين", + "hero-subheader": "أول نظام مراسلة
بدون معرفات المستخدم", + "hero-p-1": "تحتوي التطبيقات الأخرى على معرّفات مستخدم: Signal ، و Matrix ، و Session ، و Briar ، و Jami ، و Cwtch ، وما إلى ذلك.
SimpleX ليس لديه ، ولا حتى أرقام عشوائية .
وهذا يحسن خصوصيتك بشكل جذري.", + "features": "الميزات", + "hero-2-header": "قم بإجراء اتصال خاص", + "hero-overlay-1-title": "كيف يعمل SimpleX؟", + "hero-2-header-desc": "يُظهر الفيديو كيفية اتصالك بصديقك عبر رمز الاستجابة السريعة لمرة واحدة ، شخصيًا أو عبر رابط فيديو. يمكنك أيضًا الاتصال من خلال مشاركة رابط الدعوة.", + "feature-1-title": "الرسائل المشفرة بواسطة E2E مع markdown والتحرير", + "feature-4-title": "الرسائل الصوتية المشفرة من الندين", + "privacy-matters-overlay-card-1-p-1": "تستخدم العديد من الشركات الكبيرة معلومات حول من تتصل به لتقدير دخلك ، وبيع المنتجات التي لا تحتاجها حقًا ، ولتحديد الأسعار.", + "feature-7-title": "قاعدة بيانات محمولة مشفرة mdash&؛ نقل ملف التعريف الخاص بك إلى جهاز آخر", + "feature-8-title": "وضع التصفح المتخفي —
فريد من نوعه لـ SimpleX Chat", + "simplex-private-1-title": "طبقتان من
التشفير من طرف إلى طرف", + "simplex-private-2-title": "طبقة إضافية من
تشفير الخادم", + "simplex-private-3-title": "تأمين نقل br> TLS> المصدق عليه", + "simplex-private-5-title": "طبقات متعددة من
حشوة المحتوى", + "simplex-private-7-title": "التحقق
من سلامة الرسالة", + "simplex-private-8-title": "خلط الرسائل
لتقليل من الارتباط", + "simplex-private-10-title": "المعرفات الزوجية المجهولة المؤقتة", + "simplex-private-card-3-point-1": "يتم استخدام TLS 1.2 / 1.3 مع خوارزميات قوية فقط لاتصالات الخادم والعميل.", + "simplex-private-card-3-point-2": "تعمل بصمة الخادم وربط القناة على منع هجمات MITM وإعادة التشغيل.", + "simplex-private-card-3-point-3": "استئناف الاتصال معطل لمنع هجمات الجلسة.", + "simplex-private-card-4-point-1": "لحماية عنوان IP الخاص بك ، يمكنك الوصول إلى الخوادم عبر Tor أو بعض شبكات تراكب النقل الأخرى.", + "simplex-private-card-5-point-1": "يستخدم SimpleX حشوة المحتوى لكل طبقة تشفير لإحباط هجمات حجم الرسالة.", + "simplex-private-card-6-point-2": "لمنع ذلك ، تقوم تطبيقات SimpleX بتمرير مفاتيح لمرة واحدة خارج النطاق ، عند مشاركة عنوان كرابط أو رمز QR.", + "simplex-private-card-8-point-1": "تعمل خوادم SimpleX كعقد مختلطة بزمن انتقال منخفض — الرسائل الواردة والصادرة لها ترتيب مختلف.", + "simplex-private-card-9-point-1": "كل رسالة انتظار تمرر الرسائل في اتجاه واحد ، بعناوين إرسال واستلام مختلفة.", + "simplex-private-card-9-point-2": "إنه يقلل من نواقل الهجوم ، مقارنة بوسطاء الرسائل التقليديين ، والبيانات الوصفية المتاحة.", + "simplex-private-card-10-point-1": "يستخدم SimpleX عناوين وبيانات اعتماد ثنائية مجهولة مؤقتة لكل جهة اتصال مستخدم أو عضو مجموعة.", + "privacy-matters-1-title": "الإعلانات والتمييز السعري", + "privacy-matters-1-overlay-1-title": "الخصوصية توفر لك المال", + "privacy-matters-1-overlay-1-linkText": "الخصوصية توفر لك المال", + "privacy-matters-2-title": "التلاعب بالانتخابات", + "privacy-matters-2-overlay-1-title": "تمنحك الخصوصية القوة", + "privacy-matters-3-title": "الادعاء بسبب ارتباط بريء", + "privacy-matters-3-overlay-1-title": "الخصوصية تحمي حريتك", + "privacy-matters-3-overlay-1-linkText": "الخصوصية تحمي حريتك", + "simplex-unique-1-title": "لديك خصوصية كاملة", + "simplex-unique-1-overlay-1-title": "الخصوصية الكاملة لهويتك وملفك الشخصي وجهات الاتصال والبيانات الوصفية", + "simplex-unique-2-title": "أنت محمي
من البريد العشوائي وإساءة الاستخدام", + "simplex-unique-3-title": "أنت تتحكم في بياناتك", + "simplex-unique-3-overlay-1-title": "ملكية ومراقبة وأمان بياناتك", + "simplex-unique-4-title": "أنت تمتلك شبكة SimpleX", + "simplex-unique-4-overlay-1-title": "لامركزية بالكامل — يمتلك المستخدمون شبكة SimpleX", + "hero-overlay-card-1-p-4": "هذا التصميم يمنع تسريب أي البيانات الوصفية للمستخدمين على مستوى التطبيق. لزيادة تحسين الخصوصية وحماية عنوان IP الخاص بك ، يمكنك الاتصال بخوادم المراسلة عبر Tor.", + "hero-overlay-card-1-p-5": "الأجهزة العميلة فقط هي التي تخزن ملفات تعريف المستخدمين، جهات الاتصال والمجموعات ؛ يتم إرسال الرسائل بتشفير ثنائي الطبقة من طرف إلى طرف.", + "hero-overlay-card-2-p-2": "يمكنهم بعد ذلك ربط هذه المعلومات بالشبكات الاجتماعية العامة الحالية ، وتحديد بعض الهويات الحقيقية.", + "simplex-network-overlay-card-1-li-3": "P2P لا يحل مشكلة هجوم MITM ، ومعظم التطبيقات الحالية لا تستخدم خارج النطاق رسائل للتبادل الأولي للمفاتيح. يستخدم SimpleX رسائل خارج النطاق أو ، في بعض الحالات ، اتصالات آمنة وموثوق بها موجودة مسبقًا لتبادل المفاتيح الأولي.", + "privacy-matters-overlay-card-1-p-3": "تستخدم بعض الشركات المالية والتأمين رسوماً بيانية اجتماعية لتحديد أسعار الفائدة وأقساط التأمين. عادةً ما تجعل الأشخاص ذوي الدخل المنخفض يدفعون أكثر — أو كما يسمى\"علاوة الفقر\".", + "privacy-matters-overlay-card-1-p-2": "يعرف تجار التجزئة عبر الإنترنت أن الأشخاص ذوي الدخل المنخفض هم أكثر عرضة لإجراء عمليات شراء عاجلة ، لذلك قد يفرضون أسعارًا أعلى أو يزيلون الخصومات.", + "simplex-private-6-title": "تبديل
خارج النطاق", + "simplex-private-9-title": "قوائم انتظار
أحادية الاتجاه", + "privacy-matters-overlay-card-1-p-4": "تحمي منصة SimpleX خصوصية اتصالاتك بشكل أفضل من أي بديل آخر ، مما يمنع تمامًا الرسم البياني الاجتماعي الخاص بك من أن يصبح متاحًا لأي شركات أو مؤسسات. حتى عندما يستخدم الأشخاص الخوادم التي توفرها SimpleX Chat ، فإننا لا نعرف عدد المستخدمين أو اتصالاتهم.", + "simplex-private-card-1-point-1": "بروتوكول السقاطة المزدوجة —
رسائل OTR مع السرية المستمرة واستعادة الاختراق.", + "simplex-private-card-1-point-2": "NaCL cryptobox في كل قائمة انتظار لمنع ارتباط حركة نقل البيانات بين قوائم انتظار الرسائل في حالة اختراق TLS.", + "simplex-private-card-2-point-1": "طبقة إضافية من تشفير الخادم للتسليم إلى المستلم ، لمنع الارتباط بين حركة نقل البيانات الخادم المستلمة والمرسلة في حالة اختراق TLS.", + "simplex-private-card-4-point-2": "لاستخدام SimpleX عبر Tor ، يرجى تثبيت تطبيق Orbot وتمكين وكيل SOCKS5 (أو VPN على iOS ).", + "simplex-private-card-5-point-2": "يجعل الرسائل ذات الأحجام المختلفة تبدو متشابهة للخوادم ومراقبي الشبكة.", + "simplex-private-card-6-point-1": "العديد من منصات الاتصال عرضة لهجمات MITM من قبل الخوادم أو موفري الشبكات.", + "simplex-private-card-7-point-1": "لضمان سلامة الرسائل يتم ترقيمها بالتسلسل وتضمين تجزئة الرسالة السابقة.", + "simplex-private-card-7-point-2": "إذا تمت إضافة أي رسالة أو إزالتها أو تغييرها ، فسيتم تنبيه المستلم.", + "simplex-private-card-10-point-2": "يسمح بتسليم الرسائل بدون معرفات ملف تعريف المستخدم ، مما يوفر خصوصية بيانات وصفية أفضل من البدائل.", + "privacy-matters-2-overlay-1-linkText": "تمنحك الخصوصية القوة", + "simplex-unique-2-overlay-1-title": "أفضل حماية من البريد العشوائي وإساءة الاستخدام", + "hero-overlay-card-1-p-3": "أنت تحدد الخادم (الخوادم) المراد استخدامه لتلقي الرسائل وجهات الاتصال الخاصة بك — الخوادم التي تستخدمها لإرسال الرسائل إليهم. من المرجح أن تستخدم كل محادثة خادمين مختلفين.", + "hero-overlay-card-1-p-1": "سأل العديد من المستخدمين: إذا لم يكن لدى SimpleX معرفات مستخدم ، فكيف يمكنها معرفة مكان تسليم الرسائل؟ ", + "hero-overlay-card-1-p-2": "لتقديم الرسائل ، بدلاً من معرفات المستخدم التي تستخدمها جميع المنصات الأخرى ، يستخدم SimpleX معرفات مجهولة مؤقتة زوجية لقوائم انتظار الرسائل، مختلفة لكل اتصال من اتصالاتك — لا توجد معرفات مستخدم دائمة.", + "simplex-network-overlay-card-1-p-1": " P2P بروتوكولات المراسلة والتطبيقات بها مشاكل مختلفة تجعلها أقل موثوقية من SimpleX وأكثر تعقيدًا في التحليل و عرضة لعدة أنواع من الهجمات.", + "hero-overlay-card-2-p-1": "عندما يكون لدى المستخدمين هويات ثابتة ، حتى لو كان هذا مجرد رقم عشوائي ، مثل معرف الجلسة ، فهناك خطر يتمثل في أن الموفر أو المهاجم يمكنه مراقبة كيفية اتصال المستخدمين وعدد الرسائل التي يرسلونها.", + "hero-overlay-card-1-p-6": "اقرأ المزيد في SimpleX whitepaper .", + "hero-overlay-card-2-p-3": "حتى مع معظم التطبيقات الخاصة التي تستخدم خدمات Tor v3 ، إذا تحدثت إلى جهتي اتصال مختلفتين عبر نفس الملف الشخصي ، فيمكنهما إثبات أنهما متصلان بنفس الشخص.", + "hero-overlay-card-2-p-4": "يحمي SimpleX من هذه الهجمات من خلال عدم وجود أي معرفات مستخدم في تصميمه. وإذا كنت تستخدم وضع التصفح المتخفي ، فسيكون لديك اسم عرض مختلف لكل جهة اتصال ، مع تجنب أي بيانات مشتركة بينهما.", + "simplex-network-overlay-card-1-li-6": "قد تكون شبكات P2P عرضة هجوم DRDoS ، عندما يتمكن العملاء من إعادة بث حركة المرور وتضخيمها ، مما يؤدي إلى رفض الخدمة على مستوى الشبكة. يقوم عملاء SimpleX فقط بترحيل حركة نقل البيانات من اتصال معروف ولا يمكن للمهاجم استخدامها لتضخيم حركة المرور في الشبكة بالكامل.", + "simplex-network-overlay-card-1-li-1": "تعتمد شبكات P2P على بعض المتغيرات من DHT لتوجيه الرسائل. يجب أن توازن تصميمات DHT بين ضمان التسليم وزمن الوصول. تتمتع SimpleX بضمان تسليم أفضل وزمن انتقال أقل من P2P ، لأنه يمكن تمرير الرسالة بشكل متكرر عبر عدة خوادم بالتوازي ، باستخدام الخوادم التي اختارها المستلم. في شبكات P2P ، يتم تمرير الرسالة عبر عُقد O (log N) بالتسلسل ، باستخدام العقد التي تختارها الخوارزمية.", + "simplex-network-overlay-card-1-li-2": "لا يحتوي تصميم SimpleX ، عكس معظم شبكات P2P ، على معرّفات مستخدم عالمية من أي نوع ، حتى مؤقتة ، ويستخدم فقط المعرّفات المزدوجة المؤقتة ، مما يوفر إخفاء هوية أفضل وحماية للبيانات الوصفية.", + "simplex-network-overlay-card-1-li-4": "يمكن لبعض مزودي خدمة الإنترنت حظر تطبيقات P2P (مثل BitTorrent ). SimpleX حيادي النقل - يمكنه العمل عبر بروتوكولات الويب القياسية ، على سبيل المثال WebSockets.", + "simplex-network-overlay-card-1-li-5": "قد تكون جميع شبكات P2P المعروفة عرضة لهجوم Sybil ، لأن كل عقدة قابلة للاكتشاف ، وتعمل الشبكة ككل. تتطلب الإجراءات المعروفة لتخفيفها إما مكونًا مركزيًا أو إثبات عمل مكلف . لا تحتوي شبكة SimpleX على إمكانية اكتشاف الخادم ، فهي مجزأة وتعمل كشبكات فرعية متعددة ومعزولة ، مما يجعل الهجمات على مستوى الشبكة مستحيلة.", + "privacy-matters-overlay-card-3-p-1": "يجب على الجميع الاهتمام بخصوصية وأمان اتصالاتهم — يمكن للمحادثات غير الضارة أن تعرضك للخطر ، حتى لو لم يكن لديك ما تخفيه.", + "privacy-matters-overlay-card-3-p-4": "لا يكفي استخدام برنامج مراسلة مشفر من طرف إلى طرف ، يجب علينا جميعًا استخدام برامج المراسلة التي تحمي خصوصية شبكاتنا الشخصية — مع من نحن مرتبطون.", + "simplex-unique-overlay-card-1-p-3": "يحمي هذا التصميم خصوصية الأشخاص الذين تتواصل معهم ، ويخفيها عن خوادم منصة SimpleX ومن أي مراقبين. لإخفاء عنوان IP الخاص بك من الخوادم ، يمكنك الاتصال بخوادم SimpleX عبر Tor .", + "simplex-unique-overlay-card-2-p-1": "نظرًا لعدم وجود معرف لديك على نظام SimpleX ، لا يمكن لأي شخص الاتصال بك ما لم تشارك عنوان مستخدم لمرة واحدة أو مؤقتًا ، كرمز QR أو رابط.", + "simplex-unique-overlay-card-2-p-2": "حتى مع عنوان المستخدم الاختياري ، بينما يمكن استخدامه لإرسال طلبات جهات اتصال غير مرغوب فيها ، يمكنك تغييره أو حذفه بالكامل دون فقد أي من اتصالاتك.", + "simplex-unique-overlay-card-3-p-2": "يتم الاحتفاظ بالرسائل المشفرة من طرف إلى طرف مؤقتًا على خوادم ترحيل SimpleX حتى يتم استلامها ، ثم يتم حذفها نهائيًا.", + "simplex-unique-overlay-card-3-p-4": "لا توجد معرفات أو نص مشفر مشترك بين حركة نقل البينات الخادم المرسلة والمستلمة — ؛ إذا كان أي شخص يراقب ذلك ، فلن يتمكن بسهولة من تحديد من يتواصل مع من ، حتى لو تم اختراق TLS.", + "simplex-unique-card-1-p-1": "يحمي SimpleX خصوصية ملف التعريف الخاص بك وجهات الاتصال والبيانات الوصفية ، ويخفيه عن خوادم منصة SimpleX وأي مراقبين.", + "privacy-matters-overlay-card-2-p-1": "منذ وقت ليس ببعيد ، لاحظنا أن الانتخابات الرئيسية يتم التلاعب بها بواسطة شركة استشارية ذات سمعة طيبة التي استخدمت الرسوم البيانية الاجتماعية لتشويه نظرتنا للعالم الحقيقي والتلاعب بأصواتنا.", + "privacy-matters-overlay-card-2-p-2": "لكي تكون موضوعيًا وتتخذ قرارات مستقلة ، يجب أن تكون متحكمًا في مساحة المعلومات الخاصة بك. هذا ممكن فقط إذا كنت تستخدم منصة اتصالات خاصة لا يمكنها الوصول إلى الرسم البياني الاجتماعي الخاص بك.", + "privacy-matters-overlay-card-2-p-3": "SimpleX هو النظام الأساسي الأول الذي لا يحتوي على أي معرفات مستخدم حسب التصميم ، وبهذه الطريقة تحمي مخطط اتصالاتك بشكل أفضل من أي بديل معروف.", + "privacy-matters-overlay-card-3-p-2": "واحدة من أكثر القصص إثارة للصدمة هي تجربة محمدو ولد صلاحي الموصوفة في مذكراته والموضحة في فيلم موريتاني. تم وضعه في معتقل غوانتانامو بدون محاكمة ، وتعرض للتعذيب هناك لمدة 15 عامًا بعد مكالمة هاتفية مع قريبه في أفغانستان ، للاشتباه في تورطه في هجمات 11 سبتمبر ، على الرغم من أنه عاش في ألمانيا طوال السنوات العشر الماضية.", + "privacy-matters-overlay-card-3-p-3": "يتم القبض على الأشخاص العاديين بسبب ما يشاركونه عبر الإنترنت ، حتى عبر حساباتهم \"المجهولة\"، وحتى في البلدان الديمقراطية.", + "simplex-unique-overlay-card-1-p-1": "على عكس أنظمة المراسلة الأخرى ، لا يحتوي SimpleX على معرفات مخصصة للمستخدمين. لا يعتمد على أرقام الهواتف أو العناوين المستندة إلى النطاقات (مثل البريد الإلكتروني أو XMPP)، أسماء المستخدمين، المفاتيح العامة أو حتى الأرقام العشوائية لتحديد مستخدميها — لا نعرف عدد الأشخاص الذين يستخدمون خوادم SimpleX الخاصة بنا.", + "simplex-unique-overlay-card-1-p-2": "لتسليم الرسائل ، يستخدم SimpleX العناوين المزدوجة المجهولة لقوائم انتظار الرسائل أحادية الاتجاه ، منفصلة عن الرسائل المستلمة والمرسلة ، عادةً عبر خوادم مختلفة . إن استخدام SimpleX يشبه امتلاك بريد إلكتروني أو هاتف مؤقتمختلف لكل جهة اتصال ، ولا توجد متاعب في إدارتها.", + "simplex-unique-overlay-card-3-p-1": "يخزن SimpleX Chat جميع بيانات المستخدم على أجهزة العميل فقط باستخدام تنسيق قاعدة بيانات محمولة مشفرة يمكن تصديرها ونقلها إلى أي جهاز مدعوم.", + "simplex-unique-overlay-card-3-p-3": "على عكس خوادم الشبكات الموحدة (البريد الإلكتروني أو XMPP أو Matrix) ، لا تقوم خوادم SimpleX بتخزين حسابات المستخدمين ، فهي تقوم فقط بترحيل الرسائل ، مما يحمي خصوصية كلا الطرفين.", + "simplex-unique-overlay-card-4-p-1": "يمكنك استخدام SimpleX مع الخوادم الخاصة بك والاستمرار في التواصل مع الأشخاص الذين يستخدمون الخوادم المهيأة مسبقًا التي نقدمها.", + "simplex-unique-overlay-card-4-p-3": "إذا كنت تفكر في التطوير لمنصة SimpleX ، على سبيل المثال ، بوت الدردشة لمستخدمي تطبيق SimpleX ، أو دمج مكتبة SimpleX Chat في تطبيقات الأجهزة المحمولة ، من فضلك تواصل معي لأي نصيحة والدعم.", + "donate-here-to-help-us": "تبرع هنا لمساعدتنا", + "sign-up-to-receive-our-updates": "اشترك للحصول على آخر مستجداتنا", + "enter-your-email-address": "أدخل عنوان بريدك الإلكتروني", + "get-simplex": "احصل على SimpleX", + "why-simplex-is": "لماذا SimpleX", + "unique": "فريد", + "learn-more": "اقرأ أكثر", + "more-info": "معلومات أكثر", + "hide-info": "معلومات أقل", + "contact-hero-header": "لقد وصلتك رسالة للاتصال على SimpleX Chat", + "invitation-hero-header": "لقد وصلك رابط يفتح مرة واحدة للاتصال على SimpleX Chat", + "contact-hero-subheader": "امسح رمز الـQR باستخدام تطبيق SimpleX Chat على هاتفك أو جهازك اللوحي.", + "comparison-point-4-text": "شبكة أحادية أو مركزية", + "contact-hero-p-1": "المفتاح العام وعنوان الانتظار لا يُرسلوا عبر الشبكة عندما ترى هذه الصفحة — بل يكونوا مكتوبين داخل نص الرابط نفسه.", + "comparison-point-2-text": "احتمالية هجوم الوسيط", + "comparison-point-3-text": "الاعتمادية على DNS", + "comparison-point-5-text": "مكون مركزي أو هجوم الشبكة الواسع", + "yes": "نعم", + "no": "لا", + "no-private": "لا - خصوصي", + "no-resilient": "لا - مرن", + "no-decentralized": "لا - لامركزي", + "no-federated": "لا - فدرالي", + "comparison-section-list-point-2": "العناوين تعتمد على الـDNS", + "comparison-section-list-point-3": "المفتاح العام أو معرف آخر فريد وعام", + "comparison-section-list-point-7": "شبكات P2P إما لديها سلطة مركزية أو أن الشبكة كلها يمكن تسويتها", + "see-here": "اقرأ هنا", + "no-secure": "لا - آمن", + "comparison-section-list-point-5": "لا يحمي المعلومات الوصفية للمستخدمين", + "comparison-section-list-point-6": "على الرغم من أن الـP2P موزعة، إلا أنها ليست فدرالية - يشتغلوا على نفس الشبكة", + "comparison-section-list-point-1": "عادة ما يكون مكوناً من رقم الهاتف، أو اسم المستخدم في بعض الأحيان", + "comparison-section-list-point-4": "إذا ما تم تسوية خوادم المشغل", + "simplex-unique-card-3-p-1": "يخزن SimpleX جميع بيانات المستخدم على الأجهزة العميلة بتنسيق قاعدة بيانات محمولة مشفرة — يمكن نقله إلى جهاز آخر.", + "simplex-unique-card-4-p-1": "شبكة SimpleX لا مركزية بالكامل ومستقلة عن أي عملة مشفرة أو أي منصة أخرى ، بخلاف الإنترنت.", + "simplex-unique-card-4-p-2": "يمكنك استخدام SimpleX مع خوادمك الخاصة أو مع الخوادم التي نوفرها — ولا يزال الاتصال ممكن بأي مستخدم.", + "join": "انضم الى", + "we-invite-you-to-join-the-conversation": "نحن ندعوك للانضمام إلى محادثة", + "join-the-REDDIT-community": "انضم إلى مجتمع REDDIT", + "join-us-on-GitHub": "انضم إلينا على GitHub", + "contact-hero-p-2": "لم يتم تنزيل SimpleX Chat حتى الآن؟", + "contact-hero-p-3": "استخدم الروابط في الاسفل لتنزيل التطبيق.", + "scan-qr-code-from-mobile-app": "امسح رمز QR من تطبيق الجوال", + "to-make-a-connection": "لإجراء اتصال:", + "install-simplex-app": "قم بتثبيت تطبيق SimpleX", + "connect-in-app": "تواصل في التطبيق", + "open-simplex-app": "افتح تطبيق Simplex", + "installing-simplex-chat-to-terminal": "تثبيت SimpleX chat على المحطة", + "use-this-command": "استخدم هذا الأمر:", + "see-simplex-chat": "انظر SimpleX Chat", + "github-repository": "مستودع Github", + "the-instructions--source-code": "التعليمات حول كيفية تنزيله أو تجميعه من التعليمات البرمجية المصدر.", + "if-you-already-installed-simplex-chat-for-the-terminal": "إذا قمت بالفعل بتثبيت SimpleX Chat للوحدة الطرفية", + "simplex-chat-for-the-terminal": "SimpleX Chat للوحدة الطرفية", + "privacy-matters-section-header": "لماذا الخصوصية مهمة", + "privacy-matters-section-label": "تأكد من أن برنامج المراسلة الخاص بك لا يمكنه الوصول إلى بياناتك!", + "tap-to-close": "انقر للإغلاق", + "simplex-network-section-header": "شبكة SimpleX ", + "simplex-network-1-header": "على عكس شبكات P2P", + "simplex-network-3-header": "شبكة SimpleX", + "protocol-1-text": "Signal، منصات كبيرة", + "protocol-2-text": "XMPP ، Matrix", + "simplex-unique-card-1-p-2": "بخلاف أي نظام أساسي آخر للمراسلة ، لا يحتوي SimpleX على معرّفات مخصصة للمستخدمين — ولا حتى أرقام عشوائية.", + "simplex-unique-card-2-p-1": "نظرًا لعدم وجود معرف أو عنوان ثابت على منصة SimpleX ، لا يمكن لأي شخص الاتصال بك ما لم تشارك عنوان مستخدم لمرة واحدة أو مؤقتًا ، كرمز QR أو رابط.", + "simplex-unique-card-3-p-2": "يتم الاحتفاظ بالرسائل المشفرة من طرف إلى طرف مؤقتًا على خوادم ترحيل SimpleX حتى يتم استلامها ، ثم يتم حذفها نهائيًا.", + "tap-the-connect-button-in-the-app": "اضغط على زر \"اتصال\" في التطبيق", + "scan-the-qr-code-with-the-simplex-chat-app": "امسح رمز QR باستخدام تطبيق SimpleX Chat", + "scan-the-qr-code-with-the-simplex-chat-app-description": "لا يتم إرسال المفاتيح العامة وعنوان قائمة انتظار الرسائل في هذا الارتباط عبر الشبكة عند عرض هذه الصفحة —
فهي موجودة في جزء التجزئة لعنوان URL للرابط.", + "if-you-already-installed": "إذا قمت بالفعل بتثبيت", + "copy-the-command-below-text": "انسخ الأمر الذي في الاسفل واستخدمه في الدردشة:", + "simplex-private-section-header": "ما الذي يجعل SimpleX خاصًا ", + "privacy-matters-section-subheader": "الحفاظ على خصوصية بياناتك الوصفية — مع من تتحدث — يحميك من:", + "simplex-network-1-overlay-linktext": "مشاكل شبكات P2P", + "simplex-network-section-desc": "يوفر Simplex Chat أفضل خصوصية من خلال الجمع بين مزايا P2P والشبكات الموحدة.", + "simplex-network-1-desc": "يتم إرسال جميع الرسائل عبر الخوادم ، مما يوفر خصوصية أفضل للبيانات الوصفية وتسليمًا موثوقًا للرسائل غير المتزامنة ، مع تجنب الكثير", + "simplex-network-2-header": "على عكس الشبكات الفيدرالية", + "simplex-network-3-desc": "توفر الخوادم قوائم انتظار أحادية الاتجاه لتوصيل المستخدمين ، لكن ليس لديهم رؤية للرسم البياني لاتصال الشبكة — إلا للمستخدمين فقط.", + "comparison-section-header": "مقارنة مع البروتوكولات الأخرى", + "simplex-network-2-desc": "لا تقوم خوادم الترحيل SimpleX بتخزين ملفات تعريف المستخدمين وجهات الاتصال والرسائل التي تم تسليمها ، ولا تتصل ببعضها البعض ، ولا يوجد دليل خوادم.", + "comparison-point-1-text": "يتطلب هوية عالمية", + "protocol-3-text": "بروتوكولات P2P", + "simplex-unique-overlay-card-4-p-2": "تستخدم منصة SimpleX بروتوكول مفتوح وتوفر SDK لإنشاء روبوتات دردشة ، مما يسمح بتنفيذ الخدمات التي يمكن للمستخدمين التفاعل معها عبر تطبيقات SimpleX Chat — التي تتطلع حقًا لمعرفة خدمات SimpleX التي يمكنك إنشاؤها." +} diff --git a/website/langs/cs.json b/website/langs/cs.json index 2d2b8080a..69de60ab3 100644 --- a/website/langs/cs.json +++ b/website/langs/cs.json @@ -162,8 +162,8 @@ "comparison-point-5-text": "Centrální součást nebo jiný celosíťový útok", "yes": "Ano", "no": "Ne", - "no-private": "Ne - soukromé", - "no-secure": "Ne - bezpečné", + "no-private": "Ne - soukromý", + "no-secure": "Ne - bezpečný", "no-resilient": "Ne - odolný", "no-decentralized": "Ne – decentralizovaný", "no-federated": "Ne - federovaný", diff --git a/website/langs/de.json b/website/langs/de.json index 192b6c083..fce674216 100644 --- a/website/langs/de.json +++ b/website/langs/de.json @@ -9,7 +9,7 @@ "features": "Funktionen", "simplex-private-card-6-point-2": "Um das zu verhindern, werden von SimpleX Einmal-Schlüssel Out-of-Band weitergeleitet, wenn Sie eine Adresse als Link oder QR-Code teilen.", "simplex-explained": "SimpleX erklärt", - "simplex-explained-tab-2-text": "2. Wie es funktioniert", + "simplex-explained-tab-2-text": "2. Wie funktioniert es", "simplex-explained-tab-3-text": "3. Was die Server sehen", "simplex-explained-tab-1-text": "1. Wie es die Nutzer erleben", "simplex-explained-tab-1-p-1": "Sie können Kontakte und Gruppen erstellen und haben Zwei-Wege-Kommunikation wie in jedem anderen Messenger.", @@ -17,7 +17,7 @@ "simplex-explained-tab-2-p-1": "Für jede Verbindung nutzen Sie zwei separate Nachrichten-Warteschlangen, um die Nachrichten über verschiedene Server zu senden und zu empfangen.", "simplex-explained-tab-2-p-2": "Die Server leiten Nachrichten immer nur in eine Richtung weiter, ohne den vollständigen Verlauf der Nutzer-Unterhaltung oder seiner Verbindungen zu kennen.", "simplex-explained-tab-3-p-1": "Die Server nutzen für jede Warteschlange separate, anonyme Anmeldeinformationen und wissen nicht welchem Nutzer diese gehören.", - "simplex-explained-tab-3-p-2": "Durch die Verwendung von Tor-Zugangsservern können Nutzer ihre Metadaten Privatsphäre weiter verbessern und Korellationen von IP-Adressen verhindern.", + "simplex-explained-tab-3-p-2": "Durch die Verwendung von Tor-Zugangsservern können Nutzer ihre Metadaten-Privatsphäre weiter verbessern und Korellationen von IP-Adressen verhindern.", "smp-protocol": "SMP Protokoll", "chat-bot-example": "Beispiel für einen Chatbot", "donate": "Spenden", @@ -27,22 +27,22 @@ "terminal-cli": "Terminal Kommandozeilen-Schnittstelle", "terms-and-privacy-policy": "Bedingungen & Datenschutzbestimmungen", "hero-header": "Privatsphäre neu definiert", - "hero-overlay-2-textlink": "Wie SimpleX funktioniert?", + "hero-overlay-2-textlink": "Wie funktioniert SimpleX?", "hero-subheader": "Der erste Messenger
ohne Nutzerkennungen", - "hero-p-1": "Andere Apps haben Nutzerkennungen: Signal, Matrix, Session, Briar, Jami, Cwtch usw.
SimpleX arbeitet ohne diese, nicht einmal mit Zufallszahlen.
Dies erhöht die Privatsphäre ungemein.", + "hero-p-1": "Andere Apps haben Nutzerkennungen: Signal, Matrix, Session, Briar, Jami, Cwtch usw.
SimpleX arbeitet ohne diese, nicht einmal mit Zufallszahlen.
Dies steigert die Privatsphäre ungemein.", "hero-overlay-1-textlink": "Warum sind Nutzerkennungen schlecht für die Privatspäre?", "hero-overlay-2-title": "Warum Benutzerkennungen schlecht für die Privatsphäre sind?", "hero-2-header": "Aufbau einer privaten Verbindung", - "hero-overlay-1-title": "Wie SimpleX funktioniert?", + "hero-overlay-1-title": "Wie funktioniert SimpleX?", "hero-2-header-desc": "Das Video zeigt Ihnen, wie Sie sich mit einem Kontakt mit dessen Einmal-QR-Code persönlich oder per Videotreff verbinden. Sie können sich auch über einen geteilten Einladungslink miteinander verbinden.", "feature-2-title": "Ende-zu-Ende verschlüsselte
Bilder und Dateien", "feature-4-title": "Ende-zu-Ende verschlüsselte Sprachnachrichten", - "feature-1-title": "Ende-zu-Ende verschlüsselte Nachrichten mit Markdowns und Bearbeitung", - "feature-3-title": "Dezentralisierte geheime Gruppen —
Nur die Nutzer wissen, dass sie existieren", - "simplex-private-8-title": "Mischen von Nachrichten
Zur Reduzierung von Korrelationen", + "feature-1-title": "Ende-zu-Ende verschlüsselte Nachrichten mit Markdowns und Bearbeitungsmöglichkeiten", + "feature-3-title": "Dezentralisierte geheime Gruppen —
Nur die Nutzer wissen, dass diese existieren", + "simplex-private-8-title": "Mischen von Nachrichten,
um Korrelationen zu reduzieren", "feature-5-title": "Verschwindende geheime Unterhaltungen", "feature-6-title": "Ende-zu-Ende verschlüsselte Sprach- und Videoanrufe", - "feature-7-title": "Portable und verschlüsselte Datenbank — Verschieben Sie Ihr Profil auf ein anderes Gerät", + "feature-7-title": "Portable und verschlüsselte Datenbank — Verschieben Sie Ihr komplettes Profil einfach auf ein anderes Gerät", "feature-8-title": "Inkognito-Modus —
Einzigartig in SimpleX Chat", "simplex-network-overlay-1-title": "Vergleich mit P2P Nachrichten-Protokollen", "simplex-private-1-title": "Zwei Schichten der
Ende-zu-Ende Verschlüsselung", @@ -57,29 +57,29 @@ "simplex-private-card-1-point-1": "Doppeltes-Ratchet Protokoll —
Off-the-Record Nachrichten mit Perfect Forward Secrecy und Einbruchserholung.", "simplex-private-card-1-point-2": "NaCL Kryptobox in jeder Warteschlange, um eine Korrelation des Datenverkehrs zwischen Nachrichtenwarteschlangen zu verhindern, falls TLS kompromittiert wurde.", "simplex-private-card-3-point-1": "Für Client-Server-Verbindungen wird nur TLS 1.2/1.3 mit starken Algorithmen verwendet.", - "simplex-private-card-2-point-1": "Zusätzliche Server-Verschlüsselungs-Schicht zur Zustellung an den Empfänger, um eine Korrelation zwischen empfangenen und gesendeten Server-Daten zu vermeiden, falls TLS kompromittiert wurde.", + "simplex-private-card-2-point-1": "Zusätzliche Server-Verschlüsselungs-Schicht für die Zustellung an den Empfänger, um eine Korrelation zwischen empfangenen und gesendeten Server-Daten zu vermeiden, falls TLS kompromittiert wurde.", "simplex-private-card-3-point-2": "Server-Fingerabdrücke und Kanalbindung verhindern MITM- und Replay-Angriffe.", "simplex-private-card-3-point-3": "Die Wiederaufnahme von Verbindungen ist deaktiviert, um Sitzungs-Angriffe zu verhindern.", "simplex-private-card-4-point-1": "Um Ihre IP-Adresse zu schützen, können Sie per Tor oder irgendeinem anderen Transportschichten-Netzwerk auf Server zugreifen.", - "simplex-private-card-4-point-2": "Um SimpleX per Tor zu nutzen, installieren Sie unter Android bitte die Orbot App und aktivieren Sie den SOCKS5 Proxy (oder per VPN unter iOS).", + "simplex-private-card-4-point-2": "Um SimpleX per Tor zu nutzen, installieren Sie unter Android bitte die Orbot App und aktivieren Sie den SOCKS5 Proxy oder unter iOS per VPN.", "simplex-private-card-5-point-1": "SimpleX nutzt Inhalte-Auffüllung für jede Verschlüsselungs-Schicht, um Angriffe auf die Nachrichtengröße zu vereiteln.", "simplex-private-card-5-point-2": "Erzeugt Nachrichten mit unterschiedlichen Größen, die für Server und Netzwerk-Beobachter identisch aussehen.", "simplex-private-card-6-point-1": "Viele Kommunikations-Plattformen sind für MITM-Angriffe durch Server oder Netzwerk-Provider anfällig.", "simplex-private-card-9-point-1": "Jede Nachrichten-Warteschlange leitet Nachrichten mit unterschiedlichen Sende- und Empfängeradressen jeweils nur in einer Richtung weiter.", "simplex-private-card-9-point-2": "Verglichen mit traditionellen Nachrichten-Brokern, werden mögliche Angriffs-Vektoren und vorhandene Meta-Daten reduziert.", - "simplex-private-card-10-point-1": "SimpleX nutzt für jeden Nutzer Kontakt oder jedes Gruppenmitglied eigene temporäre, anonyme und paarweise Adressen und Berechtigungsnachweise.", - "simplex-private-card-10-point-2": "SimpleX erlaubt es Nachrichten ohne Nutzerprofil-Bezeichner zu versenden und bietet dabei bessere Metadaten-Privatsphäre an als andere Alternativen.", + "simplex-private-card-10-point-1": "SimpleX nutzt für jeden Nutzer-Kontakt oder jedes Gruppenmitglied eigene temporäre, anonyme und paarweise Adressen und Berechtigungsnachweise.", + "simplex-private-card-10-point-2": "SimpleX erlaubt es, Nachrichten ohne Nutzerprofil-Bezeichner zu versenden und bietet dabei bessere Metadaten-Privatsphäre an als andere Alternativen.", "simplex-unique-4-title": "Sie besitzen das SimpleX Netzwerk", "privacy-matters-1-title": "Werbung und Preisdiskriminierung", "privacy-matters-1-overlay-1-title": "Privatsphäre sichert Ihnen Geld", "privacy-matters-2-overlay-1-title": "Privatsphäre gibt Ihnen Kraft", "privacy-matters-1-overlay-1-linkText": "Privatsphäre sichert Ihnen Geld", "privacy-matters-2-overlay-1-linkText": "Privatsphäre gibt Ihnen Kraft", - "privacy-matters-3-title": "Strafverfolgung wegen einer unschuldigen Verbindung", + "privacy-matters-3-title": "Strafverfolgung wegen einer harmlosen Verbindung", "privacy-matters-3-overlay-1-title": "Privatsphäre schützt Ihre Freiheit", "privacy-matters-2-title": "Wahlmanipulationen", "privacy-matters-3-overlay-1-linkText": "Privatsphäre schützt Ihre Freiheit", - "simplex-unique-1-title": "Sie haben die komplette Privatsphäre", + "simplex-unique-1-title": "Sie erhalten eine vollumfängliche Privatsphäre", "simplex-unique-1-overlay-1-title": "Komplette Privatsphäre für Ihre Identität, ihr Profil, Ihre Kontakte und Metadaten", "simplex-unique-2-title": "Sie sind geschützt vor
SPAM und Missbrauch", "simplex-unique-2-overlay-1-title": "Der beste Schutz vor SPAM und Missbrauch", @@ -88,7 +88,7 @@ "simplex-unique-4-overlay-1-title": "Voll dezentralisiert — Die Nutzer besitzen das SimpleX Netzwerk", "hero-overlay-card-1-p-1": "Viele Nutzer fragen:Woher weiß SimpleX, an wenn es Nachrichten versenden muss, wenn es keine Benutzerkennungen gibt?", "simplex-private-card-7-point-1": "Um die Integrität von Nachrichten sicherzustellen, werden sie sequentiell durchnummeriert und beinhalten den Hash der vorhergehenden Nachricht.", - "simplex-private-card-7-point-2": "Der Empfänger wird alarmiert, sobald irgendeine Nachricht ergänzt, entfernt oder verändert wird.", + "simplex-private-card-7-point-2": "Der Empfänger wird alarmiert, sobald eine Nachricht ergänzt, entfernt oder verändert wird.", "simplex-private-card-8-point-1": "Die SimpleX Server arbeiten als Mix-Knoten mit geringer Verzögerung — eingehende und ausgehende Nachrichten haben eine unterschiedliche Reihenfolge.", "hero-overlay-card-1-p-3": "Sie definieren, welche(n) Server Sie für den Empfang von Nachrichten nutzen. Ihre Kontakte — nutzen diese Server, um ihnen Nachrichten darüber zu senden. Jede Konversation nutzt üblicherweise also zwei unterschiedliche Server.", "hero-overlay-card-1-p-5": "Die Benutzer-Profile, Kontakte und Gruppen werden nur auf den Endgerät des Nutzers gespeichert. Die Nachrichten werden mit einer 2-Schichten Ende-zu-Ende Verschlüsselung versendet.", @@ -96,39 +96,39 @@ "hero-overlay-card-2-p-2": "Sie können diese Informationen mit bestehenden öffentlichen sozialen Netzwerken korrelieren und damit wahre Identitäten herausfinden.", "hero-overlay-card-2-p-3": "Wenn Sie sich mit zwei unterschiedlichen Kontakten über das selbe Profil unterhalten, können sie, selbst bei sehr auf Privatsphäre achtenden Apps, die Tor v3 Dienste nutzen, feststellen, dass diese Kontakte mit der selben Person verbunden sind.", "hero-overlay-card-1-p-2": "Um Nachrichten auszuliefern, nutzt SimpleX statt Benutzerkennungen wie auf allen anderen Plattformen, temporäre, anonyme und paarweise Kennungen für Nachrichten-Warteschlangen, die für jede Ihrer Verbindungen unterschiedlich sind — Es gibt keinerlei Langzeit-Kennungen.", - "hero-overlay-card-1-p-4": "Dieses Design verhindert Datenlecks für jegliche Benutzer'Metadaten schon auf der Applikations-Ebene. Sie können sich über Tor mit Nachrichten-Servern verbinden, um Ihre Privatsphäre weiter zu verbessern und die von Ihnen genutzte IP-Adresse zu schützen.", + "hero-overlay-card-1-p-4": "Dieses Design verhindert schon auf der Applikations-Ebene Datenlecks für jegliche Benutzer'Metadaten. Sie können sich über Tor mit Nachrichten-Servern verbinden, um Ihre Privatsphäre weiter zu verbessern und die von Ihnen genutzte IP-Adresse zu schützen.", "hero-overlay-card-2-p-1": "Wenn Nutzer dauerhafte Identitäten besitzen, selbst wenn diese eine Zufallsnummer, wie eine Sitzungs-ID, ist, besteht ein Risiko, das Provider oder Angreifer feststellen können, wie Nutzer miteinander verbunden sind und wie viele Nachrichten sie versenden.", "hero-overlay-card-2-p-4": "SimpleX schützt gegen solche Angriffe, weil es vom Design her keinerlei Benutzerkennungen besitzt. Und Sie haben sogar unterschiedliche Anzeigenamen für jeden Kontakt und vermeiden jegliche geteilte Daten zwischen diesen, wenn Sie den Inkognito-Modus nutzen.", "simplex-network-overlay-card-1-p-1": "Peer-to-Peer-Nachrichten-Protokolle und -Applikationen haben verschiedene Probleme, die diese weniger vertrauenswürdig, die Analyse wesentlich komplexer und anfälliger gegen verschiedene Arten von Angriffen, als bei SimpleX machen.", "simplex-network-overlay-card-1-li-2": "Das SimpleX Design hat, im Gegensatz zu den meisten P2P-Netzwerken, keinerlei globalen Benutzerkennungen, auch keine temporären. Es nutzt ausschließlich temporäre paarweise Kennungen, die bessere Anonymität und Metadaten-Schutz bieten.", "simplex-network-overlay-card-1-li-4": "P2P-Implementierungen können durch Internet-Provider blockiert werden, wie beispielweise BitTorrent). SimpleX ist transportunabhängig - es kann über Standard-Web-Protokolle, wie beispielsweise WebSockets, arbeiten.", "simplex-network-overlay-card-1-li-6": "P2P-Netzwerke können anfällig für DRDoS-Angriffe sein, wenn die Clients den Datenverkehr erneut senden und verstärken können, was zu einem netzwerkweiten Denial-of-Service führt. SimpleX-Clients leiten nur Datenverkehr von bekannten Verbindungen weiter und können von einem Angreifer nicht dazu verwendet werden, den Datenverkehr im gesamten Netzwerk zu verstärken.", - "privacy-matters-overlay-card-1-p-1": "Viele große Unternehmen nutzen Informationen, mit wem Sie in Verbindung stehen, um Ihr Einkommen zu schätzen, Ihnen Produkte zu verkaufen, die Sie nicht wirklich benötigen, und um die Preise zu bestimmen.", + "privacy-matters-overlay-card-1-p-1": "Viele große Unternehmen nutzen Informationen, mit wem Sie in Verbindung stehen, um Ihr Einkommen zu schätzen, Ihnen Produkte zu verkaufen, die Sie nicht wirklich benötigen und um die Preise zu bestimmen.", "privacy-matters-overlay-card-1-p-2": "Online-Händler wissen, dass Menschen mit geringerem Einkommen eher dringende Einkäufe tätigen, sodass sie möglicherweise höhere Preise verlangen können oder Rabatte streichen.", "privacy-matters-overlay-card-1-p-3": "Einige Finanz- und Versicherungsunternehmen verwenden soziale Graphen, um Zinssätze und Prämien zu ermitteln. Menschen mit niedrigerem Einkommen zahlen so häufig mehr — dies ist als \"Armutsprämie\" bekannt.", "privacy-matters-overlay-card-2-p-2": "Um objektiv zu sein und unabhängige Entscheidungen treffen zu können, müssen Sie die Kontrolle über Ihren Informationsraum haben. Dies ist nur möglich, wenn Sie eine private Kommunikationsplattform verwenden, die keinen Zugriff auf Ihren sozialen Graphen hat.", "privacy-matters-overlay-card-2-p-3": "SimpleX ist die erste Plattform, die per Design keinerlei Benutzerkennungen hat und auf diese Weise Ihren Verbindungsgraphen besser schützt als jede andere bekannte Alternative.", "privacy-matters-overlay-card-3-p-1": "Jede Person sollte sich um ihre Privatsphäre und die Sicherheit ihrer Kommunikation kümmern — Harmlose Gespräche könnten Sie in Gefahr bringen, selbst wenn Sie nichts zu verbergen haben.", "privacy-matters-overlay-card-3-p-4": "Es reicht nicht aus, einfach einen Ende-zu-Ende-verschlüsselten Messenger zu verwenden. Wir alle sollten den Messenger verwenden, der die Privatsphäre unserer persönlichen Netzwerke schützt, mit welchen wir verbunden sind.", - "simplex-unique-overlay-card-1-p-3": "Dieses Design schützt die Privatsphäre der Personen, mit denen Sie kommunizieren, und verbirgt sie vor den SimpleX-Plattform-Servern und allen Beobachtern. Um Ihre IP-Adresse vor den Servern zu verbergen, können Sie sich per Tor mit den SimpleX-Servern verbinden.", + "simplex-unique-overlay-card-1-p-3": "Dieses Design schützt die Privatsphäre von Ihnen und der Personen, mit denen Sie kommunizieren, und verbirgt die Verbindungen vor den SimpleX-Plattform-Servern und möglichen Beobachtern. Um Ihre IP-Adresse vor den Servern zu verbergen, können Sie sich per Tor mit den SimpleX-Servern verbinden.", "simplex-unique-overlay-card-2-p-1": "Da Sie auf der SimpleX-Plattform keine Kennungen haben, kann Sie niemand kontaktieren, es sei denn, Sie geben eine einmalige oder vorübergehende Benutzeradresse in Form eines QR-Codes oder eines Links weiter.", - "simplex-unique-overlay-card-3-p-2": "Die Ende-zu-Ende-verschlüsselten Nachrichten werden vorübergehend auf SimpleX-Relay-Servern gespeichert, bis sie empfangen und danach endgültig gelöscht werden.", + "simplex-unique-overlay-card-3-p-2": "Die Ende-zu-Ende-verschlüsselten Nachrichten werden vorübergehend auf SimpleX-Relay-Servern gespeichert, bis sie vom Endgerät empfangen und danach endgültig gelöscht werden.", "simplex-unique-overlay-card-3-p-3": "Im Gegensatz zu föderierten Netzwerkservern (wie z.B. Mail, XMPP oder Matrix) speichern die SimpleX-Server keine Benutzerkonten, sondern leiten Nachrichten nur weiter, so dass die Privatsphäre der beteiligten Parteien geschützt ist.", "simplex-unique-overlay-card-4-p-1": "Sie können SimpleX mit Ihren eigenen Servern verwenden und trotzdem mit Personen kommunizieren, welche die von uns bereitgestellten und vorkonfigurierten Server verwenden.", "simplex-unique-card-1-p-1": "SimpleX schützt die Privatsphäre Ihres Profils, Ihrer Kontakte und Metadaten und verbirgt sie vor den SimpleX-Plattform-Servern und allen Beobachtern.", "simplex-unique-card-1-p-2": "Im Gegensatz zu allen anderen bestehenden Messaging-Plattformen werden den Nutzern von SimpleX keine Kennungen zugewiesen — nicht einmal Zufallszahlen.", "simplex-unique-card-2-p-1": "Da Sie keine Kennung oder feste Adresse auf der SimpleX-Plattform haben, kann Sie niemand kontaktieren, es sei denn, Sie geben eine einmalige oder vorübergehende Benutzeradresse in Form eines QR-Codes oder Links weiter.", "simplex-unique-card-3-p-1": "SimpleX speichert Benutzerdaten nur auf den Endgeräten und das in einem portablen, verschlüsselten Datenbankformat — welches auf ein anderes Gerät übertragen werden kann.", - "simplex-unique-card-3-p-2": "Die Ende-zu-Ende-verschlüsselten Nachrichten werden vorübergehend auf SimpleX-Relay-Servern gespeichert, bis sie empfangen und danach endgültig gelöscht werden.", - "join": "Treten Sie bei", - "we-invite-you-to-join-the-conversation": "Wir laden Sie ein, sich an der Unterhaltung zu beteiligen", + "simplex-unique-card-3-p-2": "Die Ende-zu-Ende-verschlüsselten Nachrichten werden vorübergehend auf SimpleX-Relay-Servern gespeichert, bis sie vom Endgerät empfangen und danach endgültig gelöscht werden.", + "join": "Nutzen Sie", + "we-invite-you-to-join-the-conversation": "Wir laden Sie ein, sich an der Diskussion zu beteiligen", "join-the-REDDIT-community": "Treten Sie der Reddit-Gruppe bei", "join-us-on-GitHub": "Schließen Sie sich uns bei GitHub an", - "donate-here-to-help-us": "Spenden Sie hier, um uns zu unterstützen", + "donate-here-to-help-us": "Spenden Sie, um uns zu unterstützen", "sign-up-to-receive-our-updates": "Melden Sie sich an, um Updates von uns zu erhalten", "enter-your-email-address": "Geben Sie Ihre Mail-Adresse ein", - "get-simplex": "Holen Sie sich SimpleX", - "learn-more": "Lernen Sie mehr darüber", + "get-simplex": "Laden Sie sich SimpleX herunter", + "learn-more": "Erfahren Sie mehr darüber", "more-info": "Weitere Informationen", "hide-info": "Informationen verbergen", "contact-hero-subheader": "Scannen Sie den QR-Code mit der SimpleX Chat-Applikation auf Ihrem Mobilgerät oder Tablet.", @@ -150,7 +150,7 @@ "tap-to-close": "Zum Schließen drücken", "simplex-network-section-header": "SimpleX Netzwerk", "simplex-network-1-header": "Im Gegensatz zu P2P-Netzwerken", - "simplex-network-1-desc": "Alle Nachrichten werden über Server versandt, was sowohl einen besseren Schutz der Metadaten als auch eine zuverlässige asynchrone Nachrichtenübermittlung ermöglicht und gleichzeitig Vieles vermeidet", + "simplex-network-1-desc": "Alle Nachrichten werden über Server versandt, was sowohl einen besseren Schutz der Metadaten als auch eine zuverlässigere asynchrone Nachrichtenübermittlung ermöglicht und dabei Vieles vermeidet", "simplex-network-1-overlay-linktext": "Probleme von P2P-Netzwerken", "simplex-network-2-desc": "Simple X-Relay-Server speichern KEINE Benutzerprofile, Kontakte und zugestellte Nachrichten und stellen KEINE Verbindungen untereinander her und es gibt KEIN Serververzeichnis.", "simplex-network-3-header": "SimpleX-Netzwerk", @@ -177,9 +177,9 @@ "simplex-unique-card-4-p-1": "Das SimpleX-Netzwerk ist vollständig dezentralisiert und unabhängig von Kryptowährungen oder anderen Plattformen außer dem Internet.", "unique": "einmalig", "privacy-matters-overlay-card-2-p-1": "Vor nicht allzu langer Zeit beobachteten wir, wie große Wahlen von einem angesehenen Beratungsunternehmen manipuliert wurden, welches unsere sozialen Graphen nutzte, um unsere Sicht auf die reale Welt zu verzerren und unsere Stimmen zu manipulieren.", - "privacy-matters-overlay-card-3-p-2": "Eine der schockierendsten Geschichten ist die Erfahrung von Mohamedou Ould Salahi, die in seinen Memoiren beschrieben und im Film \"The Mauritanian\" gezeigt wird. Er kam nach einem Anruf bei seinen Verwandten in Afghanistan und ohne Gerichtsverfahren in das Guantanamo-Lager und wurde dort einige Jahre lang gefoltert, weil er verdächtigt wurde, an den 9/11-Angriffen beteiligt gewesen zu sein, obwohl er die vorhergehenden 10 Jahre in Deutschland gelebt hatte.", + "privacy-matters-overlay-card-3-p-2": "Eine der schockierendsten Geschichten ist die Erfahrung von Mohamedou Ould Salahi, welche in seinen Memoiren beschrieben und im Film \"The Mauritanian\" gezeigt wird. Er kam nach einem Anruf bei seinen Verwandten in Afghanistan und ohne Gerichtsverfahren in das Guantanamo-Lager und wurde dort einige Jahre lang gefoltert, weil er verdächtigt wurde, an den 9/11-Angriffen beteiligt gewesen zu sein, obwohl er die vorhergehenden 10 Jahre in Deutschland gelebt hatte.", "simplex-unique-overlay-card-1-p-1": "Im Gegensatz zu anderen Nachrichten-Plattformen weist SimpleX den Benutzern keine Kennungen zu. Es verlässt sich nicht auf Telefonnummern, domänenbasierte Adressen (wie E-Mail oder XMPP), Benutzernamen, öffentliche Schlüssel oder sogar Zufallszahlen, um seine Benutzer zu identifizieren — Wir wissen nicht, wie viele Personen unsere SimpleX-Server verwenden.", - "simplex-unique-overlay-card-1-p-2": "Um Nachrichten auszuliefern nutzt SimpleX paarweise anonyme Adressen aus unidirektionalen Nachrichten-Warteschlangen, die für empfangene und gesendete Nachrichten separiert sind und gewöhnlich über verschiedene Server gesendet werden. Die Nutzung von SimpleX entspricht der Nutzung von unterschiedlichen Mailservern oder Telefonen für jeden einzelnen Kontakt und bereitet keine mühsame Verwaltung.", + "simplex-unique-overlay-card-1-p-2": "Um Nachrichten auszuliefern nutzt SimpleX paarweise anonyme Adressen aus unidirektionalen Nachrichten-Warteschlangen, die für empfangene und gesendete Nachrichten separiert sind und gewöhnlich über verschiedene Server gesendet werden. Die Nutzung von SimpleX entspricht der Nutzung von unterschiedlichen Mailservern oder Telefonen für jeden einzelnen Kontakt und vermeidet dabei eine mühsame Verwaltung.", "simplex-network-overlay-card-1-li-5": "Alle bekannten P2P-Netzwerke können anfällig für Sybil-Angriffe sein, da jeder Knoten ermittelbar ist und das Netzwerk als Ganzes funktioniert. Bekannte Maßnahmen zur Verhinderung erfordern entweder eine zentralisierte Komponente oder einen teuren Ausführungsnachweis. Das SimpleX-Netzwerk bietet keine Ermittlung der Server, ist fragmentiert und arbeitet mit mehreren isolierten Subnetzwerken, wodurch netzwerkweite Angriffe unmöglich werden.", "simplex-network-overlay-card-1-li-3": "P2P löst nicht das Problem des MITM-Angriffs und die meisten bestehenden Implementierungen nutzen für den initialen Schlüsselaustausch keine Out-of-Band-Nachrichten. Im Gegensatz hierzu nutzt SimpleX für den initialen Schlüsselaustausch Out-of-Band-Nachrichten oder zum Teil schon bestehende sichere und vertrauenswürdige Verbindungen.", "tap-the-connect-button-in-the-app": "Drücken Sie die ‘Verbinden’ Taste in der Applikation", @@ -187,7 +187,7 @@ "contact-hero-p-3": "Nutzen Sie die unten genannten Links, um die Applikation herunterzuladen.", "scan-the-qr-code-with-the-simplex-chat-app": "Scannen Sie den QR-Code mit der SimpleX Chat-Applikation", "copy-the-command-below-text": "Kopieren Sie sich das unten genannte Kommando und nutzen Sie es im Chat:", - "privacy-matters-section-subheader": "Die Wahrung der Privatsphäre Ihrer Metadaten — mit wem Sie sprechen schützt Sie vor:", + "privacy-matters-section-subheader": "Die Wahrung der Privatsphäre Ihrer Metadaten — mit wem Sie wann Kontakt haben — schützt Sie vor:", "simplex-private-section-header": "Was macht SimpleX vertraulich", "simplex-network-section-desc": "Durch die Kombination der Vorteile von P2P und föderierten Netzwerken stellt SimpleX die bestmögliche Privatsphäre zur Verfügung.", "simplex-network-2-header": "Im Gegensatz zu föderierten Netzwerken", @@ -197,17 +197,17 @@ "comparison-section-list-point-5": "Schützt die Metadaten des Nutzers nicht", "simplex-network-overlay-card-1-li-1": "P2P-Netzwerke vertrauen auf Varianten von DHT, um Nachrichten zu routen. DHT-Designs müssen zwischen Zustellungsgarantie und Latenz ausgleichen. Verglichen mit P2P bietet SimpleX sowohl eine bessere Zustellungsgarantie, als auch eine niedrigere Latenz, weil eine Nachricht redundant und parallel über mehrere Server gesendet werden kann, wobei die durch den Empfänger ausgewählten Server genutzt werden. In P2P-Netzwerken werden Nachrichten sequentiell über O(log N) Knoten gesendet, wobei die Knoten durch einen Algorithmus ausgewählt werden.", "simplex-unique-overlay-card-3-p-4": "Zwischen dem gesendeten und empfangenen Serververkehr gibt es keine gemeinsamen Kennungen oder Chiffriertexte — sodass ein Beobachter nicht ohne weiteres feststellen kann, wer mit wem kommuniziert, selbst wenn TLS kompromittiert wurde.", - "simplex-unique-overlay-card-4-p-3": "Wenn Sie darüber nachdenken, für die SimpleX-Plattform zu entwickeln, z.B. einen Chatbot für SimpleX-App-Nutzer oder die Integration der SimpleX-Chat-Bibliothek in Ihre mobilen Apps, kontaktieren Sie uns bitte für weitere Beratung und Unterstützung.", + "simplex-unique-overlay-card-4-p-3": "Wenn Sie darüber nachdenken, für die SimpleX-Plattform entwickeln zu wollen, z.B. einen Chatbot für SimpleX-App-Nutzer oder die Integration der SimpleX-Chat-Bibliothek in Ihre mobilen Apps, kontaktieren Sie uns bitte für eine weitere Beratung und Unterstützung.", "privacy-matters-overlay-card-1-p-4": "Die SimpleX-Plattform schützt die Privatsphäre Ihrer Verbindungen besser als jede Alternative und verhindert vollständig, dass Ihr sozialer Graph für Unternehmen oder Organisationen verfügbar wird. Selbst wenn die Anwender SimpleX-Chat-Server verwenden, kennen wir die Anzahl der Benutzer oder ihre Verbindungen nicht.", "contact-hero-header": "Sie haben eine Adresse zur Verbindung mit SimpleX Chat erhalten", "invitation-hero-header": "Sie haben einen Einmal-Link zur Verbindung mit SimpleX Chat erhalten", - "privacy-matters-overlay-card-3-p-3": "Gewöhnliche Menschen werden für das, was sie online teilen, sogar unter Nutzung ihrer \"anonymen\" Konten, selbst in demokratischen Ländern verhaftet.", + "privacy-matters-overlay-card-3-p-3": "Normale Menschen werden für das, was sie online teilen, sogar unter Nutzung ihrer \"anonymen\" Konten, selbst in demokratischen Ländern verhaftet.", "simplex-unique-overlay-card-3-p-1": "SimpleX Chat speichert alle Benutzerdaten ausschließlich auf den Endgeräten in einem portablen und verschlüsselten Datenbankformat, welches exportiert und auf jedes unterstützte Gerät übertragen werden kann.", - "simplex-unique-overlay-card-2-p-2": "Auch wenn die optionale Benutzeradresse zum Versenden von Spam-Kontaktanfragen verwendet werden kann, können Sie sie ändern oder ganz löschen, ohne dass Ihre Verbindungen verloren gehen.", + "simplex-unique-overlay-card-2-p-2": "Auch wenn die optionale Benutzeradresse zum Versenden von SPAM-Kontaktanfragen verwendet werden kann, können Sie sie ändern oder ganz löschen, ohne dass Ihre Verbindungen verloren gehen.", "simplex-unique-overlay-card-4-p-2": "Die SimpleX-Plattform verwendet ein offenes Protokoll und bietet ein SDK zur Erstellung von Chatbots an, welches die Erstellung von Diensten ermöglicht, mit denen Nutzer über SimpleX-Chat interagieren können — Wir sind gespannt, welche SimpleX-Dienste Sie erstellen können.", "simplex-unique-card-4-p-2": "Sie können SimpleX mit Ihren eigenen Servern oder mit den von uns zur Verfügung gestellten Servern verwenden — und sich trotzdem mit jedem Benutzer verbinden.", "why-simplex-is": "Warum ist SimpleX", "contact-hero-p-1": "Die öffentlichen Schlüssel und die Adresse der Nachrichtenwarteschlange in diesem Link werden NICHT über das Netzwerk gesendet, wenn Sie diese Seite aufrufen — Sie sind in dem Hash-Fragment der Link-URL enthalten.", "if-you-already-installed-simplex-chat-for-the-terminal": "Wenn Sie SimpleX schon für das Terminal installiert haben", "simplex-network-3-desc": "Die Server stellen unidirektionale Warteschlangen zur Verfügung, um die Benutzer miteinander zu verbinden. Sie haben aber keinen Einblick in den Verbindungs-Graphen des Netzwerks — Diesen haben nur die Benutzer selbst." -} \ No newline at end of file +} diff --git a/website/langs/es.json b/website/langs/es.json new file mode 100644 index 000000000..dc0c37229 --- /dev/null +++ b/website/langs/es.json @@ -0,0 +1,43 @@ +{ + "reference": "Referencia", + "why-simplex": "Por que Simplex", + "simplex-privacy": "Privacidad de SimpleX", + "simplex-explained-tab-1-text": "1. Lo que experimentan los usuarios", + "simplex-explained-tab-2-text": "2. ¿Cómo funciona?", + "simplex-network": "La red Simplex", + "simplex-explained-tab-3-text": "3. Qué ven los servidores", + "simplex-explained-tab-2-p-2": "Los servidores solo pasan mensajes de una manera, sin tener la imagen completa de la conversación o las conexiones del usuario.", + "simplex-explained-tab-3-p-2": "Los usuarios pueden mejorar aún más la privacidad de los metadatos utilizando Tor para acceder a los servidores, evitando la correlación por dirección IP.", + "smp-protocol": "Protocolo SMP", + "donate": "Donar", + "copyright-label": "© 2020-2023 SimpleX | Proyecto Open-Source", + "simplex-chat-protocol": "Protocolo de SimpleX Chat", + "terms-and-privacy-policy": "Términos y Política de Privacidad", + "hero-header": "La privacidad redefinida", + "hero-overlay-1-textlink": "¿Por qué los ID de usuario son malos para la privacidad?", + "hero-overlay-2-textlink": "¿Cómo funciona SimpleX?", + "hero-2-header": "Haz una conexión privada", + "hero-overlay-1-title": "¿Cómo funciona SimpleX?", + "hero-overlay-2-title": "¿Por qué los ID de usuario son malos para la privacidad?", + "feature-1-title": "Mensajes cifrados E2E con markdown y edición", + "feature-3-title": "Grupos secretos descentralizados —
sólo los usuarios saben que existen", + "feature-6-title": "Llamadas de audio y vídeo con cifrado E2E", + "simplex-network-overlay-1-title": "Comparación con protocolos de mensajería P2P", + "developers": "Desarrolladores", + "features": "Características", + "blog": "Blog", + "home": "Inicio", + "simplex-explained-tab-3-p-1": "Los servidores tienen credenciales anónimas separadas para cada cola y no saben a qué usuarios pertenecen.", + "hero-p-1": "Otras aplicaciones tienen ID de usuario: Signal, Matrix, Session, Briar, Jami, Cwtch, etc.
SimpleX no los tiene, ni siquiera números aleatorios.
Esto mejora radicalmente su privacidad.", + "hero-2-header-desc": "El video muestra cómo te conectas con tu amigo a través de su código QR de un solo uso, en persona o a través de un enlace de video. También puede conectarse compartiendo un enlace de invitación.", + "feature-7-title": "Base de datos cifrada portátil— mueva su perfil a otro dispositivo", + "simplex-private-card-4-point-2": "Para usar SimpleX a través de Tor, instale Orbot app y active el proxy SOCKS5 (o VPN en iOS).", + "simplex-private-card-3-point-1": "Para las conexiones cliente-servidor sólo se utiliza TLS 1.2/1.3 con algoritmos robustos.", + "simplex-private-card-4-point-1": "Para proteger su dirección IP, puede acceder a los servidores a través de Tor u otra red de transporte superpuesta.", + "simplex-private-card-5-point-2": "Esto hace que mensajes de distintos tamaños parezcan iguales a los ojos de los servidores y observadores de la red.", + "simplex-private-card-6-point-1": "Muchas plataformas de comunicación son vulnerables a ataques MITM por parte de servidores o proveedores de red.", + "simplex-private-card-7-point-1": "Para garantizar la integridad, los mensajes se numeran secuencialmente e incluyen el hash del mensaje anterior.", + "simplex-private-card-7-point-2": "Si se añade, elimina o modifica algún mensaje, se avisará al destinatario.", + "simplex-private-card-8-point-1": "Los servidores de SimpleX actúan como nodos de mezcla de baja latencia — los mensajes entrantes y salientes tienen un orden diferente.", + "simplex-private-card-9-point-1": "Cada cola de mensajes pasa mensajes en una dirección, con diferentes direcciones de envío y recepción." +} diff --git a/website/langs/fr.json b/website/langs/fr.json index deeb7d3d3..42a9cfc7d 100644 --- a/website/langs/fr.json +++ b/website/langs/fr.json @@ -56,7 +56,7 @@ "simplex-private-card-1-point-1": "Protocole à double ratchet —
Messagerie OTR avec confidentialité persistante et récupération en cas d'effraction.", "simplex-private-card-1-point-2": "Cryptobox NaCL dans chaque file d'attente pour empêcher toute corrélation de trafic entre les files d'attente de messages si le TLS est compromis.", "simplex-private-card-2-point-1": "Couche supplémentaire de chiffrement du serveur pour la livraison au destinataire, afin d'empêcher la corrélation entre le trafic du serveur reçu et envoyé si le TLS est compromis.", - "simplex-private-card-3-point-1": "Seul TLS 1.2/1.3 avec des algorithmes puissants est utilisé pour les connexions client-serveur.", + "simplex-private-card-3-point-1": "Les connexions client-serveur ne sont établies qu'avec des algorithmes de chiffrement robustes et en TLS 1.2/1.3.", "simplex-private-card-3-point-2": "L'empreinte du serveur et la fixation des canaux empêchent les attaques MITM et les attaques par rejeu.", "simplex-private-card-3-point-3": "La reprise de connexion est désactivée pour empêcher les attaques de session.", "simplex-private-card-4-point-1": "Pour protéger votre adresse IP, vous pouvez accéder aux serveurs via Tor ou un autre réseau de transport superposé.", @@ -67,20 +67,20 @@ "simplex-private-card-6-point-2": "Pour l'empêcher, les applications SimpleX transmettent des clés à usage unique hors bande, lorsque vous partagez une adresse sous forme de lien ou de code QR.", "simplex-private-card-7-point-1": "Pour garantir l'intégrité, les messages sont numérotés séquentiellement et incluent le hachage du message précédent.", "simplex-private-card-7-point-2": "Si un message est ajouté, supprimé ou modifié, le destinataire sera alerté.", - "simplex-private-card-8-point-1": "Les serveurs SimpleX agissent comme des nœuds mixtes à faible latence - les messages entrants et sortants ont un ordre différent.", + "simplex-private-card-8-point-1": "Les serveurs SimpleX agissent comme des nœuds de mixage à faible latence - les messages entrants et sortants ont un ordre différent.", "simplex-private-card-9-point-1": "Chaque file d'attente de messages transmet les messages dans une direction, avec des adresses d'envoi et de réception différentes.", "simplex-private-card-9-point-2": "Il réduit les vecteurs d'attaque, par rapport aux agents de messagerie traditionnels, et les métadonnées disponibles.", "simplex-private-card-10-point-1": "SimpleX utilise des adresses et des informations d'identification anonymes temporaires par paires pour chaque contact utilisateur ou membre de groupe.", "simplex-private-card-10-point-2": "Il permet la distribution de messages sans identifiants de profil utilisateur, offrant une meilleure confidentialité des métadonnées que les alternatives.", - "privacy-matters-1-title": "Publicité et discrimination par les prix", - "privacy-matters-1-overlay-1-title": "La protection de votre vie privée vous fait économiser de l'argent", - "privacy-matters-1-overlay-1-linkText": "La protection de votre vie privée vous fait économiser de l'argent", - "privacy-matters-2-title": "Manipulation des élections", - "privacy-matters-2-overlay-1-title": "Le respect de votre vie privée vous donne un pouvoir", - "privacy-matters-2-overlay-1-linkText": "Le respect de votre vie privée vous donne un pouvoir", - "privacy-matters-3-title": "Poursuites pour association innocente", - "privacy-matters-3-overlay-1-title": "Le respect de votre vie privée protège votre liberté", - "privacy-matters-3-overlay-1-linkText": "Le respect de votre vie privée protège votre liberté", + "privacy-matters-1-title": "La publicité et la discrimination par les prix", + "privacy-matters-1-overlay-1-title": "Protéger votre vie privée peut vous faire économiser de l'argent", + "privacy-matters-1-overlay-1-linkText": "Protéger votre vie privée peut vous faire économiser de l'argent", + "privacy-matters-2-title": "La manipulation des élections", + "privacy-matters-2-overlay-1-title": "Préserver sa vie privée, c'est s'offrir du pouvoir", + "privacy-matters-2-overlay-1-linkText": "Préserver sa vie privée, c'est s'offrir du pouvoir", + "privacy-matters-3-title": "Les accusations pour association innocente", + "privacy-matters-3-overlay-1-title": "Protéger votre vie privée, c'est défendre votre liberté", + "privacy-matters-3-overlay-1-linkText": "Protéger votre vie privée, c'est défendre votre liberté", "simplex-unique-1-title": "Vous avez une confidentialité totale", "simplex-unique-1-overlay-1-title": "Confidentialité totale de votre identité, profil, contacts et métadonnées", "simplex-unique-2-title": "Vous êtes protégé
contre les spams et les abus", @@ -98,7 +98,7 @@ "hero-overlay-card-2-p-1": "Lorsque les utilisateurs ont des identités persistantes, même s'il ne s'agit que d'un nombre aléatoire, comme un ID de session, il y a un risque que le fournisseur ou un attaquant puisse observer comment les utilisateurs sont connectés et combien de messages ils envoient.", "hero-overlay-card-2-p-2": "Ils pourraient ensuite corréler ces informations avec les réseaux sociaux publics existants, et déterminer de véritables identités.", "hero-overlay-card-2-p-3": "Même avec les applications les plus privées qui utilisent les services Tor v3, si vous parlez à deux contacts différents via le même profil, ils peuvent prouver qu'ils sont connectés à la même personne.", - "hero-overlay-card-2-p-4": "SimpleX protège contre ces attaques en n'ayant aucun identifiant d'utilisateur dans on modèle. Et, si vous utilisez le mode Incognito, vous aurez un nom d'affichage différent pour chaque contact, évitant toutes les données partagées entre eux.", + "hero-overlay-card-2-p-4": "SimpleX protège contre ces attaques en n'ayant aucun identifiant d'utilisateur dans son modèle. Et, si vous utilisez le mode Incognito, vous aurez un nom d'affichage différent pour chaque contact, évitant toutes données partagées entre eux.", "simplex-network-overlay-card-1-p-1": "Les applications et protocoles de messagerie P2P présentent divers problèmes qui les rendent moins fiables que SimpleX, plus complexes à analyser et vulnérables à plusieurs types d'attaques.", "simplex-network-overlay-card-1-li-1": "Les réseaux P2P reposent sur une variante du DHT pour distribuer les messages. Les conceptions DHT doivent équilibrer la garantie de livraison et la latence. SimpleX offre à la fois une meilleure garantie de livraison et une latence plus faible que le P2P, car le message peut être transmis de manière redondante via plusieurs serveurs en parallèle, en utilisant les serveurs choisis par le destinataire. Dans les réseaux P2P, le message est transmis séquentiellement à travers O(log N) nœuds, en utilisant les nœuds choisis par l'algorithme.", "simplex-network-overlay-card-1-li-2": "Le modèle de SimpleX, contrairement à la plupart des réseaux P2P, n'a aucun identifiant utilisateur global d'aucune sorte, même temporaire, et n'utilise que des identifiants temporaires par paires, offrant un meilleur anonymat et une meilleure protection des métadonnées .", @@ -172,13 +172,13 @@ "if-you-already-installed": "Si vous avez déjà installé", "simplex-chat-for-the-terminal": "Chat SimpleX pour le terminal", "copy-the-command-below-text": "copiez la commande ci-dessous et utilisez-la dans le chat :", - "privacy-matters-section-header": "Pourquoi la protection de la vie privé est importante", - "privacy-matters-section-subheader": "La préservation de la confidentialité de vos métadonnées — avec qui vous parlez vous protège de :", - "privacy-matters-section-label": "Assurez-vous que votre messagerie ne peut pas accéder à vos données !", + "privacy-matters-section-header": "Pourquoi protéger votre vie privée est important", + "privacy-matters-section-subheader": "Assurer la confidentialité de vos métadonnées — c'est-à-dire avec qui vous communiquez — vous protège contre :", + "privacy-matters-section-label": "Gardez le contrôle de vos données en empêchant votre messagerie d'y accéder !", "simplex-private-section-header": "Ce qui rend SimpleX privé", "tap-to-close": "Appuyez pour fermer", "simplex-network-section-header": "Réseau SimpleX", - "simplex-network-section-desc": "Simplex Chat offre la meilleure protection de votre vie privé en combinant les avantages du P2P et des réseaux fédérés.", + "simplex-network-section-desc": "Simplex Chat offre la meilleure protection pour votre vie privée en combinant les avantages du P2P et des réseaux fédérés.", "simplex-network-1-header": "Contrairement aux réseaux P2P", "simplex-network-1-desc": "Tous les messages sont envoyés via les serveurs, offrant à la fois une meilleure protection des métadonnées et une livraison asynchrone fiable des messages, tout en évitant de nombreux", "simplex-network-1-overlay-linktext": "problèmes des réseaux P2P", diff --git a/website/langs/it.json b/website/langs/it.json new file mode 100644 index 000000000..70d7ac171 --- /dev/null +++ b/website/langs/it.json @@ -0,0 +1,213 @@ +{ + "features": "Caratteristiche", + "why-simplex": "Perché SimpleX", + "simplex-privacy": "Privacy di SimpleX", + "simplex-network": "Rete di SimpleX", + "simplex-explained": "SimpleX spiegato", + "simplex-explained-tab-1-text": "1. Cosa fanno gli utenti", + "simplex-explained-tab-2-text": "2. Come funziona", + "simplex-explained-tab-1-p-2": "Come può funzionare con code unidirezionali e senza identificatori utente?", + "simplex-explained-tab-3-p-1": "I server hanno credenziali anonime separate per ogni coda e non sanno a quali utenti appartengano.", + "chat-protocol": "Protocollo di chat", + "donate": "Dona", + "copyright-label": "© 2020-2023 SimpleX | Progetto Open-Source", + "simplex-chat-protocol": "Protocollo di SimpleX Chat", + "terminal-cli": "Terminale CLI", + "terms-and-privacy-policy": "Termini e Informativa sulla privacy", + "hero-header": "Privacy ridefinita", + "hero-subheader": "Il primo messenger
senza ID utente", + "hero-p-1": "Le altre app hanno gli ID utente: Signal, Matrix, Session, Briar, Jami, Cwtch, ecc.
SimpleX invece no, neanche dei numeri casuali.
Ciò aumenta radicalmente la tua privacy.", + "hero-overlay-1-textlink": "Perché gli ID utente limitano la privacy?", + "hero-overlay-2-textlink": "Come funziona SimpleX?", + "hero-2-header": "Crea una connessione privata", + "hero-2-header-desc": "Il video mostra come connetterti ai tuoi amici attraverso il loro codice QR una tantum, di persona o con un link video. Potete anche connettervi condividendo un link di invito.", + "hero-overlay-1-title": "Come funziona SimpleX?", + "hero-overlay-2-title": "Perché gli ID utente limitano la privacy?", + "feature-4-title": "Messaggi vocali crittografati E2E", + "feature-8-title": "Modalità incognito —
unica su SimpleX Chat", + "simplex-network-overlay-1-title": "Confronto con protocolli di messaggistica P2P", + "simplex-private-1-title": "2 livelli di
crittografia end-to-end", + "simplex-private-2-title": "Livello aggiuntivo di
crittografia lato server", + "simplex-private-3-title": "Trasporto TLS
autenticato sicuro", + "simplex-private-4-title": "Accesso via Tor
opzionale", + "simplex-private-7-title": "Verifica
dell'integrità dei messaggi", + "simplex-private-8-title": "Mescolamento dei messaggi
per ridurre le correlazioni", + "simplex-private-10-title": "Identificatori temporanei anonimi a coppie", + "simplex-private-card-1-point-1": "Protocollo Double-ratchet —
Messaggistica OTR con Perfect Forward Secrecy e recupero da intrusione.", + "simplex-private-card-2-point-1": "Livello aggiuntivo di crittografia lato server per il recapito al destinatario, per impedire la correlazione tra il traffico del server ricevuto e inviato se il TLS è compromesso.", + "simplex-private-card-3-point-1": "Usato solo TLS 1.2/1.3 con algoritmi avanzati per connessioni client-server.", + "simplex-private-card-3-point-2": "Impronta del server e associazione dei canali evitano attacchi MITM e replay.", + "simplex-private-card-4-point-1": "Per proteggere il tuo indirizzo IP puoi accedere ai server tramite Tor o un'altra rete di trasporto sovrapposta.", + "simplex-private-5-title": "Diversi strati di
riempimento dei contenuti", + "simplex-private-card-5-point-1": "SimpleX usa il riempimento dei contenuti per ogni livello di crittografia per frustrare gli attacchi alle dimensioni dei messaggi.", + "simplex-private-card-5-point-2": "Fa sì che i messaggi di dimensioni diverse appaiano uguali ai server e a chi osserva la rete.", + "simplex-private-card-6-point-2": "Per evitarlo, le app SimpleX passano chiavi monouso fuori banda, quando condividi un indirizzo come link o codice QR.", + "simplex-private-card-8-point-1": "I server SimpleX fungono da nodi mix a bassa latenza — i messaggi in entrata e in uscita hanno un ordine diverso.", + "privacy-matters-1-overlay-1-linkText": "La privacy ti fa risparmiare denaro", + "privacy-matters-3-title": "Condanne a causa di associazione innocente", + "privacy-matters-3-overlay-1-title": "La privacy protegge la tua libertà", + "simplex-unique-1-title": "Hai una privacy completa", + "simplex-unique-1-overlay-1-title": "Piena privacy della tua identità, profilo, contatti e metadati", + "simplex-unique-2-title": "Sei protetto
da spam e abusi", + "simplex-unique-2-overlay-1-title": "La migliore protezione da spam e abusi", + "simplex-unique-3-title": "Sei tu a controllare i tuoi dati", + "simplex-unique-4-title": "Possiedi la rete SimpleX", + "simplex-unique-4-overlay-1-title": "Completamente decentralizzata — gli utenti possiedono la rete SimpleX", + "hero-overlay-card-1-p-1": "Molti utenti hanno chiesto: se SimpleX non ha identificatori utente, come può sapere dove recapitare i messaggi? ", + "hero-overlay-card-1-p-3": "Sei tu a definire quale/i server usare per ricevere i messaggi, i tuoi contatti — i server che usi per inviare loro i messaggi. È probabile che ogni conversazione utilizzi due server diversi.", + "hero-overlay-card-1-p-5": "Solo i dispositivi client conservano profili utente, contatti e gruppi; i messaggi vengono inviati con crittografia end-to-end a 2 livelli.", + "hero-overlay-card-1-p-6": "Maggiori informazioni nel libro bianco di SimpleX.", + "hero-overlay-card-2-p-2": "Potrebbero quindi correlare queste informazioni con i social network pubblici esistenti e determinare alcune identità reali.", + "hero-overlay-card-2-p-4": "SimpleX protegge da questi attacchi non avendo alcun ID utente per design. Inoltre, se usi la modalità di modalità in incognito, il tuo nome mostrato sarà diverso per ogni contatto, evitando dati condivisi tra di loro.", + "simplex-network-overlay-card-1-li-2": "Il design di SimpleX, a differenza della maggior parte delle reti P2P, non ha identificatori utente globali di alcun tipo, nemmeno temporanei, e usa solo identificatori temporanei a coppie, garantendo una maggiore protezione dell'anonimato e dei metadati.", + "simplex-network-overlay-card-1-li-4": "Le implementazioni P2P possono essere bloccate da alcuni fornitori di internet (come BitTorrent). SimpleX è indipendente dal trasporto - può funzionare su protocolli web standard, es. WebSocket.", + "hero-overlay-card-2-p-1": "Quando gli utenti hanno identità permanenti, anche se si tratta solo di un numero casuale, come un Session ID, c'è il rischio che il fornitore o un malintenzionato possano osservare come gli utenti sono connessi e quanti messaggi inviano.", + "simplex-network-overlay-card-1-li-6": "Le reti P2P possono essere vulnerabili all'attacco DRDoS, quando i client possono ritrasmettere e amplificare il traffico, con conseguente \"denial of service\" a livello di rete. I client SimpleX si limitano a inoltrare il traffico da una connessione nota e non possono essere usati da un aggressore per amplificare il traffico nell'intera rete.", + "privacy-matters-overlay-card-1-p-4": "La piattaforma SimpleX protegge la privacy delle tue connessioni meglio di qualsiasi alternativa, impedendo completamente che il tuo grafico sociale sia disponibile a qualsiasi azienda o organizzazione. Anche quando le persone usano i server forniti da SimpleX Chat, non conosciamo il numero di utenti o le loro connessioni.", + "privacy-matters-overlay-card-2-p-3": "SimpleX è la prima piattaforma che non ha alcun identificatore utente per design, proteggendo così il tuo grafico delle connessioni meglio di qualsiasi alternativa conosciuta.", + "privacy-matters-overlay-card-3-p-1": "Tutti dovrebbero preoccuparsi della privacy e della sicurezza delle proprie comunicazioni — conversazioni innocue possono metterti in pericolo, anche se non hai nulla da nascondere.", + "privacy-matters-overlay-card-3-p-3": "Le persone comuni vengono arrestate per ciò che condividono online, anche tramite i loro account \"anonimi\", anche nei Paesi democratici.", + "simplex-unique-overlay-card-1-p-3": "Questo design protegge la privacy di chi stai comunicando, nascondendola ai server della piattaforma SimpleX e a qualsiasi osservatore. Per nascondere il tuo indirizzo IP ai server, puoi connetterti ai server SimpleX tramite Tor.", + "simplex-unique-overlay-card-2-p-1": "Poiché non hai alcun identificatore sulla piattaforma SimpleX, nessuno può contattarti a meno che tu non condivida un indirizzo utente una tantum o temporaneo, come un codice QR o un link.", + "simplex-unique-overlay-card-2-p-2": "Anche l'indirizzo utente opzionale, che può essere usato per inviare richieste di contatto spam, è possibile modificarlo o eliminarlo completamente senza perdere alcuna connessione.", + "simplex-unique-overlay-card-3-p-1": "SimpleX Chat conserva tutti i dati utente solo sui dispositivi client usando un formato trasferibile di database crittografato che può essere esportato e trasferito su qualsiasi dispositivo supportato.", + "simplex-unique-overlay-card-3-p-2": "I messaggi crittografati end-to-end vengono conservati temporaneamente sui server di inoltro SimpleX fino alla ricezione, quindi vengono eliminati definitivamente.", + "simplex-unique-overlay-card-4-p-1": "Puoi usare SimpleX con i tuoi server personali e continuare a comunicare con le persone che usano i server preconfigurati forniti da noi.", + "simplex-unique-overlay-card-4-p-3": "Se stai pensando di sviluppare per la piattaforma SimpleX, ad esempio, il chat bot per gli utenti dell'app SimpleX o l'integrazione della libreria SimpleX Chat nelle tue app mobili, contattaci per qualsiasi consiglio e supporto.", + "simplex-unique-card-1-p-1": "SimpleX protegge la privacy del tuo profilo, contatti e metadati, nascondendoli ai server della piattaforma SimpleX e ad eventuali osservatori.", + "simplex-unique-card-1-p-2": "A differenza di qualsiasi altra piattaforma di messaggistica esistente, SimpleX non ha identificatori assegnati agli utenti — nemmeno numeri casuali.", + "simplex-unique-card-2-p-1": "Poiché non hai un identificatore o un indirizzo fisso sulla piattaforma SimpleX, nessuno può contattarti a meno che tu non condivida un indirizzo utente una tantum o temporaneo, come codice un QR o un link.", + "simplex-unique-card-3-p-1": "SimpleX conserva tutti i dati utente sui dispositivi client in un formato trasferibile di database crittografato — può essere trasferito su un altro dispositivo.", + "join": "Unisciti a", + "we-invite-you-to-join-the-conversation": "Ti invitiamo a unirti alla conversazione", + "enter-your-email-address": "Inserisci il tuo indirizzo email", + "get-simplex": "Ottieni SimpleX", + "why-simplex-is": "Perché SimpleX è", + "unique": "unico", + "learn-more": "Maggiori informazioni", + "more-info": "Mostra info", + "hide-info": "Nascondi info", + "contact-hero-header": "Hai ricevuto un indirizzo per connetterti su SimpleX Chat", + "invitation-hero-header": "Hai ricevuto un link una tantum per connetterti su SimpleX Chat", + "contact-hero-subheader": "Scansiona il codice QR con l'app SimpleX Chat sul tuo telefono o tablet.", + "contact-hero-p-1": "Le chiavi pubbliche e l'indirizzo della coda di messaggi in questo link NON vengono inviati in rete quando vedi questa pagina — sono contenuti nel frammento hash dell'URL del link.", + "contact-hero-p-2": "Non hai ancora scaricato SimpleX Chat?", + "contact-hero-p-3": "Usa i link sottostanti per scaricare l'app.", + "scan-qr-code-from-mobile-app": "Scansiona il codice QR dall'app mobile", + "install-simplex-app": "Installa l'app SimpleX", + "connect-in-app": "Connettiti nell'app", + "open-simplex-app": "Apri l'app SimpleX", + "tap-the-connect-button-in-the-app": "Tocca il pulsante 'connetti' nell'app", + "scan-the-qr-code-with-the-simplex-chat-app": "Scansiona il codice QR con l'app SimpleX Chat", + "installing-simplex-chat-to-terminal": "Installazione di SimpleX Chat nel terminale", + "use-this-command": "Usa questo comando:", + "see-simplex-chat": "Vedi SimpleX Chat", + "github-repository": "Repository GitHub", + "the-instructions--source-code": "le istruzioni su come scaricarlo o compilarlo dal codice sorgente.", + "if-you-already-installed-simplex-chat-for-the-terminal": "Se hai già installato SimpleX Chat per il terminale", + "if-you-already-installed": "Se hai già installato", + "privacy-matters-section-subheader": "Preservare la privacy dei tuoi metadati — con chi parli — ti protegge da:", + "privacy-matters-section-label": "Assicurati che il tuo messenger non possa accedere ai tuoi dati!", + "simplex-network-section-header": "Rete di SimpleX", + "simplex-network-section-desc": "Simplex Chat offre la migliore privacy combinando i vantaggi del P2P e delle reti federate.", + "simplex-network-1-header": "A differenza delle reti P2P", + "simplex-network-1-overlay-linktext": "problemi delle reti P2P", + "simplex-network-2-header": "A differenza delle reti federate", + "simplex-network-2-desc": "I server di inoltro SimpleX NON conservano i profili utente, i contatti e i messaggi consegnati, NON si connettono tra loro e NON esiste una directory dei server.", + "comparison-section-header": "Confronto con altri protocolli", + "protocol-1-text": "Signal, grandi piattaforme", + "protocol-2-text": "XMPP, Matrix", + "protocol-3-text": "Protocolli P2P", + "comparison-point-1-text": "Richiede un'identità globale", + "comparison-point-2-text": "Possibilità di MITM", + "comparison-point-3-text": "Dipendenza dai DNS", + "comparison-point-4-text": "Rete singola o centralizzata", + "yes": "Sì", + "no": "No", + "no-private": "No - privato", + "no-secure": "No - sicuro", + "no-resilient": "No - resistente", + "no-decentralized": "No - decentralizzato", + "no-federated": "No - federato", + "comparison-section-list-point-1": "Solitamente si basa su un numero di telefono, in alcuni casi su nomi utente", + "comparison-section-list-point-2": "Indirizzi basati su DNS", + "comparison-section-list-point-6": "Sebbene i P2P siano distribuiti, non sono federati - operano come un'unica rete", + "comparison-section-list-point-7": "Le reti P2P hanno un'autorità centrale o l'intera rete può essere compromessa", + "see-here": "vedi qui", + "simplex-network-3-header": "Nella rete di SimpleX", + "simplex-private-card-7-point-2": "Se un messaggio viene aggiunto, rimosso o modificato, il destinatario verrà avvisato.", + "hero-overlay-card-1-p-2": "Per consegnare i messaggi, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX usa identificatori temporanei anonimi a coppie delle code di messaggi, separati per ciascuna delle tue connessioni — non ci sono identificatori a lungo termine.", + "simplex-private-card-6-point-1": "Molte piattaforme di comunicazione sono vulnerabili agli attacchi MITM da parte di server o fornitori di rete.", + "simplex-private-card-7-point-1": "Per garantire l'integrità, i messaggi sono numerati in sequenza e includono l'hash del messaggio precedente.", + "simplex-private-card-9-point-2": "Riduce i vettori di attacco, rispetto ai broker di messaggi tradizionali, e i metadati disponibili.", + "simplex-private-card-10-point-2": "Ciò consente di recapitare messaggi senza identificatori del profilo utente, garantendo una migliore privacy dei metadati rispetto alle alternative.", + "privacy-matters-1-title": "Pubblicità e discriminazione dei prezzi", + "privacy-matters-2-overlay-1-title": "La privacy ti dà potere", + "simplex-private-card-9-point-1": "Ogni coda di messaggi passa i messaggi in una direzione, con i diversi indirizzi di invio e ricezione.", + "simplex-private-card-10-point-1": "SimpleX usa indirizzi e credenziali temporanei anonimi a coppie, per ogni contatto o membro del gruppo.", + "privacy-matters-2-overlay-1-linkText": "La privacy ti dà potere", + "privacy-matters-1-overlay-1-title": "La privacy ti fa risparmiare denaro", + "privacy-matters-2-title": "Manipolazione delle elezioni", + "privacy-matters-3-overlay-1-linkText": "La privacy protegge la tua libertà", + "simplex-unique-3-overlay-1-title": "Proprietà, controllo e sicurezza dei tuoi dati", + "simplex-private-9-title": "Code di messaggi
unidirezionali", + "home": "Home", + "developers": "Sviluppatori", + "simplex-explained-tab-1-p-1": "Puoi creare contatti e gruppi, ed avere conversazioni bidirezionali, come in qualsiasi altro messenger.", + "feature-2-title": "Immagini e file
crittografati E2E", + "simplex-private-card-4-point-2": "Per usare SimpleX tramite Tor, installa l'app Orbot e attiva il proxy SOCKS5 (o VPN su iOS).", + "reference": "Riferimenti", + "simplex-explained-tab-3-text": "3. Cosa vedono i server", + "chat-bot-example": "Esempio di chat bot", + "feature-3-title": "Gruppi segreti decentralizzati —
solo gli utenti sanno che esistono", + "blog": "Blog", + "simplex-explained-tab-2-p-1": "Per ogni connessione usi due code di messaggi distinte per inviare e ricevere i messaggi attraverso server diversi.", + "simplex-explained-tab-2-p-2": "I server passano i messaggi solo in una direzione, senza avere il quadro completo della conversazione dell'utente o delle connessioni.", + "simplex-explained-tab-3-p-2": "Gli utenti possono aumentare ulteriormente la privacy dei metadati usando Tor per accedere ai server, evitando correlazioni per indirizzo IP.", + "smp-protocol": "Protocollo SMP", + "feature-1-title": "Messaggi crittografati E2E con markdown e modifica", + "feature-5-title": "Conversazioni segrete a tempo", + "feature-6-title": "Chiamate audio e video
crittografate E2E", + "simplex-private-6-title": "Scambio di chiavi
fuori banda", + "feature-7-title": "Database crittografato trasferibile — sposta il tuo profilo su un altro dispositivo", + "simplex-private-card-1-point-2": "Cryptobox NaCL in ogni coda per impedire la correlazione del traffico tra le code di messaggi se il TLS è compromesso.", + "simplex-private-card-3-point-3": "Ripresa della connessione disattivata per evitare attacchi alla sessione.", + "hero-overlay-card-1-p-4": "Questo design impedisce la fuoriuscita di metadati degli utenti a livello di applicazione. Per aumentare ulteriormente la privacy e proteggere il tuo indirizzo IP puoi connetterti ai server di messaggistica tramite Tor.", + "hero-overlay-card-2-p-3": "Anche con le app più private che usano i servizi Tor v3, se parli con due contatti diversi tramite lo stesso profilo, questi possono dimostrare di essere connessi alla stessa persona.", + "simplex-network-overlay-card-1-p-1": "I protocolli e le app di messaggistica P2P hanno diversi problemi che li rendono meno affidabili di SimpleX, più complessi da analizzare e vulnerabili a diversi tipi di attacco.", + "simplex-network-overlay-card-1-li-1": "Le reti P2P si basano su alcune varianti di DHT per instradare i messaggi. I progetti DHT devono bilanciare la garanzia di consegna e la latenza. SimpleX ha sia una migliore garanzia di consegna che una latenza minore rispetto al P2P, perché il messaggio può essere passato in modo ridondante attraverso diversi server in parallelo, usando i server scelti dal destinatario. Nelle reti P2P il messaggio viene passato attraverso i nodi O(log N) in sequenza, usando nodi scelti dall'algoritmo.", + "simplex-network-overlay-card-1-li-3": "Il P2P non risolve il problema dell'attacco MITM e la maggior parte delle implementazioni esistenti non usa messaggi fuori banda per lo scambio iniziale di chiavi. SimpleX usa messaggi fuori banda o, in alcuni casi, connessioni sicure e attendibili preesistenti per lo scambio iniziale di chiavi.", + "privacy-matters-overlay-card-1-p-1": "Molte grandi aziende usano le informazioni sulle persone con cui sei connesso per stimare il tuo reddito, venderti i prodotti di cui non hai realmente bisogno e determinare i prezzi.", + "simplex-network-overlay-card-1-li-5": "Tutte le reti P2P conosciute possono essere vulnerabili all'attacco di Sybil, perché ogni nodo è rilevabile e la rete opera come un tutt'uno. Le misure note per mitigarlo richiedono un componente centralizzato o proof-of-work costosi. La rete di SimpleX non ha la possibilità di scoprire i server, è frammentata e opera come più sottoreti isolate, rendendo impossibili gli attacchi a livello di rete.", + "privacy-matters-overlay-card-1-p-2": "I rivenditori online sanno che le persone con redditi più bassi sono più propense a fare acquisti urgenti, quindi possono applicare prezzi più alti o rimuovere sconti.", + "privacy-matters-overlay-card-1-p-3": "Alcune società finanziarie e assicurative usano grafici sociali per determinare i tassi di interesse e i premi. Spesso ciò fa pagare di più le persone con redditi più bassi — è noto come \"premio di povertà\" .", + "privacy-matters-overlay-card-2-p-1": "Non molto tempo fa abbiamo assistito alla manipolazione delle principali elezioni da una rispettabile società di consulenza che ha usato i nostri grafici sociali per distorcere la nostra visione del mondo reale e manipolare i nostri voti.", + "privacy-matters-overlay-card-2-p-2": "Per essere obiettivi e prendere decisioni indipendenti devi avere il controllo del tuo spazio informativo. È possibile solo se utilizzi una piattaforma di comunicazione privata che non ha accesso al tuo grafico sociale.", + "privacy-matters-overlay-card-3-p-2": "Una delle storie più scioccanti è l'esperienza di Mohamedou Ould Salahi descritta nel suo libro di memorie e mostrata nel film The Mauritanian. È stato rinchiuso nel campo di Guantánamo, senza processo, e lì è stato torturato per 15 anni dopo una telefonata a un suo parente in Afghanistan, sospettato di essere coinvolto negli attacchi dell'11/9, nonostante avesse vissuto in Germania per i precedenti 10 anni.", + "join-us-on-GitHub": "Unisciti a noi su GitHub", + "simplex-chat-for-the-terminal": "SimpleX Chat per il terminale", + "privacy-matters-overlay-card-3-p-4": "Non è sufficiente usare un messenger crittografato end-to-end, tutti dovremmo usare i messenger che proteggono la privacy delle nostre reti personali — con chi siamo connessi.", + "simplex-unique-overlay-card-1-p-2": "Per recapitare i messaggi, SimpleX usa indirizzi anonimi a coppie di code di messaggi unidirezionali, separate per i messaggi ricevuti e inviati, di solito tramite server diversi. Usare SimpleX è come avere un'email o telefono “temporanei” per ogni contatto, e nessuna seccatura per gestirli.", + "simplex-unique-overlay-card-1-p-1": "A differenza di altre piattaforme di messaggistica, SimpleX non ha alcun identificatore assegnato agli utenti. Non si basa su numeri di telefono, indirizzi basati su domini (come email o XMPP), nomi utente, chiavi pubbliche o persino numeri casuali per identificare i suoi utenti — non sappiamo quante persone usano i nostri server SimpleX.", + "simplex-unique-overlay-card-3-p-3": "A differenza dei server di reti federate (email, XMPP o Matrix), i server SimpleX non conservano gli account utente, ma trasmettono solo i messaggi, proteggendo la privacy di entrambe le parti.", + "simplex-unique-card-3-p-2": "I messaggi crittografati end-to-end vengono conservati temporaneamente sui server di inoltro SimpleX fino alla ricezione, quindi vengono eliminati definitivamente.", + "simplex-unique-card-4-p-2": "Puoi usare SimpleX con i tuoi server personali o con i server forniti da noi — e connetterti comunque a qualsiasi utente.", + "join-the-REDDIT-community": "Unisciti alla comunità di REDDIT", + "sign-up-to-receive-our-updates": "Iscriviti per ricevere i nostri aggiornamenti", + "simplex-unique-overlay-card-3-p-4": "Non ci sono identificatori o testi cifrati in comune tra il traffico del server inviato e quello ricevuto — se qualcuno lo osserva, non può determinare facilmente chi comunica con chi, anche se il TLS è compromesso.", + "simplex-unique-overlay-card-4-p-2": "La piattaforma SimpleX usa un protocollo aperto e fornisce un SDK per creare chat bot, consentendo l'implementazione di servizi con cui gli utenti possono interagire tramite le app SimpleX Chat — siamo impazienti di vedere quali servizi SimpleX puoi creare.", + "simplex-unique-card-4-p-1": "La rete SimpleX è completamente decentralizzata e indipendente da qualsiasi criptovaluta o altra piattaforma, ad eccezione di internet.", + "donate-here-to-help-us": "Dona qui per aiutarci", + "to-make-a-connection": "Per stabilire una connessione:", + "scan-the-qr-code-with-the-simplex-chat-app-description": "Le chiavi pubbliche e l'indirizzo della coda di messaggi in questo link NON vengono inviati in rete quando vedi questa pagina —
sono contenuti nel frammento hash dell'URL del link.", + "copy-the-command-below-text": "copia il comando qui sotto e usalo nella chat:", + "privacy-matters-section-header": "Perché la privacy è importante", + "simplex-private-section-header": "Cosa rende SimpleX privato", + "tap-to-close": "Tocca per chiudere", + "simplex-network-1-desc": "Tutti i messaggi vengono inviati tramite i server, garantendo una migliore privacy dei metadati e una consegna asincrona dei messaggi affidabile, evitando molti", + "simplex-network-3-desc": "i server forniscono code unidirezionali per connettere gli utenti, ma non hanno visibilità del grafo delle connessioni di rete — solo gli utenti.", + "comparison-point-5-text": "Componente centrale o altro attacco a livello di rete", + "comparison-section-list-point-5": "Non protegge i metadati degli utenti", + "comparison-section-list-point-3": "Chiave pubblica o altro ID univoco globale", + "comparison-section-list-point-4": "Se i server dell'operatore sono compromessi" +} diff --git a/website/langs/nl.json b/website/langs/nl.json index 30d2f4932..d7adc5049 100644 --- a/website/langs/nl.json +++ b/website/langs/nl.json @@ -5,28 +5,28 @@ "blog": "Blog", "features": "Functies", "why-simplex": "Waarom SimpleX", - "simplex-privacy": "SimpleX-privacy", - "simplex-network": "SimpleX-netwerk", + "simplex-privacy": "SimpleX privacy", + "simplex-network": "SimpleX netwerk", "simplex-explained": "Simplex uitgelegd", "simplex-explained-tab-1-text": "1. Wat gebruikers ervaren", "simplex-explained-tab-3-text": "3. Wat servers zien", - "simplex-explained-tab-1-p-1": "U kunt contacten en groepen maken en tweerichtingsgesprekken voeren, zoals in elke andere messenger.", + "simplex-explained-tab-1-p-1": "U kunt contacten en groepen maken en tweerichtings gesprekken voeren, zoals in elke andere messenger.", "simplex-explained-tab-1-p-2": "Hoe kan het werken met unidirectionele wachtrijen en zonder gebruikersprofiel-ID's?", "simplex-explained-tab-3-p-1": "De servers hebben afzonderlijke anonieme inloggegevens voor elke wachtrij en weten niet tot welke gebruikers ze behoren.", "simplex-explained-tab-3-p-2": "Gebruikers kunnen de privacy van metadata verder verbeteren door Tor te gebruiken om toegang te krijgen tot servers, waardoor corellatie op IP-adres wordt voorkomen.", "chat-bot-example": "Chatbot voorbeeld", - "smp-protocol": "SMP-protocol", + "smp-protocol": "SMP protocol", "donate": "Doneer", "copyright-label": "© 2020-2023 SimpleX | Open-sourceproject", - "simplex-chat-protocol": "SimpleX Chat-protocol", - "terminal-cli": "Terminal-CLI", + "simplex-chat-protocol": "SimpleX Chat protocol", + "terminal-cli": "Terminal CLI", "terms-and-privacy-policy": "Voorwaarden & Privacybeleid", - "hero-subheader": "De eerste messenger
zonder gebruikers-ID's", - "hero-overlay-1-textlink": "Waarom zijn gebruikers-ID's slecht voor de privacy?", + "hero-subheader": "De eerste messenger
zonder gebruikers ID's", + "hero-overlay-1-textlink": "Waarom zijn gebruikers ID's slecht voor de privacy?", "hero-overlay-2-textlink": "Hoe werkt SimpleX?", - "hero-2-header": "Maak een privéverbinding", + "hero-2-header": "Maak een privé verbinding", "hero-overlay-1-title": "Hoe werkt SimpleX?", - "hero-overlay-2-title": "Waarom zijn gebruikers-ID's slecht voor de privacy?", + "hero-overlay-2-title": "Waarom zijn gebruikers ID's slecht voor de privacy?", "feature-1-title": "E2E-versleutelde berichten met markdown en bewerking", "feature-2-title": "E2E-versleutelde
afbeeldingen en bestanden", "feature-3-title": "Gedecentraliseerde geheime groepen -
alleen gebruikers weten dat ze bestaan", @@ -34,39 +34,180 @@ "feature-5-title": "Verdwijnende geheime gesprekken", "feature-6-title": "E2E-versleutelde
audio- en videogesprekken", "feature-8-title": "Incognitomodus -
uniek voor SimpleX Chat", - "simplex-network-overlay-1-title": "Vergelijking met P2P-berichtenprotocollen", - "simplex-private-1-title": "2 lagen
end-to-end encryptie", - "simplex-private-2-title": "Extra laag
serverversleuteling", + "simplex-network-overlay-1-title": "Vergelijking met P2P berichten protocollen", + "simplex-private-1-title": "2 lagen
end-to-end versleuteling", + "simplex-private-2-title": "Extra laag
server versleuteling", "simplex-private-3-title": "Veilig geverifieerd
TLS-transport", "simplex-private-4-title": "Optionele
toegang via Tor", - "simplex-private-5-title": "Meerdere lagen van
inhoudsopvulling", + "simplex-private-5-title": "Meerdere lagen van
inhouds opvulling", "simplex-private-8-title": "Berichten mixen
om correlatie te verminderen", "simplex-private-9-title": "Unidirectionele
berichtenwachtrijen", "simplex-private-10-title": "Tijdelijke anonieme paarsgewijze identifiers", - "simplex-private-card-3-point-1": "Alleen TLS 1.2/1.3 met sterke algoritmen wordt gebruikt voor client-serververbindingen.", + "simplex-private-card-3-point-1": "Alleen TLS 1.2/1.3 met sterke algoritmen wordt gebruikt voor client-server verbindingen.", "simplex-private-card-3-point-2": "Server fingerprint en channel binding voorkomen MITM- en replay-aanvallen.", - "simplex-private-card-3-point-3": "Connectieherstel is uitgeschakeld om sessieaanvallen te voorkomen.", - "simplex-private-card-5-point-1": "SimpleX gebruikt content opvulling voor elke coderingslaag om aanvallen op berichtgrootte te verstoren.", - "simplex-private-card-5-point-2": "Het zorgt ervoor dat berichten van verschillende grootte er hetzelfde uitzien voor de servers en netwerkwaarnemers.", - "simplex-private-card-6-point-1": "Veel communicatieplatforms zijn kwetsbaar voor MITM-aanvallen door servers of netwerkproviders.", + "simplex-private-card-3-point-3": "Connectie herstel is uitgeschakeld om sessie aanvallen te voorkomen.", + "simplex-private-card-5-point-1": "SimpleX gebruikt content opvulling voor elke coderingslaag om aanvallen op bericht grootte te verstoren.", + "simplex-private-card-5-point-2": "Het zorgt ervoor dat berichten van verschillende grootte er hetzelfde uitzien voor de servers en netwerk waarnemers.", + "simplex-private-card-6-point-1": "Veel communicatie platforms zijn kwetsbaar voor MITM aanvallen door servers of netwerk providers.", "simplex-private-card-7-point-2": "Als een bericht wordt toegevoegd, verwijderd of gewijzigd, wordt de ontvanger gewaarschuwd.", - "simplex-private-card-8-point-1": "SimpleX-servers fungeren als mix nodes met lage latentie — de inkomende en uitgaande berichten hebben een andere volgorde.", + "simplex-private-card-8-point-1": "SimpleX servers fungeren als mix nodes met lage latentie — de inkomende en uitgaande berichten hebben een andere volgorde.", "simplex-private-card-9-point-2": "Het vermindert de aanvals mogenlijkheden, in vergelijking met traditionele berichten diensten, en de beschikbare metadata.", - "simplex-private-card-10-point-1": "SimpleX gebruikt tijdelijke anonieme paarsgewijze adressen en inloggegevens voor elk gebruikerscontact of groepslid.", + "simplex-private-card-10-point-1": "SimpleX gebruikt tijdelijke anonieme paarsgewijze adressen en inloggegevens voor elk gebruikers contact of groepslid.", "simplex-explained-tab-2-text": "2. Hoe werkt het", - "chat-protocol": "Chat-protocol", - "simplex-explained-tab-2-p-1": "Voor elke verbinding gebruik je twee aparte messaging-wachtrijen om berichten via verschillende servers te versturen en te ontvangen.", + "chat-protocol": "Chat protocol", + "simplex-explained-tab-2-p-1": "Voor elke verbinding gebruikt u twee afzonderlijke berichten wachtrijen om berichten via verschillende servers te verzenden en te ontvangen.", "simplex-explained-tab-2-p-2": "Servers geven berichten slechts in één richting door, zonder een volledig beeld te hebben van het gesprek of de connecties van de gebruiker.", - "hero-p-1": "Andere apps hebben gebruikers-ID's: Signal, Matrix, Session, Briar, Jami, Cwtch, enz.
SimpleX niet, zelfs geen willekeurige getallen.
Dit verbetert uw privacy radicaal.", - "hero-2-header-desc": "De video laat zien hoe je verbinding maakt met je vriend via hun eenmalige QR-code, persoonlijk of via een videolink. U kunt ook verbinding maken door een uitnodigingslink te delen.", + "hero-p-1": "Andere apps hebben gebruikers ID's: Signal, Matrix, Session, Briar, Jami, Cwtch, enz.
SimpleX niet, zelfs geen willekeurige getallen.
Dit verbetert uw privacy.", + "hero-2-header-desc": "De video laat zien hoe je verbinding maakt met je vriend via een eenmalige QR-code, persoonlijk of via een videolink. U kunt ook verbinding maken door een uitnodigingslink te delen.", "hero-header": "Privacy opnieuw gedefinieerd", "feature-7-title": "Portable versleutelde database — verplaats je profiel naar een ander apparaat", - "simplex-private-card-1-point-1": "Protocol met double-ratchet -
OTR-berichten met perfecte voorwaartse geheimhouding en inbreukherstel.", + "simplex-private-card-1-point-1": "Protocol met double-ratchet -
OTR-berichten met perfecte voorwaartse geheimhouding en inbraak herstel.", "simplex-private-6-title": "Out-of-band
sleuteluitwisseling", - "simplex-private-7-title": "Berichtintegriteit
verificatie", - "simplex-private-card-4-point-1": "Om uw IP-adres te beschermen, kunt u via Tor of een ander transportoverlay-netwerk toegang krijgen tot de servers.", + "simplex-private-7-title": "Bericht integriteit
verificatie", + "simplex-private-card-4-point-1": "Om uw IP-adres te beschermen, kunt u via Tor of een ander transport overlay netwerk toegang krijgen tot de servers.", "simplex-private-card-4-point-2": "Installeer de Orbot-app en schakel de SOCKS5-proxy in (of VPN op iOS ) om SimpleX via Tor te gebruiken.", - "simplex-private-card-6-point-2": "Om te voorkomen dat SimpleX-apps eenmalige sleutels out-of-band doorgeven, wanneer u een adres deelt als een link of een QR-code.", + "simplex-private-card-6-point-2": "Om te voorkomen dat SimpleX apps eenmalige sleutels out-of-band doorgeven, wanneer u een adres deelt als een link of een QR-code.", "simplex-private-card-7-point-1": "Om de integriteit te garanderen, zijn de berichten opeenvolgend genummerd en bevatten ze de hash van het vorige bericht.", - "simplex-private-card-9-point-1": "Elke berichtenwachtrij geeft berichten in één richting door, met verschillende verzend- en ontvangstadressen." -} \ No newline at end of file + "simplex-private-card-9-point-1": "Elke berichten wachtrij geeft berichten in één richting door, met verschillende verzend en ontvangst adressen.", + "simplex-private-card-1-point-2": "NaCL-cryptobox in elke wachtrij om verkeer correlatie tussen berichten wachtrijen te voorkomen als TLS wordt aangetast.", + "simplex-private-card-2-point-1": "Extra server versleuteling laag voor levering aan de ontvanger, om de correlatie tussen ontvangen en verzonden server verkeer te voorkomen als TLS is aangetast.", + "simplex-private-card-10-point-2": "Het maakt het mogelijk om berichten te bezorgen zonder gebruikers profiel ID's, wat een betere privacy van metagegevens biedt dan alternatieven.", + "privacy-matters-1-title": "Reclame en prijs discriminatie", + "privacy-matters-1-overlay-1-title": "Privacy bespaart u geld", + "privacy-matters-1-overlay-1-linkText": "Privacy bespaart u geld", + "privacy-matters-2-title": "Manipulatie van verkiezingen", + "privacy-matters-2-overlay-1-title": "Privacy geeft u macht", + "privacy-matters-2-overlay-1-linkText": "Privacy geeft u macht", + "privacy-matters-3-title": "Vervolging wegens onschuldige associatie", + "privacy-matters-3-overlay-1-title": "Privacy beschermt uw vrijheid", + "simplex-unique-1-title": "U heeft volledige privacy", + "simplex-unique-1-overlay-1-title": "Volledige privacy van uw identiteit, profiel, contacten en metadata", + "simplex-unique-2-title": "U bent beschermd
tegen spam en misbruik", + "simplex-unique-3-title": "U beheert uw gegevens", + "simplex-unique-3-overlay-1-title": "Eigendom, controle en beveiliging van uw gegevens", + "simplex-unique-4-title": "U bent eigenaar van het SimpleX netwerk", + "simplex-unique-4-overlay-1-title": "Volledig gedecentraliseerd — gebruikers zijn eigenaar van het SimpleX netwerk", + "hero-overlay-card-1-p-3": "U definieert welke server(s) u wilt gebruiken om de berichten te ontvangen, uw contacten — de servers die u gebruikt om de berichten naar hen te verzenden. Elk gesprek gebruikt waarschijnlijk twee verschillende servers.", + "hero-overlay-card-2-p-1": "Wanneer gebruikers een blijvende identiteit hebben, zelfs als dit slechts een willekeurig nummer is, zoals een sessie-ID, bestaat het risico dat de provider of een aanvaller kan zien hoe de gebruikers zijn verbonden en hoeveel berichten ze verzenden.", + "hero-overlay-card-1-p-4": "Dit ontwerp voorkomt het lekken van eventuele gebruikersgegevens. metadata op applicatie niveau. Om de privacy verder te verbeteren en uw IP-adres te beschermen, kunt u via Tor verbinding maken met berichten servers.", + "hero-overlay-card-1-p-5": "Alleen client apparaten slaan gebruikers profielen, contacten en groepen op; de berichten worden verzonden met 2-laags end-to-end versleuteling.", + "hero-overlay-card-1-p-6": "Lees meer in SimpleX-whitepaper.", + "hero-overlay-card-2-p-2": "Ze zouden deze informatie vervolgens kunnen correleren met de bestaande openbare sociale netwerken en een aantal echte identiteiten kunnen bepalen.", + "privacy-matters-3-overlay-1-linkText": "Privacy beschermt uw vrijheid", + "simplex-unique-2-overlay-1-title": "De beste bescherming tegen spam en misbruik", + "hero-overlay-card-1-p-1": "Veel gebruikers vroegen: als SimpleX geen gebruikers ID's heeft, hoe kan het dan weten waar berichten moeten worden afgeleverd?", + "hero-overlay-card-1-p-2": "Om berichten te bezorgen, gebruikt SimpleX in plaats van gebruikers ID's die door alle andere platforms worden gebruikt, tijdelijke anonieme paarsgewijze identifiers van berichten wachtrijen, gescheiden voor elk van uw verbindingen — er zijn geen identificatiegegevens op lange termijn.", + "hero-overlay-card-2-p-3": "Zelfs met de meest privé apps die Tor v3-services gebruiken, als je met twee verschillende contacten via hetzelfde profiel praat, kunnen ze bewijzen dat ze met dezelfde persoon verbonden zijn.", + "hero-overlay-card-2-p-4": "SimpleX beschermt tegen deze aanvallen door geen gebruikers ID's in het ontwerp te hebben. En als u de incognitomodus gebruikt, heeft u voor elk contact een andere weergavenaam, waardoor gedeelde gegevens tussen hen worden vermeden.", + "simplex-network-overlay-card-1-p-1": "P2P-berichtenprotocollen en -apps hebben verschillende problemen waardoor ze minder betrouwbaar zijn dan SimpleX, complexer om te analyseren en kwetsbaarder voor verschillende soorten aanvallen.", + "simplex-network-overlay-card-1-li-1": "P2P netwerken vertrouwen op een variant van DHT om berichten te routeren. DHT ontwerpen moeten een balans vinden tussen leveringsgarantie en latentie. SimpleX heeft zowel een betere leveringsgarantie als een lagere latentie dan P2P, omdat het bericht redundant via meerdere servers parallel kan worden doorgegeven, met behulp van de servers die door de ontvanger zijn gekozen. In P2P netwerken wordt het bericht achtereenvolgens door O(log N)-knooppunten geleid, met behulp van door het algoritme gekozen knooppunten.", + "simplex-network-overlay-card-1-li-2": "SimpleX ontwerp heeft, in tegenstelling tot de meeste P2P netwerken, geen globale gebruikers ID's van welke soort dan ook, zelfs niet tijdelijk, en gebruikt alleen tijdelijke paarsgewijze ID's, wat een betere anonimiteit en metadata bescherming biedt.", + "simplex-network-overlay-card-1-li-3": "P2P lost het probleem MITM-aanval niet op en de meeste bestaande implementaties gebruiken geen out-of-band berichten voor de initiële sleuteluitwisseling. SimpleX gebruikt out-of-band berichten of, in sommige gevallen, reeds bestaande veilige en vertrouwde verbindingen voor de eerste sleuteluitwisseling.", + "simplex-network-overlay-card-1-li-4": "P2P implementaties kunnen door sommige internetproviders worden geblokkeerd (zoals BitTorrent). SimpleX is transport-agnostisch - het kan werken via standaard webprotocollen, b.v. WebSockets.", + "simplex-network-overlay-card-1-li-5": "Alle bekende P2P netwerken kunnen kwetsbaar zijn voor Sybil-aanval, omdat elk knooppunt vindbaar is en het netwerk als een geheel opereert. Bekende maatregelen om het te verminderen, vereisen een gecentraliseerde component of duur bewijs van werk . Het SimpleX-netwerk kan niet worden gedetecteerd door de server, het is gefragmenteerd en werkt als meerdere geïsoleerde subnetwerken, waardoor netwerkbrede aanvallen onmogelijk zijn.", + "simplex-unique-card-2-p-1": "Omdat u geen identificator of vast adres op het SimpleX platform heeft, kan niemand contact met u opnemen, tenzij u een eenmalig of tijdelijk gebruikers adres deelt, als een QR-code of een link.", + "simplex-unique-card-3-p-1": "SimpleX slaat alle gebruikersgegevens op client apparaten op in een draagbaar gecodeerd databaseformaat — en kan worden overgedragen naar een ander apparaat.", + "simplex-unique-card-3-p-2": "De end-to-end versleutelde berichten worden tijdelijk op SimpleX relayservers bewaard totdat ze zijn ontvangen, waarna ze permanent worden verwijderd.", + "simplex-unique-card-4-p-1": "Het SimpleX netwerk is volledig gedecentraliseerd en onafhankelijk van enige cryptovaluta of enig ander platform, behalve internet.", + "simplex-unique-card-4-p-2": "U kunt SimpleX gebruiken met uw eigen servers of met de servers die door ons worden geleverd — en toch verbinding maken met elke gebruiker.", + "join": "Word lid van", + "we-invite-you-to-join-the-conversation": "Wij nodigen u uit om deel te nemen aan het gesprek", + "join-the-REDDIT-community": "Bezoek ons op REDDIT", + "join-us-on-GitHub": "Volg ons op GitHub", + "donate-here-to-help-us": "Doneer hier om ons te helpen", + "sign-up-to-receive-our-updates": "Schrijf u in om onze updates te ontvangen", + "unique": "uniek", + "why-simplex-is": "Waarom SimpleX is", + "learn-more": "Kom meer te weten", + "more-info": "Meer informatie", + "hide-info": "Info verbergen", + "contact-hero-subheader": "Scan de QR-code met de SimpleX Chat app op je telefoon of tablet.", + "contact-hero-p-1": "De openbare sleutels en het berichten wachtrij adres in deze link worden NIET over het netwerk verzonden wanneer u deze pagina — ze zijn opgenomen in het hash-fragment van de link-URL.", + "contact-hero-p-2": "Heb je de SimpleX Chat nog niet gedownload?", + "contact-hero-p-3": "Gebruik onderstaande links om de app te downloaden.", + "scan-qr-code-from-mobile-app": "Scan de QR-code van de mobiele app", + "to-make-a-connection": "Om een verbinding te maken:", + "install-simplex-app": "Installeer de SimpleX app", + "connect-in-app": "Maak verbinding met de app", + "open-simplex-app": "Open de Simplex app", + "tap-the-connect-button-in-the-app": "Tik op de knop 'verbinden' in de app", + "scan-the-qr-code-with-the-simplex-chat-app": "Scan de QR-code met de SimpleX Chat app", + "scan-the-qr-code-with-the-simplex-chat-app-description": "De openbare sleutels en het berichten wachtrij adres in deze link worden NIET over het netwerk verzonden wanneer u deze pagina bekijkt -
ze zijn opgenomen in het hash-fragment van de link-URL.", + "installing-simplex-chat-to-terminal": "SimpleX chat installeren op terminal", + "use-this-command": "Gebruik deze opdracht:", + "see-simplex-chat": "Zie SimpleX chat", + "github-repository": "GitHub repository", + "the-instructions--source-code": "de instructies voor het downloaden of compileren van de broncode.", + "if-you-already-installed-simplex-chat-for-the-terminal": "Als u SimpleX Chat al voor de terminal hebt geïnstalleerd", + "if-you-already-installed": "Als u al hebt geïnstalleerd", + "simplex-chat-for-the-terminal": "SimpleX Chat voor de terminal", + "copy-the-command-below-text": "kopieer de onderstaande opdracht en gebruik deze in de chat:", + "privacy-matters-section-header": "Waarom privacy belangrijk is ", + "privacy-matters-section-label": "Zorg ervoor dat je messenger geen toegang heeft tot je gegevens!", + "privacy-matters-section-subheader": "Behoud van de privacy van uw metadata — met wie u praat — beschermt u tegen:", + "simplex-private-section-header": "Wat maakt SimpleX privé", + "simplex-network-section-header": "SimpleX Netwerk", + "simplex-network-section-desc": "Simplex Chat biedt de beste privacy door de voordelen van P2P en gefedereerde netwerken te combineren.", + "simplex-network-1-header": "In tegenstelling tot P2P netwerken", + "simplex-network-1-desc": "Alle berichten worden verzonden via de servers, die beide zorgen voor een betere metadata privacy en een betrouwbare asynchrone bezorging van berichten, terwijl er veel worden vermeden", + "simplex-network-1-overlay-linktext": "problemen van P2P netwerken", + "simplex-network-2-header": "In tegenstelling tot federatieve netwerken", + "simplex-network-3-header": "SimpleX netwerk", + "simplex-network-3-desc": "servers bieden unidirectionele wachtrijen om de gebruikers te verbinden, maar ze hebben geen zicht op de netwerkverbindingsgrafiek — alleen de gebruikers.", + "simplex-network-2-desc": "SimpleX relay servers slaan GEEN gebruikersprofielen, contacten en afgeleverde berichten op, maken GEEN verbinding met elkaar en er is GEEN serverdirectory.", + "comparison-section-header": "Vergelijking met andere protocollen", + "protocol-1-text": "Signaal, grote platforms", + "protocol-2-text": "XMPP, Matrix", + "protocol-3-text": "P2P protocollen", + "comparison-point-1-text": "Vereist globale identiteit", + "comparison-point-2-text": "Mogelijkheid van MITM", + "comparison-point-5-text": "Centrale component of andere netwerkbrede aanval", + "yes": "Ja", + "comparison-point-3-text": "Afhankelijkheid van DNS", + "comparison-point-4-text": "Enkelvoudig of gecentraliseerd netwerk", + "no": "Nee", + "no-private": "Nee - privé", + "no-secure": "Nee - veilig", + "no-resilient": "Nee - veerkrachtig", + "no-decentralized": "Nee - gedecentraliseerd", + "no-federated": "Nee - gefedereerd", + "simplex-network-overlay-card-1-li-6": "P2P netwerken kunnen kwetsbaar zijn voor DRDoS-aanvallen, wanneer de clients het verkeer opnieuw kunnen uitzenden en versterken, wat resulteert in netwerkbrede denial of service. SimpleX clients sturen alleen verkeer van een bekende verbinding door en kunnen niet door een aanvaller worden gebruikt om het verkeer in het hele netwerk te versterken.", + "privacy-matters-overlay-card-1-p-1": "Veel grote bedrijven gebruiken informatie over met wie u verbonden bent om uw inkomen te schatten, u de producten te verkopen die u niet echt nodig heeft en om de prijzen te bepalen.", + "privacy-matters-overlay-card-1-p-2": "Webwinkels weten dat mensen met lagere inkomens eerder geneigd zijn om dringende aankopen te doen, dus kunnen ze hogere prijzen vragen of kortingen intrekken.", + "privacy-matters-overlay-card-1-p-3": "Sommige financiële en verzekeringsmaatschappijen gebruiken sociale grafieken om rentetarieven en premies te bepalen. Het zorgt er vaak voor dat mensen met lagere inkomens meer betalen — het staat bekend als 'armoedepremie'.", + "privacy-matters-overlay-card-1-p-4": "Het SimpleX platform beschermt de privacy van uw verbindingen beter dan welk alternatief dan ook, waardoor volledig wordt voorkomen dat uw sociale grafiek beschikbaar wordt voor bedrijven of organisaties. Zelfs wanneer mensen servers van SimpleX Chat gebruiken, weten we niet hoeveel gebruikers of hun verbindingen zijn.", + "privacy-matters-overlay-card-2-p-2": "Om objectief te zijn en onafhankelijke beslissingen te kunnen nemen, moet u de controle hebben over uw informatie ruimte. Het is alleen mogelijk als u een privé communicatieplatform gebruikt dat geen toegang heeft tot uw sociale grafiek.", + "privacy-matters-overlay-card-2-p-3": "SimpleX is het eerste platform dat standaard geen gebruikers ID's heeft, waardoor uw verbindingsgrafiek beter wordt beschermd dan welk alternatief dan ook.", + "privacy-matters-overlay-card-3-p-1": "Iedereen zou zich zorgen moeten maken over de privacy en veiligheid van hun communicatie — onschuldige gesprekken kunnen je in gevaar brengen, zelfs als je niets te verbergen hebt.", + "simplex-unique-overlay-card-1-p-1": "In tegenstelling tot andere berichten platforms heeft SimpleX geen identifiers toegewezen aan de gebruikers . Het vertrouwt niet op telefoonnummers, domein gebaseerde adressen (zoals e-mail of XMPP), gebruikersnamen, openbare sleutels of zelfs willekeurige nummers om zijn gebruikers te identificeren — we weten niet ' hoeveel mensen onze SimpleX servers gebruiken.", + "privacy-matters-overlay-card-3-p-2": "Een van de meest schokkende verhalen is de ervaring van Mohamedou Ould Salahi beschreven in zijn memoires en getoond in The Mauritanian movie. Hij werd zonder proces in het Guantanamo kamp geplaatst en werd daar 15 jaar lang gemarteld na een telefoontje naar zijn familielid in Afghanistan, op verdenking van betrokkenheid bij aanslagen van 9/11, ook al woonde hij de afgelopen 10 jaar in Duitsland.", + "privacy-matters-overlay-card-3-p-3": "Gewone mensen worden gearresteerd voor wat ze online delen, zelfs via hun 'anonieme' accounts, zelfs in democratische landen.", + "privacy-matters-overlay-card-3-p-4": "Het is niet genoeg om een end-to-end versleutelde messenger te gebruiken, we zouden allemaal de messengers moeten gebruiken die de privacy van onze persoonlijke netwerken beschermen — met wie we verbonden zijn.", + "simplex-unique-overlay-card-1-p-2": "Om berichten af te leveren gebruikt SimpleX paarsgewijze anonieme adressen van unidirectionele berichten wachtrijen, gescheiden voor ontvangen en verzonden berichten, meestal via verschillende servers. Het gebruik van SimpleX is als het hebben van een andere “brander” e-mail of telefoon voor elk contact, en geen gedoe om ze te beheren.", + "simplex-unique-overlay-card-1-p-3": "Dit ontwerp beschermt de privacy van met wie u communiceert en verbergt deze voor SimpleX platform servers en voor waarnemers. Om uw IP-adres voor de servers te verbergen, kunt u verbinding maken met SimpleX servers via Tor .", + "simplex-unique-overlay-card-2-p-1": "Omdat je geen identificatie hebt op het SimpleX platform, kan niemand contact met je opnemen, tenzij je een eenmalig of tijdelijk gebruikers adres deelt, als een QR-code of een link.", + "simplex-unique-overlay-card-2-p-2": "Zelfs met het optionele gebruikers adres, hoewel het kan worden gebruikt om spam-contact verzoeken te verzenden, kunt u het wijzigen of volledig verwijderen zonder uw verbindingen te verliezen.", + "simplex-unique-overlay-card-3-p-1": "SimpleX Chat slaat alle gebruikersgegevens alleen op clientapparaten op met behulp van een draagbaar gecodeerd databaseformaat dat kan worden geëxporteerd en overgebracht naar elk ondersteund apparaat.", + "simplex-unique-overlay-card-3-p-2": "De end-to-end versleutelde berichten worden tijdelijk op SimpleX relayservers bewaard totdat ze zijn ontvangen, waarna ze permanent worden verwijderd.", + "simplex-unique-overlay-card-3-p-3": "In tegenstelling tot gefedereerde netwerkservers (e-mail, XMPP of Matrix), slaan SimpleX servers geen gebruikersaccounts op, ze sturen alleen berichten door, waardoor de privacy van beide partijen wordt beschermd.", + "simplex-unique-overlay-card-4-p-1": "U kunt SimpleX gebruiken met uw eigen servers en nog steeds communiceren met mensen die de door ons geleverde vooraf geconfigureerde servers gebruiken.", + "simplex-unique-overlay-card-4-p-3": "Als u overweegt om voor het SimpleX platform te ontwikkelen, bijvoorbeeld de chatbot voor gebruikers van de SimpleX app, of de integratie van de SimpleX Chat bibliotheek in uw mobiele apps, get in touch for any advice en ondersteuning.", + "simplex-unique-card-1-p-1": "SimpleX beschermt de privacy van uw profiel, contacten en metadata en verbergt deze voor SimpleX platformservers en eventuele waarnemers.", + "enter-your-email-address": "Voer uw e-mail adres in", + "get-simplex": "Krijg SimpleX", + "tap-to-close": "Tik om te sluiten", + "contact-hero-header": "Je hebt een adres ontvangen om verbinding te maken met SimpleX Chat", + "invitation-hero-header": "Je hebt een eenmalige link ontvangen om verbinding te maken met SimpleX Chat", + "privacy-matters-overlay-card-2-p-1": "Nog niet zo lang geleden zagen we dat de grote verkiezingen werden gemanipuleerd door een gerenommeerd adviesbureau dat onze sociale grafieken gebruikte om ons beeld van de echte wereld te vervormen en onze stemmen te manipuleren.", + "simplex-unique-overlay-card-3-p-4": "Er zijn geen identifiers of gecodeerde tekst tussen verzonden en ontvangen serververkeer — als iemand het waarneemt, kunnen ze niet gemakkelijk bepalen wie met wie communiceert, zelfs als TLS is gecompromitteerd.", + "simplex-unique-overlay-card-4-p-2": "Het SimpleX platform gebruikt een open protocol en biedt SDK om chatbots te maken, waardoor services kunnen worden geïmplementeerd waarmee gebruikers kunnen communiceren via SimpleX Chat apps — waar we' erg naar uitkijken om te zien welke SimpleX services u kunt bouwen.", + "simplex-unique-card-1-p-2": "In tegenstelling tot elk ander bestaand berichtenplatform, heeft SimpleX geen identificatiecodes toegewezen aan de gebruikers — zelfs geen willekeurige nummers .", + "comparison-section-list-point-1": "Meestal op basis van een telefoonnummer, in sommige gevallen op gebruikersnamen", + "comparison-section-list-point-2": "Op DNS gebaseerde adressen", + "comparison-section-list-point-4": "Als de servers van de operator zijn aangetast", + "comparison-section-list-point-5": "Beschermt de metadata van gebruikers niet", + "comparison-section-list-point-6": "Hoewel P2P wordt gedistribueerd, zijn ze niet federatief - ze werken als een enkel netwerk", + "see-here": "kijk hier", + "comparison-section-list-point-7": "P2P netwerken hebben een centrale autoriteit of het hele netwerk kan worden aangetast", + "comparison-section-list-point-3": "Publieke sleutel of een andere globale unieke ID" +} diff --git a/website/langs/nb_NO.json b/website/langs/uk.json similarity index 100% rename from website/langs/nb_NO.json rename to website/langs/uk.json diff --git a/website/langs/zh_Hans.json b/website/langs/zh_Hans.json new file mode 100644 index 000000000..0891db7e6 --- /dev/null +++ b/website/langs/zh_Hans.json @@ -0,0 +1,213 @@ +{ + "simplex-explained-tab-3-p-2": "用户可以通过使用 Tor 访问服务器以进一步提高元数据隐私,防止通过 IP 地址关联实际身份。", + "chat-bot-example": "聊天机器人示例", + "terms-and-privacy-policy": "条款和隐私政策", + "hero-overlay-1-textlink": "为什么用户 ID 不利于隐私?", + "hero-2-header": "建立私人连接", + "hero-overlay-2-title": "为什么用户 ID 不利于隐私?", + "feature-6-title": "端到端加密的音视频通话", + "feature-8-title": "隐身模式 —
SimpleX Chat 独有", + "simplex-private-1-title": "双层端到端加密", + "simplex-private-2-title": "附加的服务器加密层", + "simplex-private-3-title": "安全认证的TLS传输", + "simplex-private-4-title": "可选择通过 Tor 访问", + "simplex-private-5-title": "多层内容填充", + "simplex-private-6-title": "带外密钥交换", + "simplex-private-7-title": "消息完整性认证", + "simplex-private-9-title": "单向消息队列", + "simplex-private-card-1-point-1": "双棘轮协议——具有完美前向保密和入侵恢复功能的 OTR 消息传递。", + "simplex-private-card-3-point-2": "服务器指纹和通道绑定可防止 MITM 和重放攻击。", + "simplex-private-card-3-point-3": "禁用连接恢复以防止会话攻击。", + "simplex-private-card-4-point-1": "为了保护您的 IP 地址,您可以通过 Tor 或其他一些传输覆盖网络访问服务器。", + "simplex-private-card-5-point-2": "它使不同大小的消息在服务器和网络监视者看来是一样的。", + "simplex-private-card-9-point-1": "每个消息队列在一个方向上传递消息,具有不同的发送和接收地址。", + "simplex-network-overlay-card-1-li-2": "与大多数 P2P 网络不同,SimpleX 设计没有任何类型的全局用户标识符,甚至临时的也没有,并且仅使用临时的成对标识符,提供更好的匿名性和元数据保护。", + "privacy-matters-overlay-card-1-p-1": "许多大公司使用您联系人的信息来估算您的收入,向您兜售您并不真正需要的产品,并确定推荐商品的价格区间。", + "simplex-unique-overlay-card-3-p-4": "发送和接收的服务器流量之间没有共同的标识符或密文—— 如果有人在观察它,他们也无法轻易确定谁与谁通信,即使 TLS 受到威胁。", + "simplex-unique-card-4-p-1": "SimpleX 网络是完全去中心化的,并且独立于任何加密货币或除互联网以外的任何其他平台。", + "join": "加入", + "get-simplex": "获取 SimpleX", + "hide-info": "隐藏信息", + "contact-hero-header": "您收到了一个用于连接 SimpleX Chat 的地址", + "contact-hero-p-2": "还没有下载 SimpleX Chat 吗?", + "scan-qr-code-from-mobile-app": "从移动应用程序扫描二维码", + "simplex-network-1-header": "与 P2P 网络不同", + "simplex-network-1-overlay-linktext": "P2P网络存在的问题", + "simplex-network-2-header": "不同于联邦网络", + "comparison-point-1-text": "需要全球身份", + "no-secure": "不需要 - 安全", + "simplex-privacy": "SimpleX 的隐私性", + "home": "主页", + "developers": "开发者", + "blog": "博客", + "simplex-explained-tab-1-text": "1. 用户可体验什么", + "reference": "参考", + "simplex-explained-tab-2-text": "2. SimpleX 的运作原理", + "features": "特性", + "why-simplex": "为何选择 SimpleX", + "simplex-network": "SimpleX 网络", + "simplex-explained": "SimpleX 的简述", + "simplex-explained-tab-3-text": "3. 服务器可见的内容", + "hero-header": "重新定义隐私", + "simplex-explained-tab-1-p-2": "它如何在没有用户配置文件标识符的情况下使用单向队列?", + "simplex-explained-tab-2-p-2": "服务器只传送单向消息,而无法全面了解用户的会话或连接。", + "simplex-explained-tab-3-p-1": "服务器对每个队列都有单独的匿名凭证,并且不知道它们属于哪些用户。", + "donate": "捐赠", + "simplex-explained-tab-2-p-1": "对于每个连接,您会使用两个单独的消息队列通过不同的服务器发送和接收消息。", + "simplex-chat-protocol": "SimpleX 聊天协议", + "smp-protocol": "SMP协议", + "chat-protocol": "聊天协议", + "copyright-label": "© 2020-2023 SimpleX | 开源项目", + "terminal-cli": "终端命令行", + "simplex-explained-tab-1-p-1": "您可以像在任何其他即时通讯软件中一样创建联系人和群组,并进行双向对话。", + "hero-p-1": "其他应用需要用户 ID:Signal、Matrix、Session、Briar、Jami、Cwtch 等。
SimpleX 不需要,甚至不需要随机数
这从根本上改善了您的隐私。", + "hero-subheader": "首个不使用用户ID的即时通讯软件id", + "hero-overlay-2-textlink": "SimpleX 是如何工作的?", + "hero-2-header-desc": "该视频向您展示如何通过一次性二维码、当面或通过视频链接来连接到您的朋友。您还可以通过共享邀请链接来建立连接。", + "hero-overlay-1-title": "SimpleX 是如何工作的?", + "feature-2-title": "端到端加密的图像和文件", + "feature-1-title": "端到端加密的文字消息,支持markdown和编辑", + "feature-4-title": "端到端加密的语音消息", + "feature-3-title": "去中心化的秘密群组——只有用户知道它们的存在", + "feature-5-title": "支持消息自动销毁", + "simplex-network-overlay-1-title": "与 P2P 消息传递协议的比较", + "feature-7-title": "随身的加密数据库——可将您的个人资料移至另一台设备", + "simplex-private-10-title": "临时匿名成对标识符", + "simplex-private-8-title": "消息混合以减少相关性", + "simplex-private-card-1-point-2": "每个队列中的网络与密码学库加密盒(NaCL cryptobox)可防止 TLS 受到威胁时消息队列之间的流量关联。", + "simplex-private-card-10-point-2": "它允许在没有用户配置文件标识符的情况下传递消息,提供比替代方案更好的元数据隐私。", + "privacy-matters-1-title": "广告和价格歧视", + "privacy-matters-1-overlay-1-linkText": "隐私能为您省钱", + "privacy-matters-2-title": "操纵选举", + "privacy-matters-2-overlay-1-linkText": "隐私给您力量", + "simplex-private-card-2-point-1": "为来信附加服务器加密层,以防止在 TLS 受到威胁时接收和发送的服务器流量之间发生关联。", + "privacy-matters-1-overlay-1-title": "隐私能为您省钱", + "simplex-private-card-3-point-1": "客户端-服务器之间的连接只使用具有强加密算法的 TLS 1.2/1.3。", + "privacy-matters-3-overlay-1-title": "隐私保护您的自由", + "privacy-matters-3-overlay-1-linkText": "隐私保护您的自由", + "simplex-private-card-4-point-2": "要通过 Tor 使用 SimpleX,请安装 Orbot app 并启用 SOCKS5 代理(或在 iOS 上的 VPN)。", + "simplex-unique-1-overlay-1-title": "您的身份、个人资料、联系人和元数据的完全隐私", + "simplex-unique-2-title": "您可以免受垃圾邮件和滥用的侵害", + "simplex-unique-1-title": "您有完全的隐私", + "simplex-unique-2-overlay-1-title": "防止垃圾邮件和滥用的最佳保护", + "simplex-unique-3-overlay-1-title": "您数据的所有权、控制权和安全性", + "simplex-unique-4-overlay-1-title": "完全去中心化—— 用户拥有 SimpleX 网络", + "simplex-unique-3-title": "您控制您的数据", + "simplex-unique-4-title": "您拥有 SimpleX 网络", + "simplex-private-card-7-point-1": "为了保证完整性,消息按顺序编号并包含前一条消息的哈希值。", + "simplex-private-card-6-point-1": "许多通信平台容易受到服务器或网络提供商的 MITM 攻击。", + "simplex-private-card-6-point-2": "为防止这种情况,当您将地址作为链接或二维码共享时,SimpleX 应用程序会在带外传递一次性密钥。", + "simplex-private-card-9-point-2": "与传统的消息代理相比,它减少了攻击向量和可用的元数据。", + "hero-overlay-card-1-p-1": "许多用户问:如果 SimpleX 没有用户标识符,它怎么知道将消息传递到哪里?", + "simplex-private-card-7-point-2": "如果添加、删除或更改任何消息,收件人将收到警报。", + "simplex-private-card-8-point-1": "SimpleX 服务器充当低延迟混合节点—— 传入和传出消息的顺序不同。", + "simplex-private-card-10-point-1": "SimpleX 为每个用户联系人或组成员使用临时匿名成对地址和凭据。", + "privacy-matters-3-title": "因无辜结社而被起诉", + "privacy-matters-2-overlay-1-title": "隐私给您力量", + "hero-overlay-card-1-p-2": "为了传递消息,与所有其他平台使用用户 ID不同,SimpleX 使用消息队列的临时匿名成对标识符,来区分开您的每个连接——没有长期标识符。", + "hero-overlay-card-1-p-3": "您定义用于接收消息的服务器、您的联系人—— 您用来向他们发送消息的服务器。 每个会话都很可能会使用两个不同的服务器。", + "hero-overlay-card-1-p-4": "此设计可防止在应用程序级别泄漏任何用户元数据。 为了进一步改善隐私并保护您的 IP 地址,您可以通过 Tor 连接到消息服务器。", + "hero-overlay-card-1-p-5": "只有客户端设备存储用户配置文件、联系人和群组; 消息均使用两层端到端加密发送。", + "simplex-network-overlay-card-1-p-1": "P2P 消息传递协议和应用程序存在各种问题,使得它们不如 SimpleX 可靠,分析起来更复杂,并且 容易受到多种类型的攻击。", + "hero-overlay-card-1-p-6": "在 SimpleX 白皮书 中阅读更多内容。", + "hero-overlay-card-2-p-2": "然后他们可以将这些信息与现有的公共社交网络相关联,并确定一些真实身份。", + "hero-overlay-card-2-p-1": "当用户具有持久身份时,即使这只是一个随机数(如会话 ID),提供商或攻击者也有可能观察到用户如何连接以及他们发送了多少消息。", + "hero-overlay-card-2-p-3": "即使是使用 Tor v3 服务的最私密的应用程序,如果您通过同一个人资料与两个不同的联系人交谈,他们也可以证明他们与同一个人有联系。", + "hero-overlay-card-2-p-4": "为防止这些攻击,SimpleX 在其设计中不包含任何用户 ID 。 而且,如果您使用隐身模式,您将为每个联系人显示不同的名称,避免他们之间共享任何数据。", + "simplex-network-overlay-card-1-li-1": "P2P 网络依赖于 DHT 的某些变体来路由消息。 DHT 设计必须平衡交付保证和延迟。 SimpleX 比 P2P 具有更好的传递保证和更低的延迟,因为消息可以通过多个服务器并行地冗余传递,使用接收者选择的服务器。 在 P2P 网络中,消息使用算法选择的节点按顺序通过 O(log N) 个节点。", + "simplex-network-overlay-card-1-li-4": "P2P 实施可能会被某些互联网提供商(如 BitTorrent)阻止。 SimpleX 与传输无关——它可以在标准网络协议上工作,例如 WebSockets。", + "simplex-network-overlay-card-1-li-3": "P2P 没有解决MITM attack 问题,大多数现有的实现不使用带外 用于初始密钥交换的消息。 SimpleX 使用带外消息,或者在某些情况下,使用预先存在的安全和可信连接来进行初始密钥交换。", + "simplex-network-overlay-card-1-li-5": "所有已知的 P2P 网络都可能容易受到 Sybil 攻击,因为每个节点都是可发现的,并且网络作为一个整体运行。 缓解它的已知措施需要集中式组件或昂贵的工作量证明。 SimpleX 网络没有服务器可发现性,它是分散的并且作为多个隔离的子网运行,使得网络范围的攻击不可能。", + "simplex-network-overlay-card-1-li-6": "P2P 网络可能容易受到 DRDoS 攻击 ,当客户端可以重新广播和放大流量时,会导致网络范围内的拒绝服务。 SimpleX 客户端仅中继来自已知连接的流量,不能被攻击者用来放大整个网络的流量。", + "privacy-matters-overlay-card-1-p-2": "在线零售商知道收入较低的人更有可能进行紧急购买,因此他们可能会收取更高的价格或取消折扣。", + "privacy-matters-overlay-card-1-p-3": "一些金融和保险公司使用社交图谱来确定利率和保费。 它通常会让收入较低的人支付更多—— 它被称为'贫困溢价'。", + "privacy-matters-overlay-card-1-p-4": "SimpleX 平台比任何替代方案都更好地保护您的连接隐私,完全防止您的社交图谱被任何公司或组织使用。 即使人们使用 SimpleX Chat 提供的服务器,我们也不知道用户数量或他们的连接数。", + "privacy-matters-overlay-card-2-p-1": "不久前,我们观察到几次大选被一家知名咨询公司操纵,该公司使用我们的社交图谱扭曲我们对现实世界的看法并操纵我们的选票。", + "privacy-matters-overlay-card-2-p-2": "为了客观并做出独立的决定,您需要控制您的信息空间。 只有当您使用无法访问您的社交图谱的私人通信平台时这才有可能。", + "privacy-matters-overlay-card-2-p-3": "SimpleX 是第一个没有设计任何用户标识符的平台,这样能比任何已知的替代方案都更好地保护您的连接图谱。", + "privacy-matters-overlay-card-3-p-2": "最令人震惊的故事之一是 Mohamedou Ould Salahi 在他的回忆录中描述并在毛里塔尼亚电影中展示的经历。 他在未经审判的情况下被关进关塔那摩集中营,并在打电话给他在阿富汗的亲戚后在那里遭受了 15 年的折磨,他被怀疑参与了 9/11 袭击,尽管他在过去 10 年住在德国。", + "privacy-matters-overlay-card-3-p-1": "每个人都应该关心他们通信的隐私和安全——无害的谈话会让您处于危险之中,即使您没有什么可隐瞒的。", + "privacy-matters-overlay-card-3-p-3": "普通人会因为他们在网上分享的内容而被捕,即使是通过他们的“匿名”帐户,即使是在民主国家。", + "privacy-matters-overlay-card-3-p-4": "使用端到端加密的即时通讯软件还不够,我们都应该使用保护我们个人网络隐私——即我们与谁有联系的即时通讯软件。", + "simplex-unique-overlay-card-1-p-1": "与其他消息传递平台不同,SimpleX 没有分配给用户的标识符。 它不依赖电话号码、基于域的地址(如电子邮件或 XMPP)、用户名、公钥甚至随机数来识别其用户—— 我们不知道有多少人使用我们的 SimpleX 服务器。", + "simplex-unique-overlay-card-1-p-2": "为了传递消息,SimpleX 使用单向消息队列的成对匿名地址,通常通过不同的服务器将接收和发送的消息分开。 使用 SimpleX 就像为每个联系人使用不同的即时电子邮件或电话,并且无需管理它们。", + "simplex-unique-overlay-card-1-p-3": "这种设计保护了您正在与之通信的人的隐私,将其隐藏在 SimpleX 平台服务器和任何观察者之外。 要对服务器隐藏您的 IP 地址,您可以通过 Tor 连接到 SimpleX 服务器。", + "simplex-unique-overlay-card-4-p-1": "您可以将 SimpleX 与您自己的服务器一起使用,并且仍然可以与使用我们提供的预配置服务器的人进行通信。", + "simplex-unique-card-3-p-2": "端到端加密的消息在被收到前会暂时保存在 SimpleX 中继服务器上,传送完成后它们会被永久删除。", + "simplex-unique-card-1-p-1": "SimpleX 保护您的个人资料、联系人和元数据的隐私,将其隐藏在 SimpleX 平台服务器和任何观察者之外。", + "simplex-unique-overlay-card-4-p-3": "如果您正在考虑为在SimpleX 平台上开发,例如,为 SimpleX 应用程序用户开发聊天机器人,或将 SimpleX 聊天库集成到您的移动应用程序中,请 联系我们 以获取建议和支持。", + "simplex-unique-card-4-p-2": "您可以搭配自己的服务器来使用 SimpleX 或使用我们提供的服务器 — 并仍然连接到任何用户。", + "simplex-unique-card-2-p-1": "因为您在 SimpleX 平台上没有标识符或固定地址,所以除非您以二维码或链接的形式分享一次性或临时用户地址,没有人可以联系您。", + "simplex-unique-card-3-p-1": "SimpleX 以便携式加密数据库格式将所有用户数据存储在客户端设备上—— 它可以转移到另一个设备。", + "sign-up-to-receive-our-updates": "注册以接收我们的更新", + "we-invite-you-to-join-the-conversation": "我们邀请您加入对话", + "enter-your-email-address": "输入您的电子邮箱地址", + "join-the-REDDIT-community": "加入 REDDIT 社区", + "why-simplex-is": "为什么 SimpleX 是", + "learn-more": "了解更多", + "join-us-on-GitHub": "在 GitHub 上加入我们", + "more-info": "更多信息", + "contact-hero-p-3": "使用下面的链接下载应用程序。", + "use-this-command": "使用此命令:", + "invitation-hero-header": "您收到了一个连接 SimpleX Chat 的一次性链接", + "contact-hero-subheader": "使用手机或平板电脑上的 SimpleX Chat 应用程序扫描二维码。", + "contact-hero-p-1": "当您查看此页面时,此链接中的公钥和消息队列地址不会通过网络发送 ——它们包含在链接 URL 的哈希片段中。", + "open-simplex-app": "打开 Simplex 应用程序", + "to-make-a-connection": "要建立连接:", + "see-simplex-chat": "查看 SimpleX 聊天", + "install-simplex-app": "安装 SimpleX 应用程序", + "connect-in-app": "在应用程序中连接", + "tap-the-connect-button-in-the-app": "点按应用中的 “连接” 按钮", + "scan-the-qr-code-with-the-simplex-chat-app": "使用 SimpleX Chat 应用程序扫描二维码", + "scan-the-qr-code-with-the-simplex-chat-app-description": "当您查看此页面时,此链接中的公钥和消息队列地址不会通过网络发送 ——它们包含在链接 URL 的哈希片段中。", + "installing-simplex-chat-to-terminal": "将 SimpleX 聊天安装到终端", + "github-repository": "GitHub 仓库", + "copy-the-command-below-text": "复制下面的命令并在聊天中使用它:", + "privacy-matters-section-header": "为什么隐私很重要", + "the-instructions--source-code": "如何从源代码下载或编译它的说明。", + "if-you-already-installed-simplex-chat-for-the-terminal": "如果您已经为终端安装了 SimpleX Chat", + "if-you-already-installed": "如果您已经安装", + "simplex-chat-for-the-terminal": "用于终端的 SimpleX Chat", + "privacy-matters-section-label": "确保您的即时通讯软件无法访问您的数据!", + "privacy-matters-section-subheader": "保护您的元数据的隐私—— 您与谁交谈 — 保护您免受:", + "simplex-private-section-header": "是什么让 SimpleX 能够保密", + "simplex-network-2-desc": "SimpleX 中继服务器不存储用户配置文件、联系人和传递的消息,不相互连接,并且没有服务器目录。", + "tap-to-close": "点击关闭", + "simplex-network-section-header": "SimpleX 网络", + "simplex-network-section-desc": "Simplex Chat 通过结合 P2P 和联邦网络的优势使其保密性无与伦比。", + "no-private": "不需要 - 私密", + "simplex-network-1-desc": "所有消息都通过服务器发送,既能更好地保护元数据隐私和可靠地传递异步消息,同时也能避免许多", + "simplex-network-3-header": "SimpleX网络", + "protocol-1-text": "Signal、其他大平台", + "comparison-point-4-text": "单一或集中式网络", + "simplex-network-3-desc": "服务器提供单向队列来连接用户,但是他们看不到网络连接图图谱— 只有用户可以。", + "comparison-section-header": "与其他协议的比较", + "protocol-3-text": "P2P协议", + "no": "不需要", + "comparison-point-3-text": "对 DNS 的依赖", + "no-federated": "不需要 - 联邦的", + "protocol-2-text": "XMPP、Matrix", + "comparison-point-2-text": "中间人攻击的可能性", + "comparison-point-5-text": "中央组件或其他全网攻击", + "yes": "需要", + "comparison-section-list-point-5": "不保护用户的元数据", + "no-resilient": "不需要 - 有弹性", + "no-decentralized": "不需要 - 去中心化的", + "comparison-section-list-point-3": "公钥或其他一些全球唯一的 ID", + "comparison-section-list-point-4": "如果运营商的服务器受到威胁", + "comparison-section-list-point-1": "通常基于电话号码,在某些情况下基于用户名", + "comparison-section-list-point-2": "基于 DNS 的地址", + "comparison-section-list-point-6": "P2P 是分布式的,它们不是联合的 - 它们作为单个网络运行", + "see-here": "参见此处", + "comparison-section-list-point-7": "P2P 网络要么拥有中央管理机制,要么整个网络都可能受到损害", + "simplex-private-card-5-point-1": "SimpleX 为每个加密层使用内容填充来阻断长度扩展攻击。", + "simplex-unique-overlay-card-4-p-2": "SimpleX 平台使用开放协议并提供用于创建聊天机器人的 SDK, 允许用户实现通过 SimpleX Chat 应用程序与之交互的服务—— 我们真的很期待看到您可以依托SimpleX构建哪些服务。", + "simplex-unique-overlay-card-2-p-2": "即使使用可选的用户地址,当它被用于发送垃圾邮件联系请求,您可以更改或完全删除它而不会丢失任何连接。", + "simplex-unique-overlay-card-3-p-1": "SimpleX Chat 使用便携式加密数据库格式仅将所有用户数据存储在客户端设备上,该格式可以导出并传输到任何支持的设备。", + "donate-here-to-help-us": "在这里捐款来帮助我们", + "unique": "独特的", + "simplex-unique-card-1-p-2": "与任何其他现有的消息传递平台不同,SimpleX 没有分配给用户的标识符—— 甚至随机数也没有。", + "simplex-unique-overlay-card-2-p-1": "因为您在 SimpleX 平台上没有标识符,所以除非您以二维码或链接的形式分享一次性或临时用户地址,没有人可以联系您。", + "simplex-unique-overlay-card-3-p-2": "端到端加密的消息在被收到前会暂时保存在 SimpleX 中继服务器上,传送完成后它们会被永久删除。", + "simplex-unique-overlay-card-3-p-3": "与联合网络服务器(电子邮件、XMPP 或 Matrix)不同,SimpleX 服务器不存储用户帐户,它们仅中继消息,保护双方的隐私。" +} diff --git a/website/src/_data/languages.json b/website/src/_data/languages.json index 497f804c3..980dce6b4 100644 --- a/website/src/_data/languages.json +++ b/website/src/_data/languages.json @@ -24,11 +24,17 @@ "flag": "/img/flags/cs.svg", "enabled": true }, + { + "label": "it", + "name": "Italiano", + "flag": "/img/flags/it.svg", + "enabled": true + }, { "label": "nl", "name": "Nederlands", "flag": "/img/flags/nl.svg", - "enabled": false + "enabled": true }, { "label": "nb_NO", @@ -36,12 +42,6 @@ "flag": "/img/flags/nb_NO.svg", "enabled": false }, - { - "label": "it", - "name": "Italian", - "flag": "/img/flags/it.svg", - "enabled": false - }, { "label": "es", "name": "Spanish",