Merge branch 'master' into xftp

This commit is contained in:
spaced4ndy 2023-03-23 13:58:23 +04:00
commit babbca48f8
183 changed files with 20919 additions and 9275 deletions

183
README.md
View File

@ -1,15 +1,29 @@
| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/README.md) |
<img src="images/simplex-chat-logo.svg" alt="SimpleX logo" width="100%">
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
[![build](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml/badge.svg?branch=stable)](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml)
[![GitHub downloads](https://img.shields.io/github/downloads/simplex-chat/simplex-chat/total)](https://github.com/simplex-chat/simplex-chat/releases)
[![GitHub release](https://img.shields.io/github/v/release/simplex-chat/simplex-chat)](https://github.com/simplex-chat/simplex-chat/releases)
[![Join on Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat)
[![Follow on Mastodon](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social)](https://mastodon.social/@simplex)
| 19/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md) |
<img src="images/simplex-chat-logo.svg" alt="SimpleX logo" width="100%">
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
[<img src="./images/trail-of-bits.jpg" height="100">](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) &nbsp;&nbsp;&nbsp; [<img src="./images/privacy-guides.jpg" height="80">](https://www.privacyguides.org/en/real-time-communication/#simplex-chat) &nbsp;&nbsp;&nbsp; [<img src="./images/kuketz-blog.jpg" height="80">](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/)
## Welcome to SimpleX Chat!
1. 📲 [Install the app](#install-the-app).
2. ↔️ [Connect to the team](#connect-to-the-team-via-the-app) and [join user groups](#join-user-groups).
3. 🤝 [Make a private connection](#make-a-private-connection) with a friend.
4. 🔤 [Help translating SimpleX Chat](#help-translating-simplex-chat).
5. ⚡️ [Contribute](#contribute) and [help us with donations](#help-us-with-donations).
[Learn more about SimpleX Chat](#contents).
## Install the app
[<img src="https://github.com/simplex-chat/.github/blob/master/profile/images/apple_store.svg" alt="iOS app" height="42">](https://apps.apple.com/us/app/simplex-chat/id1605771084)
&nbsp;
[![Android app](https://github.com/simplex-chat/.github/blob/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app)
@ -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.
<img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app1.png" alt="Make a private connection" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app2.png" alt="Conversation" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app3.png" alt="Video call" height="360">
After you connect, you can [verify connection security code](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md#connection-security-verification).
## Help translating SimpleX Chat
Thanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps, website and documents are translated to many other languages.
Join our translators to help SimpleX grow!
|locale|language |contributor|[Android](https://play.google.com/store/apps/details?id=chat.simplex.app) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084)|[website](https://simplex.chat)|Github docs|
|:----:|:-------:|:---------:|:---------:|:---------:|:---------:|
|🇬🇧 en|English | |✓|✓|✓|✓|
|🇨🇿 cs|Čeština |[zen0bit](https://github.com/zen0bit)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/cs/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/cs/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/cs/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/cs/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/cs/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/cs/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/cs)|
|🇩🇪 de|Deutsch |[mlanp](https://github.com/mlanp)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/de/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/de/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/de/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/de/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/de/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/de/)||
|🇪🇸 es|Español ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/es/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/es/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/es/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/es/)|||
|🇫🇷 fr|Français |[ishi_sama](https://github.com/ishi_sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)|
|🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/it/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/it/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/it/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/it/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/it/)||
|🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/nl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/nl/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/nl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/nl/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/nl/)||
|🇷🇺 ru|Русский ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/ru/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)|||
|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)|||
Languages in progress: Arabic, Hindi, Japanese, Spanish and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us!
## Contribute
We would love to have you join the development! You can help us with:
- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
- contributing to SimpleX Chat knowledge-base.
- developing features - please connect to us via chat so we can help you get started.
## Help us with donations
Huge thank you to everybody who donated to SimpleX Chat!
We are prioritizing users privacy and security - it would be impossible without your support.
Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, - so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure.
Your donations help us raise more funds any amount, even the price of the cup of coffee, would make a big difference for us.
It is possible to donate via:
- [GitHub](https://github.com/sponsors/simplex-chat) - it is commission-free for us.
- [OpenCollective](https://opencollective.com/simplex-chat) - it charges a commission, and also accepts donations in crypto-currencies.
- Monero address: 8568eeVjaJ1RQ65ZUn9PRQ8ENtqeX9VVhcCYYhnVLxhV4JtBqw42so2VEUDQZNkFfsH5sXCuV7FN8VhRQ21DkNibTZP57Qt
- Bitcoin address: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG
- BCH address: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG
- Ethereum address: 0x83fd788f7241a2be61780ea9dc72d2151e6843e2
- Solana address: 43tWFWDczgAcn4Rzwkpqg2mqwnQETSiTwznmCgA2tf1L
Thank you,
Evgeny
SimpleX Chat founder
## Contents
@ -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.
<img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app1.png" alt="Make a private connection" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app2.png" alt="Conversation" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app3.png" alt="Video call" height="360">
## :zap: Quick installation of a terminal app
```sh
@ -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.

View File

@ -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 {

View File

@ -30,6 +30,7 @@
android:label="${app_name}"
android:extractNativeLibs="${extract_native_libs}"
android:supportsRtl="true"
android:localeConfig="@xml/locales_config"
android:theme="@style/Theme.SimpleX">
<!-- Main activity -->

View File

@ -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) {

View File

@ -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)

View File

@ -950,7 +950,7 @@ data class GroupMember (
fun canChangeRoleTo(groupInfo: GroupInfo): List<GroupMemberRole>? =
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

View File

@ -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"

View File

@ -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<out AudioDeviceInfo>) {
Log.d(TAG, "Added audio devices: ${addedDevices.map { it.type }}")
super.onAudioDevicesAdded(addedDevices)
val addedCount = addedDevices.count { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
btDeviceCount += addedCount
audioViaBluetooth.value = btDeviceCount > 0
if (addedCount > 0 && chatModel.activeCall.value?.callState == CallState.Connected) {
// Setting params in Connected state makes sure that Bluetooth will NOT be broken on Android < 12
setCallSound(chatModel.activeCall.value?.soundSpeaker ?: return, audioViaBluetooth)
}
}
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>) {
Log.d(TAG, "Removed audio devices: ${removedDevices.map { it.type }}")
super.onAudioDevicesRemoved(removedDevices)
val removedCount = removedDevices.count { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
btDeviceCount -= removedCount
audioViaBluetooth.value = btDeviceCount > 0
if (btDeviceCount == 0 && chatModel.activeCall.value?.callState == CallState.Connected) {
// Setting params in Connected state makes sure that Bluetooth will NOT be broken on Android < 12
setCallSound(chatModel.activeCall.value?.soundSpeaker ?: return, audioViaBluetooth)
}
}
}
am.registerAudioDeviceCallback(audioCallback, null)
val pm = (SimplexApp.context.getSystemService(Context.POWER_SERVICE) as PowerManager)
val proximityLock = if (pm.isWakeLockLevelSupported(PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "proximityLock")
} else {
null
}
proximityLock?.acquire()
onDispose {
// Stop it when call ended
if (!ntfModeService) SimplexService.safeStopService(SimplexApp.context)
// Clear selected communication device to default value after we changed it in call
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
am.clearCommunicationDevice()
}
dropAudioManagerOverrides()
am.unregisterAudioDeviceCallback(audioCallback)
proximityLock?.release()
}
}
val cxt = LocalContext.current
val scope = rememberCoroutineScope()
Box(Modifier.fillMaxSize()) {
WebRTCView(chatModel.callCommand) { apiMsg ->
@ -101,6 +134,7 @@ fun ActiveCallView(chatModel: ChatModel) {
val callStatus = json.decodeFromString<WebRTCCallStatus>("\"${r.state.connectionState}\"")
if (callStatus == WebRTCCallStatus.Connected) {
chatModel.activeCall.value = call.copy(callState = CallState.Connected)
setCallSound(call.soundSpeaker, audioViaBluetooth)
}
withApi { chatModel.controller.apiCallStatus(call.contact, callStatus) }
} catch (e: Error) {
@ -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<Boolean>) {
ActiveCallOverlayLayout(
call = call,
speakerCanBeEnabled = !audioViaBluetooth.value,
dismiss = { withApi { chatModel.callManager.endCall(call) } },
toggleAudio = { chatModel.callCommand.value = WCallCommand.Media(CallMediaType.Audio, enable = !call.audioEnabled) },
toggleVideo = { chatModel.callCommand.value = WCallCommand.Media(CallMediaType.Video, enable = !call.videoEnabled) },
@ -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<Boolean>) {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
Log.d(TAG, "setCallSound: set audio mode, speaker enabled: $speaker")
am.mode = AudioManager.MODE_IN_COMMUNICATION
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val btDevice = am.availableCommunicationDevices.lastOrNull { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
val preferredSecondaryDevice = if (speaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
if (btDevice != null) {
am.setCommunicationDevice(btDevice)
} else if (am.communicationDevice?.type != preferredSecondaryDevice) {
am.availableCommunicationDevices.firstOrNull { it.type == preferredSecondaryDevice }?.let {
am.setCommunicationDevice(it)
}
}
} else {
am.mode = AudioManager.MODE_IN_CALL
am.isSpeakerphoneOn = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
am.availableCommunicationDevices.firstOrNull { it.type == AudioDeviceInfo.TYPE_BUILTIN_EARPIECE }?.let {
am.setCommunicationDevice(it)
}
if (audioViaBluetooth.value) {
am.isSpeakerphoneOn = false
am.startBluetoothSco()
} else {
am.stopBluetoothSco()
am.isSpeakerphoneOn = speaker
}
am.isBluetoothScoOn = am.isBluetoothScoAvailableOffCall && audioViaBluetooth.value
}
}
private fun dropAudioManagerOverrides() {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
am.mode = AudioManager.MODE_NORMAL
// Clear selected communication device to default value after we changed it in call
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
am.clearCommunicationDevice()
} else {
am.isSpeakerphoneOn = false
am.stopBluetoothSco()
}
}
@Composable
private fun ActiveCallOverlayLayout(
call: Call,
speakerCanBeEnabled: Boolean,
dismiss: () -> Unit,
toggleAudio: () -> Unit,
toggleVideo: () -> Unit,
@ -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 = {},

View File

@ -166,7 +166,7 @@ private fun RoleSelectionRow(groupInfo: GroupInfo, selectedRole: MutableState<Gr
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
val values = GroupMemberRole.values().filter { it <= groupInfo.membership.memberRole && it != GroupMemberRole.Observer }.map { it to it.text }
val values = GroupMemberRole.values().filter { it <= groupInfo.membership.memberRole }.map { it to it.text }
ExposedDropDownSettingRow(
generalGetString(R.string.new_member_role),
values,

View File

@ -82,6 +82,9 @@ fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, groupLinkMemberR
editGroupProfile = {
ModalManager.shared.showCustomModal { close -> 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 = {},
)
}
}

View File

@ -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) {

View File

@ -0,0 +1,94 @@
package chat.simplex.app.views.chat.group
import SectionItemView
import SectionSpacer
import SectionView
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import chat.simplex.app.R
import chat.simplex.app.model.*
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.*
@Composable
fun GroupWelcomeView(m: ChatModel, groupInfo: GroupInfo, close: () -> Unit) {
var groupInfo by remember { mutableStateOf(groupInfo) }
val welcomeText = remember { mutableStateOf(groupInfo.groupProfile.description ?: "") }
fun save(afterSave: () -> Unit = {}) {
withApi {
var welcome: String? = welcomeText.value.trim('\n', ' ')
if (welcome?.length == 0) {
welcome = null
}
val groupProfileUpdated = groupInfo.groupProfile.copy(description = welcome)
val res = m.controller.apiUpdateGroup(groupInfo.groupId, groupProfileUpdated)
if (res != null) {
groupInfo = res
m.updateGroup(res)
welcomeText.value = welcome ?: ""
}
afterSave()
}
}
ModalView(
close = {
if (welcomeText.value == groupInfo.groupProfile.description || (welcomeText.value == "" && groupInfo.groupProfile.description == null)) close()
else showUnsavedChangesAlert({ save(close) }, close)
},
background = if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight
) {
GroupWelcomeLayout(
welcomeText,
groupInfo,
save = ::save
)
}
}
@Composable
private fun GroupWelcomeLayout(
welcomeText: MutableState<String>,
groupInfo: GroupInfo,
save: () -> Unit,
) {
Column(
Modifier.fillMaxWidth().verticalScroll(rememberScrollState()),
) {
AppBarTitle(stringResource(R.string.group_welcome_title))
val welcomeText = remember { welcomeText }
TextEditor(Modifier.padding(horizontal = DEFAULT_PADDING).height(160.dp), text = welcomeText)
SectionSpacer()
SaveButton(
save = save,
disabled = welcomeText.value == groupInfo.groupProfile.description || (welcomeText.value == "" && groupInfo.groupProfile.description == null)
)
}
}
@Composable
private fun SaveButton(save: () -> Unit, disabled: Boolean) {
SectionView {
SectionItemView(save, disabled = disabled) {
Text(stringResource(R.string.save_and_update_group_profile), color = if (disabled) HighOrLowlight else MaterialTheme.colors.primary)
}
}
}
private fun showUnsavedChangesAlert(save: () -> Unit, revert: () -> Unit) {
AlertManager.shared.showAlertDialogStacked(
title = generalGetString(R.string.save_welcome_message_question),
confirmText = generalGetString(R.string.save_and_update_group_profile),
dismissText = generalGetString(R.string.exit_without_saving),
onConfirm = save,
onDismiss = revert,
)
}

View File

@ -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
)

View File

@ -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)

View File

@ -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 <reified T> serializableSaver(): Saver<T, *> = Saver(
save = { json.encodeToString(it) },
restore = { json.decodeFromString(it) }
)
fun saveAppLocale(pref: SharedPreference<String?>, activity: Activity, languageCode: String? = null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val localeManager = SimplexApp.context.getSystemService(LocaleManager::class.java)
localeManager.applicationLocales = LocaleList(Locale.forLanguageTag(languageCode ?: return))
} else {
pref.set(languageCode)
if (languageCode == null) {
activity.applyLocale(SimplexApp.context.defaultLocale)
}
activity.recreate()
}
}
fun Activity.applyAppLocale(pref: SharedPreference<String?>) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
val lang = pref.get()
if (lang == null || lang == Locale.getDefault().language) return
applyLocale(Locale.forLanguageTag(lang))
}
}
private fun Activity.applyLocale(locale: Locale) {
Locale.setDefault(locale)
val appConf = Configuration(SimplexApp.context.resources.configuration).apply { setLocale(locale) }
val activityConf = Configuration(resources.configuration).apply { setLocale(locale) }
@Suppress("DEPRECATION")
SimplexApp.context.resources.updateConfiguration(appConf, resources.displayMetrics)
@Suppress("DEPRECATION")
resources.updateConfiguration(activityConf, resources.displayMetrics)
}
fun UriHandler.openUriCatching(uri: String) {
try {
openUri(uri)
} catch (e: ActivityNotFoundException) {
Log.e(TAG, e.stackTraceToString())
}
}

View File

@ -36,7 +36,7 @@ fun HowItWorks(user: User?, onboardingStage: MutableState<OnboardingStage?>? = n
val uriHandler = LocalUriHandler.current
Text(
annotatedStringResource(R.string.read_more_in_github_with_link),
modifier = Modifier.padding(bottom = 12.dp).clickable { uriHandler.openUri("https://github.com/simplex-chat/simplex-chat#readme") },
modifier = Modifier.padding(bottom = 12.dp).clickable { uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat#readme") },
lineHeight = 22.sp
)
} else {

View File

@ -35,7 +35,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
Icon(
Icons.Outlined.OpenInNew, stringResource(titleId), tint = MaterialTheme.colors.primary,
modifier = Modifier
.clickable { uriHandler.openUri(link) }
.clickable { uriHandler.openUriCatching(link) }
)
}
@ -270,8 +270,45 @@ private val versionDescriptions: List<VersionDescription> = listOf(
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps"
)
)
)
),
VersionDescription(
version = "v4.6",
features = listOf(
FeatureDescription(
icon = Icons.Outlined.Lock,
titleId = R.string.v4_6_hidden_chat_profiles,
descrId = R.string.v4_6_hidden_chat_profiles_descr
),
FeatureDescription(
icon = Icons.Outlined.Flag,
titleId = R.string.v4_6_group_moderation,
descrId = R.string.v4_6_group_moderation_descr
),
FeatureDescription(
icon = Icons.Outlined.MapsUgc,
titleId = R.string.v4_6_group_welcome_message,
descrId = R.string.v4_6_group_welcome_message_descr
),
FeatureDescription(
icon = Icons.Outlined.Call,
titleId = R.string.v4_6_audio_video_calls,
descrId = R.string.v4_6_audio_video_calls_descr
),
FeatureDescription(
icon = Icons.Outlined.Battery3Bar,
titleId = R.string.v4_6_reduced_battery_usage,
descrId = R.string.v4_6_reduced_battery_usage_descr
),
FeatureDescription(
icon = Icons.Outlined.Translate,
titleId = R.string.v4_6_chinese_spanish_interface,
descrId = R.string.v4_6_chinese_spanish_interface_descr,
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps"
)
)
),
)
private val lastVersion = versionDescriptions.last().version
fun setLastVersionDefault(m: ChatModel) {

View File

@ -2,13 +2,20 @@ package chat.simplex.app.views.usersettings
import SectionCustomFooter
import SectionDivider
import SectionItemView
import SectionItemViewSpaceBetween
import SectionItemWithValue
import SectionSpacer
import SectionView
import android.app.Activity
import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED
import android.net.Uri
import android.os.Build
import android.provider.Settings
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyRow
@ -17,6 +24,7 @@ import androidx.compose.material.MaterialTheme.colors
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Circle
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
@ -30,9 +38,13 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import chat.simplex.app.*
import chat.simplex.app.R
import chat.simplex.app.model.ChatModel
import chat.simplex.app.model.SharedPreference
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.*
import com.godaddy.android.colorpicker.*
import kotlinx.coroutines.delay
import java.util.*
enum class AppIcon(val resId: Int) {
DEFAULT(R.mipmap.icon),
@ -40,7 +52,7 @@ enum class AppIcon(val resId: Int) {
}
@Composable
fun AppearanceView() {
fun AppearanceView(m: ChatModel) {
val appIcon = remember { mutableStateOf(findEnabledIcon()) }
fun setAppIcon(newIcon: AppIcon) {
@ -62,6 +74,7 @@ fun AppearanceView() {
AppearanceLayout(
appIcon,
m.controller.appPrefs.appLanguage,
changeIcon = ::setAppIcon,
editPrimaryColor = { primary ->
ModalManager.shared.showModalCloseable { close ->
@ -73,6 +86,7 @@ fun AppearanceView() {
@Composable fun AppearanceLayout(
icon: MutableState<AppIcon>,
languagePref: SharedPreference<String?>,
changeIcon: (AppIcon) -> Unit,
editPrimaryColor: (Color) -> Unit,
) {
@ -81,6 +95,37 @@ fun AppearanceView() {
horizontalAlignment = Alignment.Start,
) {
AppBarTitle(stringResource(R.string.appearance_settings))
SectionView(stringResource(R.string.settings_section_title_language), padding = PaddingValues()) {
val context = LocalContext.current
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
SectionItemWithValue(
generalGetString(R.string.settings_section_title_language).lowercase().replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.US) else it.toString() },
remember { mutableStateOf("system") },
listOf(ValueTitleDesc("system", generalGetString(R.string.change_verb), "")),
onSelected = { openSystemLangPicker(context as? Activity ?: return@SectionItemWithValue) }
)
} else {
val state = rememberSaveable { mutableStateOf(languagePref.get() ?: "system") }
SectionItemView {
LangSelector(state) {
state.value = it
withApi {
delay(200)
val activity = context as? Activity
if (activity != null) {
if (it == "system") {
saveAppLocale(languagePref, activity)
} else {
saveAppLocale(languagePref, activity, it)
}
}
}
}
}
}
}
SectionSpacer()
SectionView(stringResource(R.string.settings_section_title_icon), padding = PaddingValues(horizontal = DEFAULT_PADDING_HALF)) {
LazyRow {
items(AppIcon.values().size, { index -> AppIcon.values()[index] }) { index ->
@ -179,6 +224,32 @@ fun ColorPicker(initialColor: Color, onColorChanged: (Color) -> Unit) {
)
}
@Composable
private fun LangSelector(state: State<String>, onSelected: (String) -> Unit) {
// Should be the same as in app/build.gradle's `android.defaultConfig.resConfigs`
val supportedLanguages = mapOf(
"system" to generalGetString(R.string.language_system),
"en" to "English",
"cs" to "Čeština",
"de" to "Deutsch",
"es" to "Español",
"fr" to "Français",
"it" to "Italiano",
"nl" to "Nederlands",
"ru" to "Русский",
"zh-CN" to "简体中文"
)
val values by remember { mutableStateOf(supportedLanguages.map { it.key to it.value }) }
ExposedDropDownSettingRow(
generalGetString(R.string.settings_section_title_language).lowercase().replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.US) else it.toString() },
values,
state,
icon = null,
enabled = remember { mutableStateOf(true) },
onSelected = onSelected
)
}
@Composable
private fun ThemeSelector(state: State<DefaultTheme>, onSelected: (DefaultTheme) -> Unit) {
val darkTheme = isSystemInDarkTheme()
@ -193,6 +264,9 @@ private fun ThemeSelector(state: State<DefaultTheme>, onSelected: (DefaultTheme)
)
}
private fun openSystemLangPicker(activity: Activity) {
activity.startActivity(Intent(Settings.ACTION_APP_LOCALE_SETTINGS, Uri.parse("package:" + SimplexApp.context.packageName)))
}
private fun findEnabledIcon(): AppIcon = AppIcon.values().first { icon ->
SimplexApp.context.packageManager.getComponentEnabledSetting(
@ -206,6 +280,7 @@ fun PreviewAppearanceSettings() {
SimpleXTheme {
AppearanceLayout(
icon = remember { mutableStateOf(AppIcon.DARK_BLUE) },
languagePref = SharedPreference({ null }, {}),
changeIcon = {},
editPrimaryColor = {},
)

View File

@ -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)
}
)
}
}

View File

@ -25,6 +25,7 @@ fun NetworkAndServersView(
chatModel: ChatModel,
showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
) {
// It's not a state, just a one-time value. Shouldn't be used in any state-related situations
val netCfg = remember { chatModel.controller.getNetCfg() }
@ -44,6 +45,7 @@ fun NetworkAndServersView(
sessionMode = sessionMode,
showModal = showModal,
showSettingsModal = showSettingsModal,
showCustomModal = showCustomModal,
toggleSocksProxy = { enable ->
if (enable) {
AlertManager.shared.showAlertMsg(
@ -138,6 +140,7 @@ fun NetworkAndServersView(
sessionMode: MutableState<TransportSessionMode>,
showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
toggleSocksProxy: (Boolean) -> Unit,
useOnion: (OnionHosts) -> Unit,
updateSessionMode: (TransportSessionMode) -> Unit,
@ -149,7 +152,7 @@ fun NetworkAndServersView(
) {
AppBarTitle(stringResource(R.string.network_and_servers))
SectionView(generalGetString(R.string.settings_section_title_messages)) {
SettingsActionItem(Icons.Outlined.Dns, stringResource(R.string.smp_servers), showSettingsModal { SMPServersView(it) })
SettingsActionItem(Icons.Outlined.Dns, stringResource(R.string.smp_servers), showCustomModal { m, close -> SMPServersView(m, close) })
SectionDivider()
SectionItemView {
UseSocksProxySwitch(networkUseSocksProxy, toggleSocksProxy)
@ -297,6 +300,7 @@ fun PreviewNetworkAndServersLayout() {
networkUseSocksProxy = remember { mutableStateOf(true) },
showModal = { {} },
showSettingsModal = { {} },
showCustomModal = { {} },
toggleSocksProxy = {},
onionHosts = remember { mutableStateOf(OnionHosts.PREFER) },
sessionMode = remember { mutableStateOf(TransportSessionMode.User) },

View File

@ -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(

View File

@ -27,7 +27,7 @@ import chat.simplex.app.views.helpers.*
import kotlinx.coroutines.launch
@Composable
fun SMPServersView(m: ChatModel) {
fun SMPServersView(m: ChatModel, close: () -> Unit) {
var servers by remember {
mutableStateOf(m.userSMPServersUnsaved.value ?: m.userSMPServers.value ?: emptyList())
}
@ -72,83 +72,90 @@ fun SMPServersView(m: ChatModel) {
}
}
val scope = rememberCoroutineScope()
SMPServersLayout(
testing = testing.value,
servers = servers,
serversUnchanged = serversUnchanged.value,
saveDisabled = saveDisabled.value,
allServersDisabled = allServersDisabled.value,
m.currentUser.value,
addServer = {
AlertManager.shared.showAlertDialogButtonsColumn(
title = generalGetString(R.string.smp_servers_add),
buttons = {
Column {
SectionItemView({
AlertManager.shared.hideAlert()
servers = servers + ServerCfg.empty
// No saving until something will be changed on the next screen to prevent blank servers on the list
showServer(servers.last())
}) {
Text(stringResource(R.string.smp_servers_enter_manually))
}
SectionItemView({
AlertManager.shared.hideAlert()
ModalManager.shared.showModalCloseable { close ->
ScanSMPServer {
close()
servers = servers + it
m.userSMPServersUnsaved.value = servers
ModalView(
close = {
if (saveDisabled.value) close()
else showUnsavedChangesAlert({ saveSMPServers(servers, m, close) }, close)
},
background = if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight
) {
SMPServersLayout(
testing = testing.value,
servers = servers,
serversUnchanged = serversUnchanged.value,
saveDisabled = saveDisabled.value,
allServersDisabled = allServersDisabled.value,
m.currentUser.value,
addServer = {
AlertManager.shared.showAlertDialogButtonsColumn(
title = generalGetString(R.string.smp_servers_add),
buttons = {
Column {
SectionItemView({
AlertManager.shared.hideAlert()
servers = servers + ServerCfg.empty
// No saving until something will be changed on the next screen to prevent blank servers on the list
showServer(servers.last())
}) {
Text(stringResource(R.string.smp_servers_enter_manually))
}
SectionItemView({
AlertManager.shared.hideAlert()
ModalManager.shared.showModalCloseable { close ->
ScanSMPServer {
close()
servers = servers + it
m.userSMPServersUnsaved.value = servers
}
}
}
) {
Text(stringResource(R.string.smp_servers_scan_qr))
}
val hasAllPresets = hasAllPresets(servers, m)
if (!hasAllPresets) {
SectionItemView({
AlertManager.shared.hideAlert()
servers = (servers + addAllPresets(servers, m)).sortedByDescending { it.preset }
}) {
Text(stringResource(R.string.smp_servers_preset_add), color = MaterialTheme.colors.onBackground)
}
}
}
) {
Text(stringResource(R.string.smp_servers_scan_qr))
}
val hasAllPresets = hasAllPresets(servers, m)
if (!hasAllPresets) {
SectionItemView({
AlertManager.shared.hideAlert()
servers = (servers + addAllPresets(servers, m)).sortedByDescending { it.preset }
}) {
Text(stringResource(R.string.smp_servers_preset_add), color = MaterialTheme.colors.onBackground)
}
}
}
)
},
testServers = {
scope.launch {
testServers(testing, servers, m) {
servers = it
m.userSMPServersUnsaved.value = servers
}
}
)
},
testServers = {
scope.launch {
testServers(testing, servers, m) {
servers = it
m.userSMPServersUnsaved.value = servers
}
}
},
resetServers = {
servers = m.userSMPServers.value ?: emptyList()
m.userSMPServersUnsaved.value = null
},
saveSMPServers = {
saveSMPServers(servers, m)
},
showServer = ::showServer,
)
},
resetServers = {
servers = m.userSMPServers.value ?: emptyList()
m.userSMPServersUnsaved.value = null
},
saveSMPServers = {
saveSMPServers(servers, m)
},
showServer = ::showServer,
)
if (testing.value) {
Box(
Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
Modifier
.padding(horizontal = 2.dp)
.size(30.dp),
color = HighOrLowlight,
strokeWidth = 2.5.dp
)
if (testing.value) {
Box(
Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
Modifier
.padding(horizontal = 2.dp)
.size(30.dp),
color = HighOrLowlight,
strokeWidth = 2.5.dp
)
}
}
}
}
@ -247,7 +254,7 @@ private fun HowToButton() {
SettingsActionItem(
Icons.Outlined.OpenInNew,
stringResource(R.string.how_to_use_your_servers),
{ uriHandler.openUri("https://github.com/simplex-chat/simplex-chat/blob/stable/docs/SERVER.md") },
{ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat/blob/stable/docs/SERVER.md") },
textColor = MaterialTheme.colors.primary,
iconColor = MaterialTheme.colors.primary
)
@ -324,12 +331,22 @@ private suspend fun runServersTest(servers: List<ServerCfg>, m: ChatModel, onUpd
return fs
}
private fun saveSMPServers(servers: List<ServerCfg>, m: ChatModel) {
private fun saveSMPServers(servers: List<ServerCfg>, m: ChatModel, afterSave: () -> Unit = {}) {
withApi {
if (m.controller.setUserSMPServers(servers)) {
m.userSMPServers.value = servers
m.userSMPServersUnsaved.value = null
}
afterSave()
}
}
private fun showUnsavedChangesAlert(save: () -> Unit, revert: () -> Unit) {
AlertManager.shared.showAlertDialogStacked(
title = generalGetString(R.string.smp_save_servers_question),
confirmText = generalGetString(R.string.save_verb),
dismissText = generalGetString(R.string.exit_without_saving),
onConfirm = save,
onDismiss = revert,
)
}

View File

@ -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",

View File

@ -1,2 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="accept_contact_button">اقبل</string>
<string name="about_simplex_chat">عن <xliff:g id="appNameFull"> ٍSimpleX </xliff:g></string>
<string name="a_plus_b">a + b</string>
<string name="accept">اقبل</string>
<string name="chat_item_ttl_week">اسبوع 1</string>
<string name="chat_item_ttl_month">شهر 1</string>
<string name="color_primary">لون تمييزي</string>
<string name="chat_item_ttl_day">يوم 1</string>
<string name="accept_feature">اقبل</string>
<string name="about_simplex">عن SimpleX</string>
<string name="above_then_preposition_continuation">أعلاه ، ثم:</string>
<string name="accept_call_on_lock_screen">اقبل</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">لا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف التعريف وجهات الاتصال والرسائل والملفات الخاصة بك بشكل نهائي.</string>
<string name="alert_message_no_group">هذه المجموعة لم تعد موجودة.</string>
<string name="this_QR_code_is_not_a_link">رمز QR هذا ليس رابطًا!</string>
<string name="next_generation_of_private_messaging">الجيل القادم من الرسائل الخاصة</string>
<string name="delete_files_and_media_desc">لا يمكن التراجع عن هذا الإجراء - سيتم حذف جميع الملفات والوسائط المستلمة والمرسلة. ستبقى الصور منخفضة الدقة.</string>
<string name="enable_automatic_deletion_message">لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المرسلة والمستلمة قبل التحديد. قد تأخذ عدة دقائق.</string>
<string name="messages_section_description">ينطبق هذا الإعداد على الرسائل الموجودة في ملف تعريف الدردشة الحالي الخاص بك</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">منصة الرسائل والتطبيقات تحمي خصوصيتك وأمنك.</string>
<string name="profile_is_only_shared_with_your_contacts">يتم مشاركة ملف التعريف مع جهات الاتصال الخاصة بك فقط.</string>
<string name="member_role_will_be_changed_with_notification">سيتم تغيير الدور إلى \"%s\". سيتم إبلاغ كل فرد في المجموعة.</string>
<string name="member_role_will_be_changed_with_invitation">سيتم تغيير الدور إلى \"%s\". سيتلقى العضو دعوة جديدة.</string>
<string name="smp_servers_per_user">خوادم الاتصالات الجديدة لملف تعريف الدردشة الحالي الخاص بك</string>
<string name="switch_receiving_address_desc">هذه الميزة تجريبية! ستعمل فقط إذا كان لدى العميل الآخر الإصدار 4.2 مثبتًا. يجب أن ترى الرسالة في المحادثة بمجرد اكتمال تغيير العنوان - يرجى التحقق من أنه لا يزال بإمكانك تلقي الرسائل من جهة الاتصال هذه (أو عضو المجموعة).</string>
<string name="this_link_is_not_a_valid_connection_link">هذا الارتباط ليس ارتباط اتصال صالح!</string>
</resources>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="allow_voice_messages_only_if">Povolte hlasové zprávy, pouze pokud je váš kontakt povolí.</string>
<string name="allow_to_send_disappearing">Povolit odesílání mizejících zpráv.</string>
<string name="allow_to_send_voice">Povolit odesílání hlasových zpráv.</string>
<string name="allow_to_send_disappearing">Mizící zprávy povoleny.</string>
<string name="allow_to_send_voice">Hlasové zprávy povoleny.</string>
<string name="v4_2_group_links_desc">Správci mohou vytvářet odkazy pro připojení ke skupinám.</string>
<string name="accept_contact_button">Přijmout</string>
<string name="smp_servers_preset_add">Přidejte přednastavené servery</string>
@ -11,7 +11,7 @@
<string name="smp_servers_add">Přidat server…</string>
<string name="network_enable_socks_info">Přistupovat k serverům přes SOCKS proxy na portu 9050\? Před povolením této možnosti musí být spuštěna proxy.</string>
<string name="accept_feature">Přijmout</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Umožněte svým kontaktům odesílat mizející zprávy.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Umožněte svým kontaktům odesílat mizící zprávy.</string>
<string name="about_simplex_chat">O <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="smp_servers_add_to_another_device">Přidat do jiného zařízení</string>
<string name="accept_requests">Přijímat žádosti</string>
@ -24,7 +24,7 @@
<string name="group_member_role_admin">správce</string>
<string name="users_add">Přidat profil</string>
<string name="users_delete_all_chats_deleted">Všechny chaty a zprávy budou smazány tuto akci nelze vrátit zpět!</string>
<string name="allow_disappearing_messages_only_if">Povolte mizející zprávy, pouze pokud to váš kontakt povolí.</string>
<string name="allow_disappearing_messages_only_if">Povolte mizící zprávy, pouze pokud to váš kontakt povolí.</string>
<string name="v4_3_improved_server_configuration_desc">Přidejte servery skenováním QR kódů.</string>
<string name="chat_item_ttl_month">1 měsíci</string>
<string name="chat_item_ttl_week">1 týdnu</string>
@ -33,8 +33,8 @@
<string name="accept_connection_request__question">Přijmout žádost o připojení\?</string>
<string name="all_group_members_will_remain_connected">Všichni členové skupiny zůstanou připojeni.</string>
<string name="allow_irreversible_message_deletion_only_if">Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí.</string>
<string name="allow_direct_messages">Povolit odesílání přímých zpráv členům.</string>
<string name="allow_to_delete_messages">Povolit nevratné smazání odeslaných zpráv.</string>
<string name="allow_direct_messages">Přímé zprávy členům povoleny.</string>
<string name="allow_to_delete_messages">Nevratné mazání odeslaných zpráv povoleno.</string>
<string name="clear_chat_warning">Všechny zprávy budou smazány tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás.</string>
<string name="allow_your_contacts_irreversibly_delete">Umožněte svým kontaktům nevratně odstranit odeslané zprávy.</string>
<string name="allow_your_contacts_to_send_voice_messages">Povolte svým kontaktům odesílání hlasových zpráv.</string>
@ -43,14 +43,14 @@
<string name="button_send_direct_message">Odeslat přímou zprávu</string>
<string name="member_info_section_title_member">ČLEN</string>
<string name="change_member_role_question">Změnit roli ve skupině\?</string>
<string name="info_row_connection">Připojení</string>
<string name="info_row_connection">Připoj</string>
<string name="conn_level_desc_indirect">nepřímé (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="conn_stats_section_title_servers">SERVERY</string>
<string name="receiving_via">Příjímáno přez</string>
<string name="create_secret_group_title">Vytvoření tajné skupiny</string>
<string name="group_display_name_field">Zobrazení názvu skupiny:</string>
<string name="group_full_name_field">Úplný název skupiny:</string>
<string name="group_main_profile_sent">Váš profil v chatu bude zaslán členům skupiny</string>
<string name="group_main_profile_sent">Váš chat profil bude zaslán členům skupiny</string>
<string name="group_profile_is_stored_on_members_devices">Profil skupiny je uložen v zařízeních členů, nikoli na serverech.</string>
<string name="network_options_save">Uložit</string>
<string name="update_network_settings_question">Aktualizovat nastavení sítě\?</string>
@ -58,8 +58,8 @@
<string name="incognito_random_profile">Váš náhodný profil</string>
<string name="incognito_random_profile_description">Vašemu kontaktu bude zaslán náhodný profil</string>
<string name="save_color">Uložit barvu</string>
<string name="reset_color">Obnovení barev</string>
<string name="color_primary">Přízvuk</string>
<string name="reset_color">Obnovit barvu</string>
<string name="color_primary">Zbarvení</string>
<string name="chat_preferences_you_allow">Povolujete</string>
<string name="chat_preferences_default">výchozí (%s)</string>
<string name="chat_preferences_yes">ano</string>
@ -67,29 +67,29 @@
<string name="chat_preferences_always">vždy</string>
<string name="set_group_preferences">Nastavení skupinových předvoleb</string>
<string name="your_preferences">Vaše preference</string>
<string name="timed_messages">Mizející zprávy</string>
<string name="timed_messages">Mizící zprávy</string>
<string name="feature_enabled_for_contact">povoleno pro kontakt</string>
<string name="feature_received_prohibited">přijaté, zakázané</string>
<string name="both_you_and_your_contact_can_send_disappearing">Vy i váš kontakt můžete posílat mizející zprávy.</string>
<string name="both_you_and_your_contact_can_send_disappearing">Vy i váš kontakt můžete posílat mizící zprávy.</string>
<string name="only_your_contact_can_send_disappearing">Zmizelé zprávy může odesílat pouze váš kontakt.</string>
<string name="only_you_can_delete_messages">Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání).</string>
<string name="message_deletion_prohibited">Nevratné mazání zpráv je v tomto chatu zakázáno.</string>
<string name="prohibit_direct_messages">Zakázat odesílání přímých zpráv členům.</string>
<string name="prohibit_direct_messages">Přímé zprávy členům zakázány.</string>
<string name="ttl_sec">%d sec</string>
<string name="ttl_s">%ds</string>
<string name="ttl_min">%d min</string>
<string name="ttl_hour">%d hodina</string>
<string name="ttl_hour">%d hodinu</string>
<string name="feature_offered_item_with_param">offered %s: %2s</string>
<string name="v4_2_group_links">Odkazy na skupiny</string>
<string name="v4_3_voice_messages">Hlasové zprávy</string>
<string name="v4_3_irreversible_message_deletion_desc">Vaše kontakty mohou povolit úplné vymazání zpráv.</string>
<string name="v4_4_disappearing_messages">Zmizení zpráv</string>
<string name="v4_3_irreversible_message_deletion_desc">Vaše kontakty mohou povolit úplné mazání zpráv.</string>
<string name="v4_4_disappearing_messages">Mizící zprávy</string>
<string name="v4_4_verify_connection_security_desc">Porovnejte bezpečnostní kódy se svými kontakty.</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="thousand_abbreviation">k</string>
<string name="connect_via_contact_link">Připojit se přes kontaktní odkaz\?</string>
<string name="connect_via_invitation_link">Připojit se přes odkaz na pozvánku\?</string>
<string name="connect_via_group_link">Připojit se přes odkaz skupiny\?</string>
<string name="connect_via_contact_link">Připojit se odkazem\?</string>
<string name="connect_via_invitation_link">Připojit se pozvánkou\?</string>
<string name="connect_via_group_link">Připojit se odkazem skupiny\?</string>
<string name="profile_will_be_sent_to_contact_sending_link">Váš profil bude odeslán kontaktu, od kterého jste obdrželi tento odkaz.</string>
<string name="server_connected">připojeno</string>
<string name="server_error">chyba</string>
@ -97,19 +97,19 @@
<string name="trying_to_connect_to_server_to_receive_messages">Pokus o připojení k serveru používanému pro příjem zpráv od tohoto kontaktu.</string>
<string name="deleted_description">smazáno</string>
<string name="invalid_chat">neplatný chat</string>
<string name="invalid_data">neplatné údaje</string>
<string name="invalid_data">neplatná data</string>
<string name="connection_local_display_name">spojení <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="display_name_connection_established">spojení navázáno</string>
<string name="display_name_invited_to_connect">pozvánka k připojení</string>
<string name="display_name_connecting">připojení…</string>
<string name="description_you_shared_one_time_link">jste sdíleli jednorázové spojení</string>
<string name="description_you_shared_one_time_link">sdíleli jste jednorázový odkaz</string>
<string name="description_you_shared_one_time_link_incognito">sdíleli jste jednorázový odkaz inkognito</string>
<string name="description_via_group_link">prostřednictvím skupinového odkazu</string>
<string name="description_via_contact_address_link">prostřednictvím odkazu na kontaktní adresu</string>
<string name="description_via_contact_address_link_incognito">inkognito přes odkaz na kontaktní adresu</string>
<string name="description_via_one_time_link">prostřednictvím jednorázového odkazu</string>
<string name="description_via_one_time_link_incognito">inkognito přes jednorázový odkaz</string>
<string name="simplex_link_contact">SimpleX kontaktní adresa</string>
<string name="description_via_contact_address_link">prostřednictvím odkazu</string>
<string name="description_via_contact_address_link_incognito">inkognito přes odkaz</string>
<string name="description_via_one_time_link">jednorázovým odkazem</string>
<string name="description_via_one_time_link_incognito">inkognito jednorázovým odkazem</string>
<string name="simplex_link_contact">SimpleX adresa</string>
<string name="simplex_link_invitation">Jednorázová pozvánka SimpleX</string>
<string name="simplex_link_group">Skupinový odkaz SimpleX</string>
<string name="simplex_link_connection">prostřednictvím <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
@ -118,31 +118,31 @@
<string name="simplex_link_mode_full">Úplný odkaz</string>
<string name="simplex_link_mode_browser">Prostřednictvím prohlížeče</string>
<string name="simplex_link_mode_browser_warning">Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené.</string>
<string name="error_saving_smp_servers">Chyba při ukládání serverů SMP</string>
<string name="error_setting_network_config">Chyba při aktualizaci konfigurace sítě</string>
<string name="error_saving_smp_servers">Chyba ukládání serverů SMP</string>
<string name="error_setting_network_config">Chyba změny konfigurace sítě</string>
<string name="failed_to_parse_chat_title">Nepodařilo se načíst chat</string>
<string name="failed_to_parse_chats_title">Nepodařilo se načíst chaty</string>
<string name="contact_developers">Aktualizujte aplikaci a kontaktujte vývojáře.</string>
<string name="connection_timeout">Časový limit připojení</string>
<string name="connection_error">Chyba připojení</string>
<string name="network_error_desc">Zkontrolujte prosím své síťové připojení pomocí <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> a zkuste to znovu.</string>
<string name="error_sending_message">Chyba při odesílání zprávy</string>
<string name="error_adding_members">Chyba při přidávání členů</string>
<string name="error_sending_message">Chyba odesílání zprávy</string>
<string name="error_adding_members">Chyba přidávání členů</string>
<string name="contact_already_exists">Kontakt již existuje</string>
<string name="you_are_already_connected_to_vName_via_this_link">Jste již připojeni k <xliff:g id="contactName" example="Alice">%1$s!</xliff:g>.</string>
<string name="invalid_connection_link">Neplatný odkaz na spojení</string>
<string name="error_accepting_contact_request">Chyba příjmu požadavku od kontaktu</string>
<string name="error_changing_address">Chyba změny adresy</string>
<string name="settings_notifications_mode_title">Služba oznamování</string>
<string name="settings_notifications_mode_title">Oznamovací služba</string>
<string name="notifications_mode_service_desc">Služba na pozadí je spuštěna vždy - oznámení se zobrazí, jakmile jsou zprávy k dispozici.</string>
<string name="notification_preview_mode_message">Text zprávy</string>
<string name="notification_preview_mode_contact">Jméno kontaktu</string>
<string name="notification_preview_mode_hidden">Skryté</string>
<string name="notification_preview_mode_message_desc">Zobrazit kontakt a zprávu</string>
<string name="notification_contact_connected">Připojeno</string>
<string name="notification_preview_mode_message_desc">Zobrazí kontakt a zprávu</string>
<string name="notification_contact_connected">Připojen</string>
<string name="la_notice_title_simplex_lock">SimpleX Zámek</string>
<string name="auth_log_in_using_credential">Přihlaste se pomocí svého pověření</string>
<string name="auth_enable_simplex_lock">Zapnutí zámku SimpleX</string>
<string name="auth_log_in_using_credential">Přihlásit pomocí ověření</string>
<string name="auth_enable_simplex_lock">Zapnout zámek SimpleX</string>
<string name="reply_verb">Odpověď</string>
<string name="share_verb">Sdílet</string>
<string name="copy_verb">Kopírovat</string>
@ -159,11 +159,11 @@
<string name="icon_descr_waiting_for_image">Čekání na obrázek</string>
<string name="icon_descr_asked_to_receive">Požádáno o přijetí obrázku</string>
<string name="icon_descr_image_snd_complete">Obrázek odeslán</string>
<string name="waiting_for_image">Čekáme na obrázek</string>
<string name="waiting_for_image">Čekám na obrázek</string>
<string name="image_will_be_received_when_contact_is_online">Obrázek bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později!</string>
<string name="contact_sent_large_file">Váš kontakt odeslal soubor, který je větší než aktuálně podporovaná maximální velikost (<xliff:g id="maxFileSize">%1$s</xliff:g>).</string>
<string name="maximum_supported_file_size">V současné době je maximální podporovaná velikost souboru <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="error_saving_file">Chyba při ukládání souboru</string>
<string name="error_saving_file">Chyba ukládání souboru</string>
<string name="voice_message">Hlasová zpráva</string>
<string name="voice_message_send_text">Hlasová zpráva…</string>
<string name="icon_descr_server_status_connected">Připojeno</string>
@ -179,9 +179,9 @@
<string name="reset_verb">Obnovit</string>
<string name="ok">OK</string>
<string name="no_details">bez podrobností</string>
<string name="add_contact">Jednorázový zvací odkaz</string>
<string name="copied">Zkopírováno do schránky</string>
<string name="add_contact_or_create_group">Začít novou konverzaci</string>
<string name="add_contact">Jednorázová pozvánka</string>
<string name="copied">Zkopírováno</string>
<string name="add_contact_or_create_group">Nová konverzace</string>
<string name="create_group">Vytvořit tajnou skupinu</string>
<string name="to_share_with_your_contact">(sdílet s kontaktem)</string>
<string name="only_stored_on_members_devices">(uloženo pouze členy skupiny)</string>
@ -191,17 +191,17 @@
<string name="choose_file">Vybrat soubor</string>
<string name="to_start_a_new_chat_help_header">Pro zahájení nové konverzace</string>
<string name="chat_help_tap_button">Klepněte na tlačítko</string>
<string name="above_then_preposition_continuation">nad, potom:</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Přidat nový kontakt</b>: pro vytvoření jednorázového QR kódu pro váš kontakt.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Skenovat QR kód</b>: připojení ke kontaktu, který vám ukáže QR kód.</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 desktop: scan displayed QR code from the app, via <b>Scan QR code</b>.</string>
<string name="above_then_preposition_continuation">potom:</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Přidejte nový kontakt</b>: vytvořte jednorázý QR kód pro váš kontakt.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Naskenujte QR kód</b>: připojíte se ke kontaktu, který vám QR kód ukázal.</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 počítač: naskenujte QR kód z aplikace přez <b>Skenovat QR kód</b>.</string>
<string name="clear_chat_question">Vyčistit chat\?</string>
<string name="clear_verb">Vyčistit</string>
<string name="mark_read">Označit jako přečteno</string>
<string name="mark_unread">Označit jako nepřečteno</string>
<string name="mute_chat">Ztlumit</string>
<string name="unmute_chat">Zrušit ztlumení</string>
<string name="you_invited_your_contact">Pozvali jste svůj kontakt</string>
<string name="you_invited_your_contact">Pozvali jste kontakt</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">Kontakt, se kterým jste tento odkaz sdíleli, se NEBUDE moci připojit!</string>
<string name="connection_you_accepted_will_be_cancelled">Připojení, které jste přijali, bude zrušeno!</string>
<string name="icon_descr_help">help</string>
@ -210,9 +210,9 @@
<string name="you_will_be_connected_when_group_host_device_is_online">Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později!</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Budete připojeni, jakmile bude vaše žádost o připojení přijata, vyčkejte prosím nebo se podívejte později!</string>
<string name="connection_request_sent">Požadavek na připojení byl odeslán!</string>
<string name="your_profile_will_be_sent">Váš profil v chatu bude odeslán vašemu kontaktu</string>
<string name="create_one_time_link">Vytvořte jednorázový odkaz na pozvánku</string>
<string name="one_time_link">Vytvořit jednorázový zvací odkaz</string>
<string name="your_profile_will_be_sent">Váš chat profil bude odeslán vašemu kontaktu</string>
<string name="create_one_time_link">Vytvořit jednorázovou pozvánku</string>
<string name="one_time_link">Jednorázová pozvánka</string>
<string name="security_code">Bezpečnostní kód</string>
<string name="is_verified">%s je ověřeno</string>
<string name="chat_console">Chat konzole</string>
@ -225,7 +225,7 @@
<string name="smp_servers_invalid_address">Neplatná adresa serveru!</string>
<string name="smp_servers_check_address">Zkontrolujte adresu serveru a zkuste to znovu.</string>
<string name="smp_servers_delete_server">Smazat server</string>
<string name="contribute">Přispějte</string>
<string name="contribute">Přispět</string>
<string name="how_to">Jak</string>
<string name="how_to_use_your_servers">Jak používat servery</string>
<string name="your_ICE_servers">Vaše servery ICE</string>
@ -246,18 +246,18 @@
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">Platforma pro zasílání zpráv a aplikace chránící vaše soukromí a bezpečnost.</string>
<string name="create_profile">Vytvořit profil</string>
<string name="profile_is_only_shared_with_your_contacts">Profil je sdílen pouze s vašimi kontakty.</string>
<string name="display_name_cannot_contain_whitespace">Zobrazované jméno nesmí obsahovat prázdné znaky.</string>
<string name="display_name_cannot_contain_whitespace">Zobrazované jméno nesmí obsahovat mezery.</string>
<string name="bold">tučně</string>
<string name="callstatus_in_progress">probíhající hovor</string>
<string name="decentralized">Decentralizovaná</string>
<string name="how_it_works">Jak to funguje</string>
<string name="how_simplex_works">Jak funguje <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odesílané pomocí <b>2 vrstvého end-to-end šifrování</b>.</string>
<string name="onboarding_notifications_mode_title">Soukromá oznámení</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odesílané pomocí <b>2 vrstvého koncového šifrování</b>.</string>
<string name="onboarding_notifications_mode_title">Oznámení</string>
<string name="onboarding_notifications_mode_periodic">Pravidelné</string>
<string name="ignore">Ignorovat</string>
<string name="call_already_ended">Hovor již skončil!</string>
<string name="icon_descr_video_call">videohovor</string>
<string name="icon_descr_video_call">video hovor</string>
<string name="icon_descr_audio_call">audio hovor</string>
<string name="settings_audio_video_calls">Audio a video hovory</string>
<string name="call_on_lock_screen">Hovory na uzamčené obrazovce:</string>
@ -272,7 +272,7 @@
<string name="settings_section_title_settings">NASTAVENÍ</string>
<string name="settings_section_title_help">NÁPOVĚDA</string>
<string name="settings_section_title_device">ZAŘÍZENÍ</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="settings_section_title_chats">CHATY</string>
<string name="settings_experimental_features">Experimentální funkce</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_icon">IKONA APLIKACE</string>
@ -281,11 +281,11 @@
<string name="settings_section_title_calls">VOLÁNÍ</string>
<string name="export_database">Export databáze</string>
<string name="import_database">Import databáze</string>
<string name="delete_database">Smazání databáze</string>
<string name="error_exporting_chat_database">Chyba při exportu chat databáze</string>
<string name="delete_database">Smazat databázi</string>
<string name="error_exporting_chat_database">Chyba exportu chat databáze</string>
<string name="import_database_confirmation">Import</string>
<string name="restart_the_app_to_use_imported_chat_database">Restartujte aplikaci, abyste mohli používat importovanou chat databázi.</string>
<string name="delete_chat_profile_question">Smazat profil chatu\?</string>
<string name="delete_chat_profile_question">Smazat chat profil\?</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Tuto akci nelze vzít zpět! Váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny.</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Restartujte aplikaci a vytvořte nový chat profil.</string>
<string name="you_must_use_the_most_recent_version_of_database">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ů.</string>
@ -293,24 +293,24 @@
<string name="files_and_media_section">Soubory a média</string>
<string name="delete_files_and_media_question">Smazat soubory a média\?</string>
<string name="delete_messages">Odstranit zprávy</string>
<string name="remove_passphrase_from_keychain">Odstranit přístupovou frázi z úložiště klíčů\?</string>
<string name="remove_passphrase_from_keychain">Odstranit frázi z úložiště klíčů\?</string>
<string name="notifications_will_be_hidden">Oznámení budou doručována pouze do doby, než se aplikace zastaví!</string>
<string name="remove_passphrase">Odstranit</string>
<string name="update_database">Aktualizovat</string>
<string name="current_passphrase">Aktuální přístupová fráze…</string>
<string name="update_database_passphrase">Aktualizovat přístupovou frázi databáze</string>
<string name="current_passphrase">Aktuální fráze…</string>
<string name="update_database_passphrase">Aktualizovat přístupovou frázi</string>
<string name="enter_correct_current_passphrase">Zadejte prosím správnou aktuální přístupovou frázi.</string>
<string name="database_is_not_encrypted">Váš chat databáze není šifrována - nastavte přístupovou frázi pro její ochranu.</string>
<string name="keychain_is_storing_securely">K bezpečnému uložení heslové fráze slouží úložiště klíčů Android - umožňuje fungování služby oznámení.</string>
<string name="database_is_not_encrypted">Chat databáze není šifrována - nastavte přístupovou frázi pro její ochranu.</string>
<string name="keychain_is_storing_securely">K bezpečnému uložení přístupové fráze slouží úložiště klíčů Android - umožňuje fungování služby oznámení.</string>
<string name="impossible_to_recover_passphrase"><b>Upozornění</b>: pokud přístupovou frázi ztratíte, NEBUDE možné ji obnovit ani změnit.</string>
<string name="database_will_be_encrypted_and_passphrase_stored">Databáze bude šifrována a přístupová fráze bude uložena v úložišti klíčů.</string>
<string name="store_passphrase_securely">Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit.</string>
<string name="file_with_path">Soubor: %s</string>
<string name="database_passphrase_is_required">Pro otevření chatu je vyžadována přístupová fráze databáze.</string>
<string name="database_passphrase_is_required">Pro otevření chatu je vyžadována přístupová fráze.</string>
<string name="unknown_error">Neznámá chyba</string>
<string name="open_chat">Otevřete chat</string>
<string name="restore_database">Obnovte zálohu databáze</string>
<string name="restore_database_alert_desc">Po obnovení zálohy databáze zadejte předchozí heslo. Tuto akci nelze vrátit zpět.</string>
<string name="restore_database_alert_desc">Po obnovení zálohy databáze zadejte předchozí frázi. Tuto akci nelze vrátit zpět.</string>
<string name="chat_is_stopped_indication">Chat je zastaven</string>
<string name="chat_archive_header">Chat se archivuje</string>
<string name="delete_chat_archive_question">Smazat chat archiv\?</string>
@ -327,7 +327,7 @@
<string name="rcv_conn_event_switch_queue_phase_completed">změnila se vaše adresa</string>
<string name="icon_descr_expand_role">Rozšířit výběr rolí</string>
<string name="invite_prohibited">Nelze pozvat kontakt!</string>
<string name="failed_to_create_user_duplicate_desc">Již máte profil chatu se stejným názvem. Zvolte prosím jiné jméno.</string>
<string name="failed_to_create_user_duplicate_desc">Již máte chat profil se stejným názvem. Zvolte prosím jiné jméno.</string>
<string name="smp_server_test_create_queue">Vytvořit frontu</string>
<string name="smp_server_test_secure_queue">Zabezpečit frontu</string>
<string name="service_notifications">Okamžitá oznámení!</string>
@ -360,7 +360,7 @@
<string name="integrity_msg_bad_hash">špatný kontrolní součet zprávy</string>
<string name="chat_database_imported">Chat databáze importována</string>
<string name="new_passphrase">Nová přístupová fráze…</string>
<string name="save_passphrase_and_open_chat">Uložte heslo a otevřete chat</string>
<string name="save_passphrase_and_open_chat">Uložte frázi a otevřete chat</string>
<string name="chat_archive_section">CHAT ARCHIV</string>
<string name="no_contacts_selected">Nebyl vybrán žádný kontakt</string>
<string name="invite_prohibited_description">Snažíte se pozvat kontakt se kterým jste sdíleli inkognito profil, do skupiny ve které používáte svůj hlavní profil</string>
@ -385,9 +385,9 @@
<string name="clear_verification">Jasné ověření</string>
<string name="to_verify_compare">Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních.</string>
<string name="your_settings">Vaše nastavení</string>
<string name="your_simplex_contact_address">Vaše kontaktní adresa <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="your_simplex_contact_address">Vaše adresa <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="database_passphrase_and_export">Heslo databáze a export</string>
<string name="your_chat_profiles">Vaše chat profily</string>
<string name="your_chat_profiles">Chat profily</string>
<string name="chat_with_the_founder">Zaslat otázky a nápady</string>
<string name="smp_servers_test_server">Test serveru</string>
<string name="enter_one_ICE_server_per_line">Servery ICE (jeden na řádek)</string>
@ -406,14 +406,14 @@
<string name="ntf_channel_messages">Zprávy SimpleX Chat</string>
<string name="settings_notification_preview_mode_title">Zobrazení náhledu</string>
<string name="settings_notification_preview_title">Náhled oznámení</string>
<string name="notifications_mode_off">Spustí se při otevření aplikace</string>
<string name="notifications_mode_off">Spuštěna při otevřené aplikaci</string>
<string name="notifications_mode_periodic">Spouští se pravidelně</string>
<string name="notifications_mode_service">Vždy zapnuto</string>
<string name="notifications_mode_service">Vždy zapnuta</string>
<string name="notifications_mode_periodic_desc">Každých 10 minut kontroluje nové zprávy, po dobu až 1 minuty</string>
<string name="notification_preview_mode_contact_desc">Zobrazit pouze kontakt</string>
<string name="notification_preview_mode_contact_desc">Zobrazí pouze kontakt</string>
<string name="notification_preview_somebody">Skrytý kontakt:</string>
<string name="la_notice_turn_on">Zapněte funkci</string>
<string name="auth_simplex_lock_turned_on">Zapnutý zámek SimpleX Lock</string>
<string name="auth_simplex_lock_turned_on">Zámek SimpleX zapnut</string>
<string name="auth_unlock">Odemknout</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Ověřování zařízení není povoleno. Jakmile povolíte ověřování zařízení, můžete zámek SimpleX Lock zapnout prostřednictvím Nastavení.</string>
<string name="auth_device_authentication_is_disabled_turning_off">Ověřování zařízení je zakázáno. Zámek SimpleX je vypnut.</string>
@ -439,7 +439,7 @@
<string name="voice_messages_prohibited">Hlasové zprávy jsou zakázány!</string>
<string name="ask_your_contact_to_enable_voice">Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv.</string>
<string name="send_live_message_desc">Poslat živou zprávu - zpráva se bude aktualizovat pro příjemce během psaní.</string>
<string name="share_one_time_link">Vytvořte jednorázový odkaz na pozvánku</string>
<string name="share_one_time_link">Vytvořit jednorázovou pozvánku</string>
<string name="scan_QR_code">Skenovat QR kód</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">( skenovat nebo vložit ze schránky)</string>
<string name="edit_image">Upravit obrázek</string>
@ -453,7 +453,7 @@
<string name="status_contact_has_e2e_encryption">kontakt má šifrování e2e</string>
<string name="status_contact_has_no_e2e_encryption">kontakt nemá šifrování e2e</string>
<string name="call_connection_peer_to_peer">peer-to-peer</string>
<string name="call_connection_via_relay">přes relay</string>
<string name="call_connection_via_relay">přes relé</string>
<string name="icon_descr_hang_up">Zavěsit</string>
<string name="icon_descr_video_off">Video vypnuto</string>
<string name="icon_descr_video_on">Video zapnuto</string>
@ -463,14 +463,14 @@
<string name="alert_title_skipped_messages">Přeskočené zprávy</string>
<string name="privacy_and_security">Ochrana osobních údajů a zabezpečení</string>
<string name="your_privacy">Vaše soukromí</string>
<string name="protect_app_screen">Ochrana obrazovky aplikace</string>
<string name="send_link_previews">Odesílání náhledů odkazů</string>
<string name="full_backup">Zálohování dat aplikace</string>
<string name="confirm_new_passphrase">Potvrdit novou heslovou frázi…</string>
<string name="protect_app_screen">Skrývat aplikaci</string>
<string name="send_link_previews">Odesílat náhledy odkazů</string>
<string name="full_backup">Zálohovat data aplikace</string>
<string name="confirm_new_passphrase">Potvrdit frázi…</string>
<string name="error_with_info">Chyba: %s</string>
<string name="leave_group_question">Opustit skupinu\?</string>
<string name="icon_descr_group_inactive">Skupina je neaktivní</string>
<string name="rcv_group_event_member_left">vlevo</string>
<string name="rcv_group_event_member_left">odešel</string>
<string name="clear_contacts_selection_button">Vyčistit</string>
<string name="switch_verb">Přepnout</string>
<string name="member_role_will_be_changed_with_notification">Role bude změněna na \"%s\". Všichni ve skupině budou informováni.</string>
@ -479,7 +479,7 @@
<string name="network_option_seconds_label">vteřin</string>
<string name="incognito_info_allows">Umožňuje mít v jednom chat profilu mnoho anonymních spojení bez sdílení údajů mezi nimi.</string>
<string name="incognito_info_share">Pokud s někým sdílíte inkognito profil, bude použit pro skupiny, do kterých vás pozve.</string>
<string name="theme_system">Systém</string>
<string name="theme_system">Systémové</string>
<string name="voice_messages">Hlasové zprávy</string>
<string name="both_you_and_your_contacts_can_delete">Vy i váš kontakt můžete nevratně mazat odeslané zprávy.</string>
<string name="ttl_m">%dm</string>
@ -518,10 +518,10 @@
<string name="live">ŽIVĚ</string>
<string name="description_via_group_link_incognito">inkognito přes skupinový odkaz</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Ujistěte se, že adresy serverů SMP jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní.</string>
<string name="failed_to_create_user_title">Chyba při vytváření profilu!</string>
<string name="failed_to_create_user_title">Chyba vytváření profilu!</string>
<string name="failed_to_create_user_duplicate_title">Duplicitní zobrazované jméno!</string>
<string name="failed_to_active_user_title">Chyba při přepínání profilu!</string>
<string name="error_joining_group">Chyba při připojování ke skupině</string>
<string name="failed_to_active_user_title">Chyba přepínání profilu!</string>
<string name="error_joining_group">Chyba připojování ke skupině</string>
<string name="cannot_receive_file">Nelze přijmout soubor</string>
<string name="sender_cancelled_file_transfer">Odesílatel zrušil přenos souboru.</string>
<string name="error_receiving_file">Chyba příjmu souboru</string>
@ -544,12 +544,12 @@
<string name="periodic_notifications_disabled">Pravidelná oznámení jsou vypnuta!</string>
<string name="database_initialization_error_desc">Databáze nefunguje správně. Klepnutím se dozvíte více</string>
<string name="notifications_mode_off_desc">Aplikace může přijímat oznámení pouze při svém běhu, žádná služba na pozadí nebude spuštěna</string>
<string name="notification_display_mode_hidden_desc">Skrýt kontakt a zprávu</string>
<string name="notification_display_mode_hidden_desc">Skryje kontakt i zprávu</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Chcete-li chránit své informace, zapněte zámek SimpleX Lock.
\nPřed zapnutím této funkce budete vyzváni k dokončení ověření.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete vyzváni k ověření.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Při spuštění, nebo obnovení aplikace po 30 sekundách, budete vyzváni k odemčení.</string>
<string name="auth_disable_simplex_lock">Vypnout zámek SimpleX</string>
<string name="auth_confirm_credential">Potvrďte své pověření</string>
<string name="auth_confirm_credential">Potvrďte vzor</string>
<string name="auth_unavailable">Ověřování není k dispozici</string>
<string name="auth_stop_chat">Zastavit chat</string>
<string name="auth_open_chat_console">Otevřete chat konzoli</string>
@ -565,7 +565,7 @@
<string name="icon_descr_sent_msg_status_unauthorized_send">neautorizované odeslání</string>
<string name="group_preview_you_are_invited">jste pozváni do skupiny</string>
<string name="group_preview_join_as">připojit jako %s</string>
<string name="group_connection_pending">připojuje se</string>
<string name="group_connection_pending">připojuji</string>
<string name="tap_to_start_new_chat">Začněte nový chat</string>
<string name="chat_with_developers">Chat s vývojáři</string>
<string name="you_have_no_chats">Nemáte žádné konverzace</string>
@ -585,25 +585,25 @@
<string name="live_message">Živá zpráva!</string>
<string name="connect_via_link_or_qr">Připojit se prostřednictvím odkazu / QR kódu</string>
<string name="thank_you_for_installing_simplex">Děkujeme za instalaci <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
<string name="you_can_connect_to_simplex_chat_founder">Můžete se <font color="#0088ff">připojit k <xliff:g id="appNameFull">SimpleX Chat</xliff:g> vývojářům a položit jim případné dotazy a získat aktualizace</font>.</string>
<string name="you_can_connect_to_simplex_chat_founder">Můžete se <font color="#0088ff">připojit k <xliff:g id="appNameFull">SimpleX Chat</xliff:g> vývojářům, položit jim případné dotazy a získat aktualizace</font>.</string>
<string name="to_connect_via_link_title">Připojení prostřednictvím odkazu</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Pokud jste dostali <xliff:g id="appName">SimpleX Chat</xliff:g> zvací odkaz, Můžete ho otevřít v prohlížeči:</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Pokud jste dostali <xliff:g id="appName">SimpleX Chat</xliff:g> pozvánku, můžete ji otevřít v prohlížeči:</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Pokud zvolíte odmítnutí, odesílatel NEBUDE upozorněn.</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 mobilní telefon: tap <b>Otevřete v mobilní aplikaci</b>, potom klikněte <b>Připojit</b>.</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 telefon: <b>Otevřete v mobilní aplikaci</b>, potom klikněte na <b>Připojit</b>.</string>
<string name="reject_contact_button">Odmítnout</string>
<string name="clear_chat_button">Smazat chat</string>
<string name="clear_chat_menu_action">Vyčistit</string>
<string name="delete_contact_menu_action">Smazat</string>
<string name="set_contact_name">Nastavit jméno kontaktu</string>
<string name="you_accepted_connection">Přijali jste spojení</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Aby se připojení dokončilo, musí být váš kontakt online.
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">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).</string>
<string name="contact_wants_to_connect_with_you">Chce se s vámi spojit!</string>
<string name="icon_descr_profile_image_placeholder">Zástupný symbol profilového obrázku</string>
<string name="image_descr_profile_image">profilový obrázek</string>
<string name="icon_descr_close_button">Tlačítko Zavřít</string>
<string name="alert_title_contact_connection_pending">Kontakt ještě není připojen!</string>
<string name="image_descr_link_preview">náhledový obrázek odkazu</string>
<string name="image_descr_link_preview">náhled odkazu</string>
<string name="icon_descr_cancel_link_preview">Zrušit náhled odkazu</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> Logo</string>
<string name="icon_descr_email">E-mail</string>
@ -634,7 +634,7 @@
<string name="use_simplex_chat_servers__question">Použít <xliff:g id="appNameFull">SimpleX Chat</xliff:g> servery\?</string>
<string name="using_simplex_chat_servers">Použití <xliff:g id="appNameFull">SimpleX Chat</xliff:g> serverů.</string>
<string name="saved_ICE_servers_will_be_removed">Uložené servery WebRTC ICE budou odstraněny.</string>
<string name="error_saving_ICE_servers">Chyba při ukládání serverů ICE</string>
<string name="error_saving_ICE_servers">Chyba ukládání serverů ICE</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Ujistěte se, že adresy serverů WebRTC ICE jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní.</string>
<string name="save_servers_button">Uložit</string>
<string name="network_and_servers">Síť a servery</string>
@ -655,7 +655,7 @@
<string name="app_version_title">Verze aplikace</string>
<string name="app_version_name">Verze aplikace: v%s</string>
<string name="core_version">Verze jádra: v%s</string>
<string name="core_build_timestamp">Jádro sestaveno na: %s</string>
<string name="core_build_timestamp">Jádro sestaveno: %s</string>
<string name="delete_address__question">Smazat adresu\?</string>
<string name="all_your_contacts_will_remain_connected">Všechny vaše kontakty zůstanou připojeny.</string>
<string name="contact_requests">Žádosti o kontakt</string>
@ -709,18 +709,20 @@
<string name="audio_call_no_encryption">zvukový hovor (nešifrováno e2e)</string>
<string name="reject">Odmítnout</string>
<string name="your_calls">Vaše hovory</string>
<string name="connect_calls_via_relay">Spojení přes relay</string>
<string name="always_use_relay">Spojení přes relé</string>
<string name="show_call_on_lock_screen">Zobrazit</string>
<string name="no_call_on_lock_screen">Zakázat</string>
<string name="your_ice_servers">Vaše servery ICE</string>
<string name="webrtc_ice_servers">WebRTC servery ICE</string>
<string name="relay_server_protects_ip">Přenosový server chrání vaši IP adresu, ale může sledovat dobu trvání hovoru.</string>
<string name="relay_server_if_necessary">Přenosový server se používá pouze v případě potřeby. Jiná strana může sledovat vaši IP adresu.</string>
<string name="status_no_e2e_encryption">bez šifrování e2e</string>
<string name="icon_descr_flip_camera">Otočit foťák</string>
<string name="icon_descr_flip_camera">Druhý foťák</string>
<string name="icon_descr_call_pending_sent">Čekající hovor</string>
<string name="icon_descr_call_missed">Zmeškaný hovor</string>
<string name="icon_descr_call_rejected">Odmítnutý hovor</string>
<string name="icon_descr_call_connecting">Spojování hovoru</string>
<string name="icon_descr_call_ended">Ukončený hovor</string>
<string name="icon_descr_call_ended">Skončený hovor</string>
<string name="answer_call">Přijmout hovor</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> přeskočená zpráva (zprávy)</string>
<string name="alert_text_skipped_messages_it_can_happen_when">Může se to stát, když:
@ -731,31 +733,31 @@
\nBudeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</string>
<string name="settings_section_title_you">VY</string>
<string name="settings_section_title_support">PODPOŘIT SIMPLEX CHAT</string>
<string name="settings_section_title_develop">ROZVÍJET</string>
<string name="settings_section_title_develop">VÝVOJ</string>
<string name="settings_developer_tools">Nástroje pro vývojáře</string>
<string name="settings_section_title_incognito">Inkognito mód</string>
<string name="your_chat_database">Vaše chat databáze</string>
<string name="settings_section_title_incognito">inkognito mód</string>
<string name="your_chat_database">Chat databáze</string>
<string name="run_chat_section">SPUSTIT CHAT</string>
<string name="chat_is_running">Chat je spuštěn</string>
<string name="chat_is_stopped">Chat je zastaven</string>
<string name="chat_database_section">CHAT DATABÁZE</string>
<string name="database_passphrase">Heslo databáze</string>
<string name="database_passphrase">přístupová fráze databáze</string>
<string name="new_database_archive">Archiv nové databáze</string>
<string name="old_database_archive">Archiv staré databáze</string>
<string name="error_starting_chat">Chyba při spuštění chatu</string>
<string name="error_starting_chat">Chyba spouštění chatu</string>
<string name="stop_chat_question">Zastavit chat\?</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Zastavte chat pro export, import nebo smazání chat databáze. Během zastavení, nebudete moci přijímat ani odesílat zprávy.</string>
<string name="stop_chat_confirmation">Zastavit</string>
<string name="set_password_to_export">Nastavení přístupové fráze pro export</string>
<string name="set_password_to_export">Nastavte přístupovou frázi pro export</string>
<string name="set_password_to_export_desc">Databáze je šifrována pomocí náhodné přístupové fráze. Před exportem ji změňte.</string>
<string name="error_stopping_chat">Chyba při zastavení chatu</string>
<string name="error_stopping_chat">Chyba zastavování chatu</string>
<string name="import_database_question">Importovat chat databázi\?</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">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.</string>
\nTuto akci nelze vzít zpět - vaše profily, kontakty, zprávy a soubory budou nenávratně ztraceny.</string>
<string name="error_deleting_database">Chyba mazání chat databáze</string>
<string name="error_importing_database">Chyba importu chat databáze</string>
<string name="chat_database_deleted">Chat databáze odstraněna</string>
<string name="delete_files_and_media_for_all_users">Odstranění souborů pro všechny chat profily</string>
<string name="delete_files_and_media_for_all_users">Odstranit soubory všech chat profilů</string>
<string name="delete_files_and_media_all">Odstranit všechny soubory</string>
<string name="delete_files_and_media_desc">Tuto akci nelze vrátit zpět - všechny přijaté a odeslané soubory a média budou smazány. Obrázky s nízkým rozlišením zůstanou zachovány.</string>
<string name="no_received_app_files">Žádné přijaté ani odeslané soubory</string>
@ -768,11 +770,11 @@
<string name="enable_automatic_deletion_question">Povolit automatické mazání zpráv\?</string>
<string name="enable_automatic_deletion_message">Tuto akci nelze vzít zpět - zprávy odeslané a přijaté dříve, než bylo zvoleno, budou smazány. Může to trvat několik minut.</string>
<string name="error_changing_message_deletion">Chyba změny nastavení</string>
<string name="save_passphrase_in_keychain">Uložit přístupovou frázi do úložiště klíčů</string>
<string name="save_passphrase_in_keychain">Uložit frázi do úložiště klíčů</string>
<string name="database_encrypted">Databáze šifrována!</string>
<string name="error_encrypting_database">Chyba šifrování databáze</string>
<string name="encrypt_database">Šifrovat</string>
<string name="encrypted_with_random_passphrase">Databáze je šifrována pomocí náhodné přístupové fráze, můžete ji změnit.</string>
<string name="encrypted_with_random_passphrase">Databáze je šifrována pomocí náhodné přístupové fráze, musíte ji změnit.</string>
<string name="keychain_allows_to_receive_ntfs">K bezpečnému uložení přístupové fráze se použije úložiště klíčů Android, po restartování aplikace nebo změně přístupové fráze - umožní přijímání oznámení.</string>
<string name="you_have_to_enter_passphrase_every_time">Musíte zadat přístupovou frázi při každém spuštění aplikace - není uložena v zařízení.</string>
<string name="encrypt_database_question">Šifrovat databázi\?</string>
@ -786,7 +788,7 @@
<string name="database_error">Chyba databáze</string>
<string name="keychain_error">Chyba klíčenky</string>
<string name="passphrase_is_different">Přístupová fráze databáze se liší od té uložené v klíčence.</string>
<string name="cannot_access_keychain">Nelze získat přístup k úložišti klíčů pro uložení přístupová fráze k databázi.</string>
<string name="cannot_access_keychain">Nelze získat přístup ke klíčence pro uložení přístupová fráze k databázi.</string>
<string name="unknown_database_error_with_info">Neznámá chyba databáze: %s</string>
<string name="wrong_passphrase_title">Špatná přístupová fráze!</string>
<string name="enter_correct_passphrase">Zadejte správnou přístupovou frázi.</string>
@ -795,13 +797,13 @@
<string name="restore_database_alert_title">Obnovit zálohu databáze\?</string>
<string name="restore_database_alert_confirm">Obnovit</string>
<string name="database_restore_error">Chyba obnovení databáze</string>
<string name="restore_passphrase_not_found_desc">Heslo nebylo nalezeno v úložišti klíčů, zadejte jej prosím ručně. K této situaci mohlo dojít, pokud jste obnovili data aplikace pomocí zálohovacího nástroje. Pokud tomu tak není, obraťte se na vývojáře.</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Chat můžete spustit přes Nastavení aplikace / Databáze nebo restartováním aplikace.</string>
<string name="restore_passphrase_not_found_desc">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.</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Chat můžete spustit v Nastavení / Databáze nebo restartováním aplikace.</string>
<string name="save_archive">Uložit archiv</string>
<string name="delete_archive">Smazat archiv</string>
<string name="group_invitation_item_description">pozvánka do skupiny <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="archive_created_on_ts">Vytvořeno dne <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Jste zváni do skupiny. Připojte se a spojte se s členy skupiny.</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Jste zváni do skupiny. Připojte se k členům skupiny.</string>
<string name="join_group_incognito_button">Připojit se inkognito</string>
<string name="joining_group">Připojit ke skupině</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Připojili jste se k této skupině. Připojení k pozvání člena skupiny.</string>
@ -835,15 +837,15 @@
<string name="group_member_role_member">člen</string>
<string name="group_member_role_owner">vlastník</string>
<string name="group_member_status_removed">odstraněn</string>
<string name="group_member_status_left">vlevo</string>
<string name="group_member_status_left">odešel</string>
<string name="group_member_status_group_deleted">skupina smazána</string>
<string name="group_member_status_invited">pozvánka</string>
<string name="group_member_status_introduced">ipojující (zavedený)</string>
<string name="group_member_status_invited">pozván</string>
<string name="group_member_status_introduced">edstaven (zaveden)</string>
<string name="group_member_status_intro_invitation">připojení (pozvánka na představení)</string>
<string name="group_member_status_accepted">připojení (přijato)</string>
<string name="group_member_status_announced">připojení (oznámeno)</string>
<string name="group_member_status_accepted">připojen (přijat)</string>
<string name="group_member_status_announced">připojen (oznámen)</string>
<string name="group_member_status_connected">připojen</string>
<string name="group_member_status_complete">komplet</string>
<string name="group_member_status_complete">komplet</string>
<string name="group_member_status_creator">tvůrce</string>
<string name="group_member_status_connecting">připojování</string>
<string name="no_contacts_to_add">Žádné kontakty k přidání</string>
@ -859,11 +861,11 @@
<string name="button_delete_group">Smazat skupinu</string>
<string name="delete_group_question">Smazat skupinu\?</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Skupina bude smazána pro všechny členy - nelze to vzít zpět!</string>
<string name="delete_group_for_self_cannot_undo_warning">Skupina bude smazána pro vás - toto nelze vzít zpět!</string>
<string name="delete_group_for_self_cannot_undo_warning">Skupina bude smazána pouze pro vás - toto nelze vzít zpět!</string>
<string name="button_leave_group">Opustit skupinu</string>
<string name="button_edit_group_profile">Upravit profil skupiny</string>
<string name="group_link">Odkaz na skupinu</string>
<string name="create_group_link">Vytvořit odkaz na skupinu</string>
<string name="group_link">Odkaz skupiny</string>
<string name="create_group_link">Vytvořit odkaz skupiny</string>
<string name="delete_link">Smazat odkaz</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Můžete sdílet odkaz nebo QR kód - ke skupině se bude moci připojit kdokoli. O členy skupiny nepřijdete, pokud ji později odstraníte.</string>
<string name="error_creating_link_for_group">Chyba vytváření odkazu skupiny</string>
@ -899,44 +901,44 @@
<string name="users_delete_with_connections">Profil a připojení k serveru</string>
<string name="users_delete_data_only">Pouze místní data profilu</string>
<string name="incognito_random_profile_from_contact_description">Náhodný profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz.</string>
<string name="incognito_info_protects">Režim inkognito chrání soukromí vašeho hlavního profilového jména a obrázku - pro každý nový kontakt je vytvořen nový náhodný profil.</string>
<string name="incognito_info_find">Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části chatu.</string>
<string name="theme_light">Světlý</string>
<string name="theme_dark">Tmavý</string>
<string name="incognito_info_protects">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.</string>
<string name="incognito_info_find">Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části.</string>
<string name="theme_light">Světlé</string>
<string name="theme_dark">Tmavé</string>
<string name="theme">Téma</string>
<string name="chat_preferences_contact_allows">Kontakt povolil</string>
<string name="chat_preferences_contact_allows">Kontakt povolen</string>
<string name="chat_preferences_on">zapnuto</string>
<string name="chat_preferences_off">vypnuto</string>
<string name="chat_preferences">Chat předvolby</string>
<string name="contact_preferences">Předvolby kontaktu</string>
<string name="group_preferences">Předvolby skupiny</string>
<string name="direct_messages">Přímé zprávy</string>
<string name="full_deletion">Smazat pro všechny</string>
<string name="feature_enabled">povoleno</string>
<string name="feature_enabled_for_you">povoleno pro vás</string>
<string name="feature_off">vypnuto</string>
<string name="prohibit_sending_disappearing_messages">Zakázat zasílání mizejících zpráv.</string>
<string name="full_deletion">Mazání všem</string>
<string name="feature_enabled">zapnuty</string>
<string name="feature_enabled_for_you">povoleno vám</string>
<string name="feature_off">vypnuty</string>
<string name="prohibit_sending_disappearing_messages">Mizící zprávy zakázány.</string>
<string name="contacts_can_mark_messages_for_deletion">Kontakty mohou označit zprávy ke smazání; vy je budete moci zobrazit.</string>
<string name="prohibit_sending_voice_messages">Zakázat odesílání hlasových zpráv.</string>
<string name="only_you_can_send_disappearing">Mizející zprávy můžete odesílat pouze vy.</string>
<string name="disappearing_prohibited_in_this_chat">Mizející zprávy jsou v tomto chatu zakázány.</string>
<string name="prohibit_sending_voice_messages">Hlasové zprávy zakázány.</string>
<string name="only_you_can_send_disappearing">Pouze vy můžete odesílat mizící zprávy.</string>
<string name="disappearing_prohibited_in_this_chat">Mizící zprávy jsou v tomto chatu zakázány.</string>
<string name="only_your_contact_can_delete">Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání).</string>
<string name="both_you_and_your_contact_can_send_voice">Hlasové zprávy můžete posílat vy i váš kontakt.</string>
<string name="only_you_can_send_voice">Hlasové zprávy můžete posílat pouze vy.</string>
<string name="only_your_contact_can_send_voice">Hlasové zprávy může odesílat pouze váš kontakt.</string>
<string name="voice_prohibited_in_this_chat">Hlasové zprávy jsou v tomto chatu zakázány.</string>
<string name="prohibit_sending_disappearing">Zakázat posílání mizejících zpráv.</string>
<string name="prohibit_message_deletion">Zakázat nevratné mazání zpráv.</string>
<string name="prohibit_sending_voice">Zakázat odesílání hlasových zpráv.</string>
<string name="group_members_can_send_disappearing">Členové skupiny mohou posílat mizející zprávy.</string>
<string name="disappearing_messages_are_prohibited">Mizející zprávy jsou v této skupině zakázány.</string>
<string name="prohibit_sending_disappearing">Posílání mizících zpráv zakázáno.</string>
<string name="prohibit_message_deletion">Nevratné mazání odeslaných zpráv zakázáno.</string>
<string name="prohibit_sending_voice">Hlasové zprávy zakázány.</string>
<string name="group_members_can_send_disappearing">Členové skupiny mohou posílat mizící zprávy.</string>
<string name="disappearing_messages_are_prohibited">Mizící zprávy jsou v této skupině zakázány.</string>
<string name="group_members_can_send_dms">Členové skupiny mohou posílat přímé zprávy.</string>
<string name="direct_messages_are_prohibited_in_chat">Přímé zprávy mezi členy jsou v této skupině zakázány.</string>
<string name="group_members_can_delete">Členové skupiny mohou nevratně mazat odeslané zprávy.</string>
<string name="message_deletion_prohibited_in_chat">Nevratné mazání zpráv je v této skupině zakázáno.</string>
<string name="group_members_can_send_voice">Členové skupiny mohou posílat hlasové zprávy.</string>
<string name="voice_messages_are_prohibited">Hlasové zprávy jsou v této skupině zakázány.</string>
<string name="delete_after">Smazat po</string>
<string name="delete_after">Smazat za</string>
<string name="ttl_month">%d měsíc</string>
<string name="ttl_months">%d měsíců</string>
<string name="ttl_day">%d den</string>
@ -947,9 +949,9 @@
<string name="feature_offered_item">nabízeno %s</string>
<string name="feature_cancelled_item">zrušeno %s</string>
<string name="whats_new">Co je nového</string>
<string name="new_in_version">Novinky v %s</string>
<string name="new_in_version">Novinky %s</string>
<string name="v4_2_auto_accept_contact_requests">Automatické přijímání žádostí o kontakt</string>
<string name="v4_2_auto_accept_contact_requests_desc">S volitelnou uvítací zprávou.</string>
<string name="v4_2_auto_accept_contact_requests_desc">Volitelná uvítací zpráva.</string>
<string name="v4_3_voice_messages_desc">Max. 40 sekund, přijímá se okamžitě.</string>
<string name="v4_5_private_filenames">Soukromé názvy souborů</string>
<string name="v4_5_private_filenames_descr">Pro ochranu časového pásma, obrazové/hlasové soubory používají UTC.</string>
@ -957,14 +959,26 @@
<string name="v4_5_reduced_battery_usage_descr">Další vylepšení se chystají již brzy!</string>
<string name="v4_5_italian_interface">Italské rozhraní</string>
<string name="v4_5_italian_interface_descr">Díky uživatelům - překládejte prostřednictvím Weblate!</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">Budete připojeni, bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později!</string>
<string name="your_contact_address">Vaše kontaktní adresa</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">Budete připojeni, jakmile bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později!</string>
<string name="your_contact_address">Vaše adresa</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">Váš chat profil bude odeslán
\nvašemu kontaktu</string>
<string name="your_chat_profiles_stored_locally">Vaše chat profily jsou uloženy lokálně, pouze ve vašem zařízení.</string>
<string name="your_chats">Vaše konverzace</string>
<string name="paste_connection_link_below_to_connect">Do níže uvedeného pole vložte odkaz, který jste obdrželi pro spojení s kontaktem.</string>
<string name="share_invitation_link">Sdílet zvací odkaz</string>
<string name="status_e2e_encrypted">end-to-end šifrované</string>
<string name="share_invitation_link">Sdílet pozvánku</string>
<string name="status_e2e_encrypted">koncově šifrované</string>
<string name="moderated_description">moderované</string>
<string name="moderated_item_description">moderovaný %s</string>
<string name="delete_member_message__question">Smazat zprávu člena\?</string>
<string name="moderate_verb">moderovaný</string>
<string name="observer_cant_send_message_desc">Kontaktujte prosím správce skupiny.</string>
<string name="you_are_observer">jste pozorovatel</string>
<string name="group_member_role_observer">pozorovatel</string>
<string name="moderate_message_will_be_deleted_warning">Zpráva bude smazána pro všechny členy.</string>
<string name="moderate_message_will_be_marked_warning">Zpráva bude pro všechny členy označena jako moderovaná.</string>
<string name="observer_cant_send_message_title">Nemůžete posílat zprávy!</string>
<string name="error_updating_link_for_group">Chyba aktualizace odkazu skupiny</string>
<string name="initial_member_role">Počáteční role</string>
<string name="language_system">Systém</string>
</resources>

View File

@ -513,13 +513,15 @@
<!-- Call settings -->
<string name="settings_audio_video_calls">Audio- &amp; Videoanrufe</string>
<string name="your_calls">Ihre Anrufe</string>
<string name="connect_calls_via_relay">Über ein Relais verbinden</string>
<string name="always_use_relay">Über ein Relais verbinden</string>
<string name="call_on_lock_screen">Anrufe auf Sperrbildschirm:</string>
<string name="accept_call_on_lock_screen">Akzeptieren</string>
<string name="show_call_on_lock_screen">Anzeigen</string>
<string name="no_call_on_lock_screen">Deaktivieren</string>
<string name="your_ice_servers">Ihre ICE-Server</string>
<string name="webrtc_ice_servers">WebRTC ICE-Server</string>
<string name="relay_server_protects_ip">Relais-Server schützen Ihre IP-Adresse, aber sie können die Anrufdauer erfassen.</string>
<string name="relay_server_if_necessary">Relais-Server werden nur genutzt, wenn sie benötigt werden. Ihre IP-Adresse kann von Anderen erfasst werden.</string>
<!-- Call Lock Screen -->
<string name="open_simplex_chat_to_accept_call">Öffnen Sie <xliff:g id="appNameFull">SimpleX Chat</xliff:g>, um den Anruf anzunehmen.</string>
<string name="allow_accepting_calls_from_lock_screen">Aktivieren Sie Anrufe vom Sperrbildschirm über die Einstellungen.</string>
@ -1041,4 +1043,16 @@
<string name="v4_4_french_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
<string name="v4_5_private_filenames_descr">Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen.</string>
<string name="moderated_description">Moderiert</string>
<string name="moderated_item_description">Von %s moderiert</string>
<string name="moderate_verb">Moderieren</string>
<string name="moderate_message_will_be_marked_warning">Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet.</string>
<string name="you_are_observer">Sie sind Beobachter</string>
<string name="observer_cant_send_message_title">Sie können keine Nachrichten versenden!</string>
<string name="group_member_role_observer">Beobachter</string>
<string name="initial_member_role">Anfängliche Rolle</string>
<string name="delete_member_message__question">Nachricht des Mitglieds löschen\?</string>
<string name="error_updating_link_for_group">Fehler beim Aktualisieren des Gruppen-Links</string>
<string name="observer_cant_send_message_desc">Bitte kontaktieren Sie den Gruppen-Administrator.</string>
<string name="moderate_message_will_be_deleted_warning">Diese Nachricht wird für alle Gruppenmitglieder gelöscht.</string>
<string name="language_system">System</string>
</resources>

View File

@ -3,7 +3,7 @@
<string name="auth_unavailable">Autenticación no disponible</string>
<string name="accept_contact_button">Aceptar</string>
<string name="network_settings">Configuración de red avanzada</string>
<string name="onboarding_notifications_mode_off_desc"><b>Mejor para la batería</b>. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, NO se utilizará el servicio en segundo plano.</string>
<string name="onboarding_notifications_mode_off_desc"><b>Mejor para la batería</b>. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, el servicio NO se usará en segundo plano.</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>Bueno para la batería</b>. El servicio en segundo plano comprueba si hay mensajes nuevos cada 10 minutos. Puedes perderte llamadas y mensajes urgentes.</string>
<string name="accept_call_on_lock_screen">Aceptar</string>
<string name="full_backup">Copia de seguridad de los datos de la aplicación</string>
@ -14,34 +14,34 @@
<string name="v4_3_improved_server_configuration_desc">Añadir servidores escaneando códigos QR.</string>
<string name="smp_servers_preset_add">Añadir servidores predefinidos</string>
<string name="all_group_members_will_remain_connected">Todos los miembros del grupo permanecerán conectados.</string>
<string name="allow_irreversible_message_deletion_only_if">Permitir el borrado irreversible de mensajes sólo si su contacto se lo permite.</string>
<string name="keychain_allows_to_receive_ntfs">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.</string>
<string name="allow_irreversible_message_deletion_only_if">Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore se usará para almacenar de forma segura la frase de contraseña después de reiniciar la aplicación o cambiar la frase de contraseña - permitirá recibir notificaciones.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Permitir a tus contactos enviar mensajes que desaparecen.</string>
<string name="allow_your_contacts_to_send_voice_messages">Permitir a tus contactos enviar mensajes de voz.</string>
<string name="chat_preferences_always">siempre</string>
<string name="notifications_mode_off_desc">La aplicación sólo puede recibir notificaciones cuando se está ejecutando, no se iniciará ningún servicio en segundo plano.</string>
<string name="settings_section_title_icon">ICONO DE LA APLICACIÓN</string>
<string name="incognito_random_profile_from_contact_description">Se enviará un perfil aleatorio al contacto del que recibió este enlace</string>
<string name="turning_off_service_and_periodic">La optimización de la batería está activa, desactivando el servicio en segundo plano y las solicitudes periódicas de nuevos mensajes. Puedes volver a activarlos a través de los ajustes.</string>
<string name="turning_off_service_and_periodic">La optimización de la batería está activa, desactivando el servicio en segundo plano y las solicitudes periódicas de nuevos mensajes. Puedes volver a activarlos en Configuración.</string>
<string name="notifications_mode_service_desc">El servicio en segundo plano está siempre en funcionamiento las notificaciones se mostrarán en cuanto los mensajes estén disponibles.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Se puede desactivar a través de los ajustes</b> las notificaciones se seguirán mostrando mientras la app esté en funcionamiento.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Se puede desactivar en Configuración</b> las notificaciones se seguirán mostrando mientras la app esté en funcionamiento.</string>
<string name="notifications_mode_service">Siempre activo</string>
<string name="allow_verb">Permitir</string>
<string name="above_then_preposition_continuation">arriba, entonces:</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Añadir nuevo contacto</b>: para crear tu código QR de un solo uso para tu contacto.</string>
<string name="accept_connection_request__question">¿Conectar mediante enlace de contacto\?</string>
<string name="accept_connection_request__question">¿Aceptar solicitud de conexión\?</string>
<string name="accept_contact_incognito_button">Aceptar incógnito</string>
<string name="clear_chat_warning">Se borrarán todos los mensajes - ¡esto no se puede deshacer! Los mensajes se borrarán SOLO para ti.</string>
<string name="clear_chat_warning">Se eliminarán todos los mensajes SOLO para tí. ¡No puede deshacerse!</string>
<string name="smp_servers_add">Añadir servidor…</string>
<string name="network_enable_socks_info">¿Acceder a los servidores a través del proxy SOCKS en el puerto 9050\? El proxy debe iniciarse antes de activar esta opción.</string>
<string name="all_your_contacts_will_remain_connected">Todos tus contactos permanecerán conectados.</string>
<string name="appearance_settings">Apariencia</string>
<string name="app_version_title">Versión de la aplicación</string>
<string name="network_session_mode_user_description">Se utilizará una conexión TCP independiente (y una credencial SOCKS) <b>para cada perfil de chat que tengas en la aplicación</b>.</string>
<string name="network_session_mode_entity_description">Se utilizará una conexión TCP independiente (y una credencial SOCKS) <b>para cada contacto y miembro del grupo</b>.
<string name="app_version_title">Versión</string>
<string name="network_session_mode_user_description">Se usará una conexión TCP independiente (y una credencial SOCKS) <b>para cada perfil de chat que tengas en la aplicación</b>.</string>
<string name="network_session_mode_entity_description">Se usará una conexión TCP independiente (y una credencial SOCKS) <b>para cada contacto y miembro del grupo</b>.
\n<b>Ten en cuenta</b>: si tienes muchas conexiones, tu consumo de batería y tráfico puede ser sustancialmente mayor y algunas conexiones pueden fallar.</string>
<string name="a_plus_b">a + b</string>
<string name="about_simplex">Sobre SimpleX</string>
<string name="about_simplex">Acerca de SimpleX</string>
<string name="bold">negrita</string>
<string name="callstatus_accepted">llamada aceptada</string>
<string name="accept">Aceptar</string>
@ -52,26 +52,26 @@
<string name="icon_descr_audio_on">Audio activado</string>
<string name="integrity_msg_bad_id">ID de mensaje erróneo</string>
<string name="auto_accept_images">Aceptar automáticamente imágenes</string>
<string name="users_delete_all_chats_deleted">Se borrarán todos los chats y mensajes - ¡esto no se puede deshacer!</string>
<string name="users_delete_all_chats_deleted">Se eliminarán todos los chats y mensajes. ¡No puede deshacerse!</string>
<string name="accept_feature">Aceptar</string>
<string name="allow_to_send_disappearing">Permitir enviar mensajes que desaparecen.</string>
<string name="allow_to_send_disappearing">Permitir enviar mensajes temporales.</string>
<string name="keychain_is_storing_securely">Android Keystore se utiliza para almacenar de forma segura la frase de contraseña - permite que el servicio de notificación funcione.</string>
<string name="users_add">Añadir perfil</string>
<string name="incognito_random_profile_description">Se enviará un perfil aleatorio a tu contacto</string>
<string name="color_primary">Acento</string>
<string name="allow_your_contacts_irreversibly_delete">Permitir a tus contactos borrar irreversiblemente los mensajes enviados.</string>
<string name="allow_voice_messages_only_if">Permitir mensajes de voz sólo si tu contacto lo permite.</string>
<string name="allow_your_contacts_irreversibly_delete">Permitir a tus contactos eliminar irreversiblemente los mensajes enviados.</string>
<string name="allow_voice_messages_only_if">Permitir mensajes de voz sólo si tu contacto los permite.</string>
<string name="allow_direct_messages">Permitir el envío de mensajes directos a los miembros.</string>
<string name="allow_to_delete_messages">Permitir borrar irreversiblemente los mensajes enviados.</string>
<string name="allow_to_delete_messages">Permitir la eliminación irreversible de los mensajes enviados.</string>
<string name="allow_to_send_voice">Permitir enviar mensajes de voz.</string>
<string name="v4_2_group_links_desc">Los administradores pueden crear los enlaces para unirse a los grupos.</string>
<string name="v4_2_auto_accept_contact_requests">Aceptar automáticamente solicitudes de contacto</string>
<string name="v4_2_auto_accept_contact_requests">Aceptar automáticamente solicitudes del contacto</string>
<string name="attach">Adjuntar</string>
<string name="integrity_msg_bad_hash">hash de mensaje erróneo</string>
<string name="answer_call">Responder llamada</string>
<string name="group_member_role_admin">admin</string>
<string name="group_member_role_admin">administrador</string>
<string name="allow_voice_messages_question">¿Permitir mensajes de voz\?</string>
<string name="back">Atrás</string>
<string name="back">Volver</string>
<string name="about_simplex_chat">Sobre <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="smp_servers_add_to_another_device">Añadir a otro dispositivo</string>
<string name="app_version_name">Versión de la aplicación: v%s</string>
@ -81,7 +81,902 @@
<string name="impossible_to_recover_passphrase"><b>Ten en cuenta</b>: NO podrás recuperar o cambiar la contraseña si la pierdes.</string>
<string name="both_you_and_your_contact_can_send_voice">Tanto tú como tu contacto podéis enviar mensajes de voz.</string>
<string name="onboarding_notifications_mode_service_desc"><b>¡Usa más batería!</b> El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles.</string>
<string name="both_you_and_your_contacts_can_delete">Tanto tú como tu contacto podéis borrar de forma irreversible los mensajes enviados.</string>
<string name="both_you_and_your_contact_can_send_disappearing">Tanto tú como tu contacto podéis enviar mensajes de desaparición.</string>
<string name="both_you_and_your_contacts_can_delete">Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados.</string>
<string name="both_you_and_your_contact_can_send_disappearing">Tanto tú como tu contacto podéis enviar mensajes temporales.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Escanear código QR</b>: para conectar con tu contacto que te muestre código QR.</string>
<string name="create_profile_button">Crear</string>
<string name="create_one_time_link">Crear enlace único de invitación</string>
<string name="create_group">Crear grupo secreto</string>
<string name="database_passphrase_will_be_updated">La contraseña de cifrado de la base de datos será actualizada.</string>
<string name="info_row_database_id">ID de la base de datos</string>
<string name="direct_messages_are_prohibited_in_chat">Los mensajes directos entre miembros del grupo están prohibidos.</string>
<string name="passphrase_is_different">La contraseña es distinta a la almacenada en Keystore</string>
<string name="database_will_be_encrypted_and_passphrase_stored">La base de datos será cifrada y la contraseña se guardará en Keystore.</string>
<string name="delete_contact_question">¿Eliminar contacto\?</string>
<string name="delete_message__question">Eliminar mensaje\?</string>
<string name="delete_chat_profile_question">¿Eliminar el perfil de chat\?</string>
<string name="rcv_group_event_group_deleted">grupo eliminado</string>
<string name="delete_group_question">¿Eliminar grupo\?</string>
<string name="delete_messages_after">Eliminar mensaje después</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Autenticación de dispositivo desactivada. Puedes habilitar SimpleX Lock en Configuración, después de activar la autenticación de dispositivo.</string>
<string name="no_call_on_lock_screen">Desactivar</string>
<string name="disappearing_prohibited_in_this_chat">Los mensajes temporales están prohibidos en este chat.</string>
<string name="disappearing_messages_are_prohibited">Los mensajes temporales están prohibidos en este grupo.</string>
<string name="display_name_cannot_contain_whitespace">El nombre mostrado no puede contener espacios en blanco.</string>
<string name="encrypted_video_call">Videollamada con cifrado e2e</string>
<string name="display_name_connection_established">conexión establecida</string>
<string name="simplex_link_mode_description">Descripción</string>
<string name="smp_server_test_connect">Conectar</string>
<string name="notification_contact_connected">Conectado</string>
<string name="auth_disable_simplex_lock">Desactivar SimpleX Lock</string>
<string name="auth_device_authentication_is_disabled_turning_off">Autenticación de dispositivo desactivada. SimpleX Lock deshabilitado.</string>
<string name="maximum_supported_file_size">El tamaño máximo de archivo admitido es <xliff:g id="maxFileSize">%1$s</xliff:g></string>
<string name="clear_verification">Eliminar verificación</string>
<string name="create_profile">Crear perfil</string>
<string name="encrypted_audio_call">llamada con cifrado e2e</string>
<string name="status_e2e_encrypted">Cifrado e2e</string>
<string name="integrity_msg_duplicate">mensaje duplicado</string>
<string name="settings_section_title_develop">DESARROLLO</string>
<string name="settings_developer_tools">Herramientas desarrollo</string>
<string name="delete_files_and_media_for_all_users">Eliminar archivos para todos los perfiles de chat</string>
<string name="delete_messages">Eliminar mensaje</string>
<string name="database_encrypted">¡Base de datos cifrada!</string>
<string name="encrypted_with_random_passphrase">La base de datos está cifrada con una contraseña aleatoria, puedes cambiarla.</string>
<string name="database_error">Error en base de datos</string>
<string name="database_passphrase_is_required">Para abrir la aplicación se requiere la contraseña de la base de datos</string>
<string name="rcv_group_event_member_connected">conectado</string>
<string name="button_create_group_link">Crear enlace</string>
<string name="delete_link_question">¿Eliminar enlace\?</string>
<string name="timed_messages">Mensajes temporales</string>
<string name="direct_messages">Mensajes directos</string>
<string name="ttl_m">%dm</string>
<string name="ttl_month">%d mes</string>
<string name="ttl_months">%d meses</string>
<string name="ttl_mth">%dmes</string>
<string name="ttl_h">%dh</string>
<string name="ttl_hours">%d horas</string>
<string name="ttl_week">%d semana</string>
<string name="ttl_weeks">%d semanas</string>
<string name="v4_4_disappearing_messages">Mensajes temporales</string>
<string name="auth_confirm_credential">Canfirma tus credenciales</string>
<string name="group_member_status_introduced">conectando (presentado)</string>
<string name="group_member_status_intro_invitation">conectando (invitación de presentación )</string>
<string name="group_member_status_accepted">conectando (aceptado)</string>
<string name="group_member_status_announced">conectando (anunciado)</string>
<string name="connection_local_display_name">conexión&lt;xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"connection ID\" example=\"1\"&gt;</string>
<string name="connect_via_link_or_qr">Conectar mediante enlace / Código QR</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">El contacto y todos los mensajes serán eliminados. ¡No puede deshacerse!</string>
<string name="icon_descr_contact_checked">Contacto verificado</string>
<string name="status_contact_has_e2e_encryption">El contacto dispone de cifrado e2e</string>
<string name="smp_server_test_disconnect">Desconectar</string>
<string name="notification_preview_mode_contact">Nombre del contacto</string>
<string name="copy_verb">Copiar</string>
<string name="create_your_profile">Crear tu perfil</string>
<string name="always_use_relay">Conectar mediante relay</string>
<string name="set_password_to_export_desc">La base de datos está cifrada con una contraseña aleatoria. Cámbiala antes de exportar.</string>
<string name="total_files_count_and_size">%d archivo(s) con tamaño total de %s</string>
<string name="enable_automatic_deletion_question">¿Activar eliminación automática de mensajes\?</string>
<string name="contact_preferences">Preferencias de contacto</string>
<string name="ttl_s">%ds</string>
<string name="delete_after">Eliminar después</string>
<string name="ttl_sec">%d seg</string>
<string name="contact_already_exists">El contácto ya existe</string>
<string name="connection_error_auth">Error de conexión (Autenticación)</string>
<string name="for_me_only">Eliminar para mí</string>
<string name="icon_descr_server_status_disconnected">Desconectado</string>
<string name="icon_descr_server_status_connected">Conectado</string>
<string name="copied">Copiado en portapapeles</string>
<string name="share_one_time_link">Crear enlace único de invitación</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 PC: escanéa el código QR desde la app mediante <b>Escanéo de código QR </b></string>
<string name="delete_contact_menu_action">Eliminar</string>
<string name="delete_group_menu_action">Eliminar</string>
<string name="alert_title_contact_connection_pending">¡El contacto aun no se ha conectado!</string>
<string name="delete_pending_connection__question">¿Eliminar conexion pendiente\?</string>
<string name="icon_descr_close_button">Botón cerrar</string>
<string name="connection_request_sent">¡Solicitud de conexión enviada!</string>
<string name="network_session_mode_entity">Conexión</string>
<string name="callstatus_connecting">conectando llamada…</string>
<string name="allow_accepting_calls_from_lock_screen">Activar llamadas desde la pantalla de bloqueo en Configuración</string>
<string name="database_encryption_will_be_updated">La contraseña de cifrado de la base de datos será actualizada y almacenada en Keystore.</string>
<string name="group_member_status_connecting">conectando</string>
<string name="group_member_status_creator">creador</string>
<string name="ttl_min">%d min</string>
<string name="connection_timeout">Tiempo de conexión expirado</string>
<string name="failed_to_create_user_duplicate_title">¡Nombre mostrado duplicado!</string>
<string name="connection_error">Error de conexión</string>
<string name="smp_server_test_create_queue">Crear cola</string>
<string name="smp_server_test_delete_queue">Eliminar cola</string>
<string name="notification_preview_somebody">Contacto oculto:</string>
<string name="delete_verb">Eliminar</string>
<string name="edit_verb">Editar</string>
<string name="delete_member_message__question">¿Eliminar el mensaje de miembro\?</string>
<string name="icon_descr_edited">editado</string>
<string name="image_decoding_exception_title">Error de decodificación</string>
<string name="create_address">Crear dirección</string>
<string name="delete_address">Eliminar dirección</string>
<string name="delete_address__question">¿Eliminar la dirección\?</string>
<string name="display_name__field">Nombre mostrado:</string>
<string name="callstate_connecting">conectando…</string>
<string name="decentralized">Descentralizado</string>
<string name="database_will_be_encrypted">La base de datos será cifrada.</string>
<string name="delete_chat_archive_question">¿Eliminar archivo del chat\?</string>
<string name="create_group_link">Crear enlace de grupo</string>
<string name="delete_link">Eliminar enlace</string>
<string name="users_delete_question">¿Eliminar el perfil de chat\?</string>
<string name="ttl_hour">%d hora</string>
<string name="ttl_day">%d día</string>
<string name="v4_5_multiple_chat_profiles_descr">Nombre y avatar diferentes, aislamiento de transporte.</string>
<string name="button_delete_contact">Eliminar contacto</string>
<string name="smp_servers_delete_server">Eliminar servidor</string>
<string name="display_name">Nombre Mostrado</string>
<string name="callstate_connected">conectado</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="database_passphrase">Contraseña base de datos</string>
<string name="delete_database">Eliminar base de datos</string>
<string name="delete_files_and_media_all">Eliminar todos los archivos</string>
<string name="current_passphrase">Contraseña actual…</string>
<string name="button_delete_group">Eliminar grupo</string>
<string name="button_edit_group_profile">Editar perfil de grupo</string>
<string name="info_row_connection">Conexión</string>
<string name="users_delete_profile_for">Eliminar el perfil de chat para</string>
<string name="theme_dark">Oscuro</string>
<string name="ttl_d">%dd</string>
<string name="ttl_days">%d días</string>
<string name="delete_files_and_media_question">¿Eliminar archivos y multimedia\?</string>
<string name="archive_created_on_ts">Creado: <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="delete_archive">Eliminar archivo</string>
<string name="group_member_status_connected">conectado</string>
<string name="conn_level_desc_direct">directo</string>
<string name="chat_preferences_contact_allows">El contacto permite</string>
<string name="chat_preferences_default">predefinido (%s)</string>
<string name="full_deletion">Eliminar para todos</string>
<string name="feature_enabled">activado</string>
<string name="contacts_can_mark_messages_for_deletion">El contacto puede marcar los mensajes para eliminar; tu podrás verlos.</string>
<string name="ttl_w">%ds</string>
<string name="deleted_description">eliminado</string>
<string name="connect_via_contact_link">¿Conectar mediante enlace de contacto\?</string>
<string name="connect_via_group_link">¿Conectar mediante enlace de grupo\?</string>
<string name="connect_via_invitation_link">¿Conectar mediante enlace de invitación\?</string>
<string name="connect_via_link_verb">Conectar</string>
<string name="server_connected">conectado</string>
<string name="server_connecting">conectando</string>
<string name="display_name_connecting">conectando…</string>
<string name="contact_connection_pending">conectando…</string>
<string name="group_connection_pending">conectando…</string>
<string name="icon_descr_context">Icono contextual</string>
<string name="status_contact_has_no_e2e_encryption">El contacto no dispone de cifrado e2e</string>
<string name="icon_descr_call_connecting">Conectando llamada</string>
<string name="create_secret_group_title">Crear grupo secreto</string>
<string name="icon_descr_email">Email</string>
<string name="connect_button">Conectar</string>
<string name="connect_via_link">Conectar mediante enlace</string>
<string name="database_passphrase_and_export">Contraseña y exportar la base de datos</string>
<string name="contribute">Contribuye</string>
<string name="core_build_timestamp">Core compilado: %s</string>
<string name="core_version">Core versión: v%s</string>
<string name="contact_requests">Solicitud del contacto</string>
<string name="delete_image">Eliminar imagen</string>
<string name="edit_image">Editar imagen</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="change_verb">Cambiar</string>
<string name="notifications_mode_periodic_desc">Comprueba mensajes nuevos de hasta un minuto cada 10 minutos</string>
<string name="clear_contacts_selection_button">Limpiar</string>
<string name="change_member_role_question">¿Cambiar rol de grupo\?</string>
<string name="v4_4_verify_connection_security_desc">Compara los códigos de seguridad con tus contactos</string>
<string name="choose_file">Elije archivo</string>
<string name="clear_verb">Limpiar</string>
<string name="clear_chat_button">Limpiar chat</string>
<string name="configure_ICE_servers">Configurar servidores ICE</string>
<string name="callstatus_ended">Llamada terminada <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="callstatus_error">error en la llamada</string>
<string name="callstatus_calling">llamando</string>
<string name="callstatus_in_progress">llamada en curso</string>
<string name="colored">coloreado</string>
<string name="rcv_group_event_changed_your_role">su rol a cambiado a %s</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">cambiando dirección por %s</string>
<string name="group_member_status_complete">completado</string>
<string name="invite_prohibited">¡No se puede invitar el contacto!</string>
<string name="cannot_receive_file">No se puede recibir el archivo</string>
<string name="database_initialization_error_title">No se puede iniciar la base de datos</string>
<string name="clear_chat_question">Limpiar chat\?</string>
<string name="network_session_mode_user">Perfil de Chat</string>
<string name="chat_is_stopped_indication">El chat está detenido</string>
<string name="rcv_group_event_changed_member_role">rol de %s cambiado a %s</string>
<string name="change_role">Cambiar rol</string>
<string name="v4_5_transport_isolation_descr">A través del perfil de chat (por defecto) or a través de conexión (BETA)</string>
<string name="snd_conn_event_switch_queue_phase_changing">cambiando dirección…</string>
<string name="chat_preferences">Preferencias de chat</string>
<string name="feature_cancelled_item">cancelado %s</string>
<string name="chat_is_stopped">El chat está detenido</string>
<string name="settings_section_title_calls">LLAMADAS</string>
<string name="chat_is_running">El chat está en ejecución</string>
<string name="rcv_conn_event_switch_queue_phase_changing">cambiando dirección…</string>
<string name="chat_with_developers">habla con los desarrolladores</string>
<string name="icon_descr_cancel_file_preview">Cancelar vista previa del archivo</string>
<string name="icon_descr_cancel_image_preview">Cancelar vista previa de la imagen</string>
<string name="icon_descr_call_ended">Llamada terminada</string>
<string name="icon_descr_call_progress">Llamada en curso</string>
<string name="change_database_passphrase_question">¿Cambiar contraseña de la base de datos\?</string>
<string name="cannot_access_keychain">No se puede acceder a Keystore para guardar la base de datos de contraseñas</string>
<string name="chat_archive_header">Archivo del chat</string>
<string name="chat_archive_section">ARCHIVOS DE CHAT</string>
<string name="cancel_verb">Cancelar</string>
<string name="icon_descr_cancel_live_message">Cancelar mensaje en directo</string>
<string name="confirm_verb">Confirmar</string>
<string name="clear_chat_menu_action">Limpiar</string>
<string name="app_version_code">Build de la aplicación</string>
<string name="call_already_ended">¡La llamada ha terminado!</string>
<string name="rcv_conn_event_switch_queue_phase_completed">su dirección ha cambiado para tí</string>
<string name="icon_descr_cancel_link_preview">cancelar vista previa del enlace</string>
<string name="call_on_lock_screen">Llamadas en la ventana de bloqueo</string>
<string name="alert_title_cant_invite_contacts">¡No se puede invitar a los contactos!</string>
<string name="chat_console">Consola del chat</string>
<string name="chat_database_section">BASE DE DATOS DE CHAT</string>
<string name="chat_database_deleted">Base de datos eliminada</string>
<string name="chat_database_imported">Base de datos importada</string>
<string name="smp_servers_check_address">Comprueba la dirección del servidor e inténtalo de nuevo.</string>
<string name="confirm_new_passphrase">Confirma la contraseña nueva…</string>
<string name="network_disable_socks_info">Si confirmas los servidores de mensajería podrán ver tu IP, y tu proveedor de acceso a internet a qué servidores te estás conectando.</string>
<string name="image_saved">Imagen guardada en la Galería</string>
<string name="file_will_be_received_when_contact_is_online">El archivo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="add_contact">Enlace único de invitación</string>
<string name="paste_the_link_you_received">Pegar enlace recibido</string>
<string name="error_saving_group_profile">Error guardando perfil de grupo</string>
<string name="exit_without_saving">Salir sin guardar</string>
<string name="file_saved">Archivo guardado</string>
<string name="icon_descr_flip_camera">Voltear la cámara</string>
<string name="group_invitation_expired">Invitación de grupo caducada</string>
<string name="alert_message_group_invitation_expired">La invitación al grupo ya no es válida, ha sido eliminada por el remitente.</string>
<string name="delete_group_for_self_cannot_undo_warning">El grupo se eliminará para tí. ¡No puede deshacerse!</string>
<string name="how_to_use_markdown">Cómo usar el marcador</string>
<string name="description_via_one_time_link_incognito">Incógnito mediante enlace único</string>
<string name="simplex_link_contact">Dirección de contacto SimpleX</string>
<string name="error_saving_smp_servers">Error guardando servidores SMP</string>
<string name="simplex_link_mode_browser_warning">Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo.</string>
<string name="error_setting_network_config">Error al actualizar la configuración de red</string>
<string name="error_creating_address">Error creando dirección</string>
<string name="error_deleting_user">Error eliminando perfil de usuario</string>
<string name="auth_enable_simplex_lock">Activar SimpleX Lock</string>
<string name="one_time_link">Enlace único de invitación</string>
<string name="smp_servers">Servidores SMP</string>
<string name="settings_experimental_features">Características experimentales</string>
<string name="error_importing_database">Error importando la base de datos</string>
<string name="error_changing_message_deletion">Error cambiando configuración</string>
<string name="file_with_path">Archivo: %s</string>
<string name="failed_to_active_user_title">¡Error cambiando perfil!</string>
<string name="smp_servers_enter_manually">Introduce el servidor manualmente</string>
<string name="how_to_use_your_servers">Cómo usar tus servidores</string>
<string name="error_stopping_chat">Error deteniendo el chat</string>
<string name="enter_correct_passphrase">Introduce la contraseña correcta.</string>
<string name="enter_passphrase">Introduce la contraseña…</string>
<string name="icon_descr_group_inactive">Grupo inactivo</string>
<string name="group_member_status_group_deleted">grupo eliminado</string>
<string name="group_members_can_send_disappearing">Los miembros del grupo pueden enviar mensajes temporales.</string>
<string name="v4_2_group_links">Enlaces de grupo</string>
<string name="invalid_connection_link">Enlace de conexión no válido</string>
<string name="error_accepting_contact_request">Error aceptando la solicitud del contacto</string>
<string name="error_changing_address">Error cambiando la dirección</string>
<string name="error_saving_file">Error al guardar archivo</string>
<string name="icon_descr_server_status_error">Error</string>
<string name="from_gallery_button">De la Galería</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Si has recibido el enlace de invitación a <xliff:g id="appName">SimpleX Chat</xliff:g>, puedes abrirlo en tu navegador:</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Si eliges rechazar, el remitente NO será notificado.</string>
<string name="invalid_contact_link">¡Enlace no válido!</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Si no puedes reunirte en persona, puedes <b>escanear el código QR en la videollamada</b>, o tu contacto puede compartir un enlace de invitación.</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Si no puedes reunirte en persona, <b>muestra el código QR en la videollamada</b>, o comparte el enlace.</string>
<string name="how_to">Cómo</string>
<string name="ignore">Ignorar</string>
<string name="error_deleting_database">Error eliminando la base de datos</string>
<string name="encrypted_database">Base de datos cifrada</string>
<string name="error_removing_member">Error eliminando miembro</string>
<string name="group_members_can_send_voice">Los miembros del grupo pueden mandar mensajes de voz.</string>
<string name="description_via_contact_address_link_incognito">Incógnito mediante enlace de dirección del contacto</string>
<string name="failed_to_create_user_title">Error creando perfil!</string>
<string name="failed_to_parse_chat_title">No se pudo cargar el chat</string>
<string name="failed_to_parse_chats_title">No se pudieron cargar los chats</string>
<string name="simplex_link_mode_full">Enlace completo</string>
<string name="error_deleting_contact">Error eliminando contacto</string>
<string name="error_joining_group">Error uniéndose al grupo</string>
<string name="error_receiving_file">Error recibiendo archivo</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Comprueba que has usado el enlace correcto o pide a tu contacto que te envíe otro.</string>
<string name="error_deleting_contact_request">Error eliminando la solicitud de contacto</string>
<string name="error_deleting_group">Error al eliminar grupo</string>
<string name="error_deleting_pending_contact_connection">Error al eliminar conexión de contacto pendiente</string>
<string name="hide_notification">Ocultar</string>
<string name="notification_preview_mode_hidden">Oculto</string>
<string name="notification_display_mode_hidden_desc">Ocultar contacto y mensaje</string>
<string name="hide_verb">Ocultar</string>
<string name="for_everybody">Para todos</string>
<string name="icon_descr_file">Archivo</string>
<string name="icon_descr_image_snd_complete">Imagen enviada</string>
<string name="image_will_be_received_when_contact_is_online">La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="image_descr_link_preview">vista previa del enlace</string>
<string name="error_saving_ICE_servers">Error guardando servidores ICE</string>
<string name="enter_one_ICE_server_per_line">Servidores ICE (uno por línea)</string>
<string name="full_name__field">Nombre completo:</string>
<string name="people_can_connect_only_via_links_you_share">Las personas pueden conectarse contigo solo mediante los enlaces que compartes.</string>
<string name="how_simplex_works">Cómo funciona <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="icon_descr_hang_up">Colgar</string>
<string name="files_and_media_section">Archivo y multimedia</string>
<string name="alert_title_no_group">¡Grupo no encontrado!</string>
<string name="snd_group_event_group_profile_updated">perfil de grupo actualizado</string>
<string name="error_creating_link_for_group">Error al crear enlace de grupo</string>
<string name="error_deleting_link_for_group">Error al eliminar enlace de grupo</string>
<string name="feature_enabled_for_contact">activado para el contacto</string>
<string name="v4_4_french_interface">Interfaz en francés</string>
<string name="image_descr">Imagen</string>
<string name="file_not_found">Archivo no encontrado</string>
<string name="how_to_use_simplex_chat">Cómo usar</string>
<string name="full_name_optional__prompt">Nombre completo (opcional)</string>
<string name="callstate_ended">finalizado</string>
<string name="settings_section_title_help">AYUDA</string>
<string name="export_database">Exportar base de datos</string>
<string name="error_exporting_chat_database">Error exportando la base de datos</string>
<string name="error_starting_chat">Error iniciando chat</string>
<string name="rcv_group_event_invited_via_your_group_link">Invitado mediante tu enlace de grupo</string>
<string name="error_updating_link_for_group">Error actualizando el enlace de grupo</string>
<string name="section_title_for_console">PARA CONSOLA</string>
<string name="error_changing_role">Error cambiando rol</string>
<string name="conn_stats_section_title_servers">SERVIDORES</string>
<string name="group_display_name_field">Nombre mostrado del grupo:</string>
<string name="group_preferences">Preferencias del grupo</string>
<string name="group_members_can_send_dms">Los miembros del grupo pueden enviar mensajes directos.</string>
<string name="group_members_can_delete">Los miembros del grupo pueden eliminar mensajes de forma irreversible.</string>
<string name="v4_3_improved_privacy_and_security_desc">Ocultar pantalla de aplicaciones en aplicaciones recientes.</string>
<string name="encrypt_database">Cifrar</string>
<string name="icon_descr_expand_role">Ampliar la selección de roles</string>
<string name="delete_group_for_all_members_cannot_undo_warning">El grupo se eliminará para todos los miembros. ¡No puede deshacerse!</string>
<string name="network_option_enable_tcp_keep_alive">Activar TCP keep-alive</string>
<string name="feature_enabled_for_you">activado para tí</string>
<string name="server_error">error</string>
<string name="description_via_group_link_incognito">Incógnito mediante enlace de grupo</string>
<string name="error_adding_members">Error al añadir miembro(s)</string>
<string name="error_sending_message">Error enviando mensaje</string>
<string name="error_encrypting_database">Error cifrando la base de datos</string>
<string name="encrypt_database_question">¿Cifrar base de datos\?</string>
<string name="error_with_info">Error: %s</string>
<string name="group_link">Enlace de grupo</string>
<string name="info_row_group">Grupo</string>
<string name="group_full_name_field">Nombre completo del grupo:</string>
<string name="group_profile_is_stored_on_members_devices">El perfil de grupo se almacena en los dispositivos, no en los servidores.</string>
<string name="icon_descr_help">ayuda</string>
<string name="paste_connection_link_below_to_connect">Pega el enlace que has recibido en el recuadro para conectar con tu contacto.</string>
<string name="share_link">Compartir enlace</string>
<string name="how_it_works">Cómo funciona</string>
<string name="delete_message_cannot_be_undone_warning">El mensaje se eliminará. ¡No puede deshacerse!</string>
<string name="incognito_info_protects">El modo incógnito protege la identidad del perfil principal, por cada contacto nuevo se genera un perfil nuevo aleatorio.</string>
<string name="turn_off_battery_optimization">Para poder usarse <b>deshabilita la optimización de batería</b> para <xliff:g id="appName">SimpleX</xliff:g> en el siguiente cuadro de diálogo. De lo contrario las notificaciones estarán desactivadas.</string>
<string name="install_simplex_chat_for_terminal">Instalar <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para terminal</string>
<string name="group_invitation_item_description">invitación al grupo <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="rcv_group_event_member_added">invitado <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="incognito_info_allows">Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat.</string>
<string name="invite_to_group_button">Invitar al grupo</string>
<string name="to_verify_compare">Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos.</string>
<string name="database_is_not_encrypted">La base de datos no está cifrada. Establece una contraseña para protegerla.</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas.</string>
<string name="icon_descr_instant_notifications">Notificación instantánea</string>
<string name="network_settings_title">Configuración de red</string>
<string name="network_use_onion_hosts_no_desc_in_alert">No se usarán hosts .onion</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con <b>cifrado de extremo a extremo de 2 capas</b> .</string>
<string name="onboarding_notifications_mode_subtitle">Puede cambiarse más tarde en Configuración.</string>
<string name="onboarding_notifications_mode_service">Instantánea</string>
<string name="join_group_button">Únete</string>
<string name="join_group_incognito_button">Únete en modo incógnito</string>
<string name="conn_level_desc_indirect">indirecto (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="theme_light">Claro</string>
<string name="chat_preferences_on">Activado</string>
<string name="message_deletion_prohibited">La eliminación irreversible de mensajes está prohibida en este chat.</string>
<string name="message_deletion_prohibited_in_chat">La eliminación irreversible de mensajes está prohibida en este grupo.</string>
<string name="v4_3_improved_server_configuration">Configuración del servidor mejorada</string>
<string name="alert_text_skipped_messages_it_can_happen_when">Esto puede suceder cuando:
\n1. Los mensajes caducan en el servidor si no se han recibido durante 30 días.
\n2. El servidor que utiliza para recibir los mensajes de este contacto fue actualizado y reiniciado.
\n3. La conexión está comprometida.
\nPor favor, contacta con los desarrolladores a través del menú Configuración para recibir actualizaciones sobre los servidores.
\nAñadiremos redundancia de servidores para evitar la pérdida de mensajes.</string>
<string name="notification_preview_mode_message">Texto del mensaje</string>
<string name="member_info_section_title_member">MIEMBRO</string>
<string name="chat_item_ttl_none">nunca</string>
<string name="network_use_onion_hosts_required_desc_in_alert">Se requieren hosts .onion para la conexión</string>
<string name="network_use_onion_hosts_no_desc">No se usarán hosts .onion</string>
<string name="settings_notification_preview_title">Vista previa de notificación</string>
<string name="alert_title_group_invitation_expired">¡Invitación caducada!</string>
<string name="group_member_status_left">ha salido</string>
<string name="v4_4_live_messages">Mensajes en vivo</string>
<string name="service_notifications">Notificación instantánea</string>
<string name="settings_notifications_mode_title">Servicio de notificaciones</string>
<string name="delete_message_mark_deleted_warning">El mensaje se marcará para eliminar. El destinatario o destinatarios podrán revelar este mensaje.</string>
<string name="live_message">¡Mensaje en vivo!</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 móvil: pulse <b>Abrir en aplicación móvil</b>, después pulse <b>Conectar</b> en la aplicación.</string>
<string name="mark_read">Marcar como leído</string>
<string name="mark_unread">Marcar como no leído</string>
<string name="invalid_QR_code">Código QR inválido</string>
<string name="incorrect_code">¡Código de seguridad incorrecto!</string>
<string name="markdown_in_messages">Marcadores en mensajes</string>
<string name="network_use_onion_hosts_no">No</string>
<string name="callstatus_missed">llamada perdida</string>
<string name="import_database_confirmation">Importar</string>
<string name="snd_group_event_changed_role_for_yourself">has cambiado tu rol a %s</string>
<string name="button_add_members">Invitar miembros</string>
<string name="no_contacts_selected">Ningún contacto seleccionado</string>
<string name="feature_offered_item">ofrecido %s</string>
<string name="feature_offered_item_with_param">ofrecido %s: %2s</string>
<string name="moderated_item_description">moderado por %s</string>
<string name="invalid_chat">chat no válido</string>
<string name="invalid_data">datos no válidos</string>
<string name="invalid_message_format">formato de mensaje no válido</string>
<string name="live">EN VIVO</string>
<string name="moderated_description">moderado</string>
<string name="display_name_invited_to_connect">invitado a conectarse</string>
<string name="service_notifications_disabled">¡Las notificaciones instantáneas están desactivadas!</string>
<string name="notification_preview_new_message">mensaje nuevo</string>
<string name="notification_new_contact_request">Nueva solicitud de contacto</string>
<string name="auth_log_in_using_credential">Inicie sesión con sus credenciales</string>
<string name="message_delivery_error_title">Error en la entrega del mensaje</string>
<string name="message_delivery_error_desc">Lo más probable es que este contacto haya eliminado la conexión contigo.</string>
<string name="moderate_verb">Moderar</string>
<string name="group_preview_join_as">unirse como %s</string>
<string name="images_limit_desc">Sólo se pueden enviar 10 imágenes al mismo tiempo</string>
<string name="large_file">¡Archivo grande!</string>
<string name="mute_chat">Silenciar</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas.</string>
<string name="network_use_onion_hosts_required_desc">Se requieren hosts .onion para la conexión</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Se usarán hosts .onion cuando estén disponibles.</string>
<string name="immune_to_spam_and_abuse">Inmune a spam y abuso</string>
<string name="many_people_asked_how_can_it_deliver">Muchos se preguntarán: <i>si <xliff:g id="appName">SimpleX</xliff:g> no tiene identificadores de usuario, ¿cómo puede entregar los mensajes\?</i></string>
<string name="incoming_video_call">Videollamada entrante</string>
<string name="snd_group_event_user_left">has salido</string>
<string name="snd_conn_event_switch_queue_phase_completed">has cambiado la dirección</string>
<string name="feature_off">apagado</string>
<string name="v4_3_irreversible_message_deletion">Eliminación del mensaje irreversible</string>
<string name="v4_3_voice_messages_desc">Máximo 40 segundos, recibido al instante.</string>
<string name="v4_5_italian_interface">Interfaz en italiano</string>
<string name="v4_5_message_draft">Borrador de mensaje</string>
<string name="v4_5_reduced_battery_usage_descr">¡Pronto habrá más mejoras!</string>
<string name="v4_5_multiple_chat_profiles">Múltiples perfiles de chat</string>
<string name="notifications">Notificaciones</string>
<string name="no_details">sin detalles</string>
<string name="ok">OK</string>
<string name="only_stored_on_members_devices">(sólo almacenado por miembros del grupo)</string>
<string name="markdown_help">Ayuda marcadores</string>
<string name="network_and_servers">Redes y servidores</string>
<string name="network_use_onion_hosts_prefer_desc">Se usarán hosts .onion cuando estén disponibles.</string>
<string name="italic">cursiva</string>
<string name="incoming_audio_call">Llamada entrante</string>
<string name="video_call_no_encryption">videollamada (sin cifrado e2e)</string>
<string name="status_no_e2e_encryption">sin cifrado e2e</string>
<string name="import_database">Importar base de datos</string>
<string name="settings_section_title_messages">MENSAJES</string>
<string name="import_database_question">¿Importar base de datos\?</string>
<string name="no_received_app_files">Sin archivos recibidos o enviados</string>
<string name="messages_section_title">Mensajes</string>
<string name="new_passphrase">Contraseña nueva…</string>
<string name="join_group_question">¿Unirse al grupo\?</string>
<string name="joining_group">Únete al grupo</string>
<string name="keychain_error">Error en Keystore</string>
<string name="icon_descr_add_members">Invitar miembros</string>
<string name="group_member_role_observer">observador</string>
<string name="group_member_role_member">miembro</string>
<string name="group_member_status_removed">eliminado</string>
<string name="group_member_status_invited">invitado</string>
<string name="no_contacts_to_add">Sin contactos que añadir</string>
<string name="new_member_role">Nuevo rol de miembro</string>
<string name="initial_member_role">Rol inicial</string>
<string name="info_row_local_name">Nombre local</string>
<string name="network_status">Estado de la red</string>
<string name="incognito">Incógnito</string>
<string name="chat_preferences_off">apagado</string>
<string name="new_in_version">Nuevo en %s</string>
<string name="v4_3_improved_privacy_and_security">Seguridad y privacidad mejoradas</string>
<string name="settings_section_title_incognito">Modo incógnito</string>
<string name="new_database_archive">Nuevo archivo de base de datos</string>
<string name="old_database_archive">Archivo de base de datos antiguo</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">has cambiado la dirección por %s</string>
<string name="rcv_group_event_member_left">ha salido</string>
<string name="button_leave_group">Salir del grupo</string>
<string name="only_group_owners_can_change_prefs">Sólo los propietarios del grupo pueden cambiar las preferencias de grupo.</string>
<string name="users_delete_data_only">Sólo datos del perfil local</string>
<string name="chat_preferences_no">no</string>
<string name="thousand_abbreviation">k</string>
<string name="marked_deleted_description">marcado eliminado</string>
<string name="icon_descr_call_missed">Llamada perdida</string>
<string name="notifications_will_be_hidden">¡Las notificaciones seguirán enviándose hasta que la aplicación se detenga!</string>
<string name="leave_group_button">Salir</string>
<string name="leave_group_question">¿Salir del grupo\?</string>
<string name="group_member_role_owner">propietario</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">El miembro será eliminado del grupo. ¡No puede deshacerse!</string>
<string name="only_group_owners_can_enable_voice">Sólo los propietarios del grupo pueden activar los mensajes de voz.</string>
<string name="group_unsupported_incognito_main_profile_sent">El modo incógnito no se admite aquí, tu perfil principal aparecerá en miembros del grupo</string>
<string name="icon_descr_more_button">Más</string>
<string name="mark_code_verified">Marcar como verificado</string>
<string name="smp_servers_invalid_address">¡Dirección de servidor no válida!</string>
<string name="make_private_connection">Establecer una conexión privada</string>
<string name="network_error_desc">Comprueba su conexión de red con <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> e inténtelo de nuevo.</string>
<string name="sender_may_have_deleted_the_connection_request">El remitente puede haber eliminado la solicitud de conexión.</string>
<string name="error_smp_test_certificate">Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta</string>
<string name="reply_verb">Responder</string>
<string name="save_passphrase_in_keychain">Guardar contraseña en Keystore</string>
<string name="database_restore_error">Error al restaurar la base de datos</string>
<string name="select_contacts">Seleccionar contactos</string>
<string name="save_group_profile">Guardar perfil de grupo</string>
<string name="reset_color">Restablecer colores</string>
<string name="only_you_can_send_disappearing">Sólo tú puedes enviar mensajes temporales</string>
<string name="only_your_contact_can_send_disappearing">Sólo tu contacto puede enviar mensajes temporales.</string>
<string name="prohibit_sending_voice">Prohibir el envío de mensajes de voz.</string>
<string name="notifications_mode_off">Se ejecuta cuando la aplicación está abierta</string>
<string name="auth_open_chat_console">Abrir la consola de chat</string>
<string name="save_verb">Guardar</string>
<string name="restore_database_alert_confirm">Restaurar</string>
<string name="network_options_save">Guardar</string>
<string name="prohibit_message_deletion">Prohibir la eliminación irreversible de mensajes.</string>
<string name="v4_4_live_messages_desc">Los destinatarios ven la actualizacion mientras escribes.</string>
<string name="icon_descr_send_message">Enviar Mensaje</string>
<string name="toast_permission_denied">¡Permiso denegado!</string>
<string name="scan_code">Escanear código</string>
<string name="saved_ICE_servers_will_be_removed">Se eliminarán los servidores WebRTC ICE guardados.</string>
<string name="callstatus_rejected">llamada rechazada</string>
<string name="secret">secreto</string>
<string name="open_simplex_chat_to_accept_call">Abrir <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para aceptar llamada</string>
<string name="network_options_reset_to_defaults">Restablecer valores por defecto</string>
<string name="save_color">Guardar color</string>
<string name="icon_descr_server_status_pending">Pendiente</string>
<string name="periodic_notifications">Notificaciones periódicas</string>
<string name="store_passphrase_securely">Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes.</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Reinicia la aplicación para crear un nuevo perfil de chat.</string>
<string name="restore_database_alert_title">¿Restaurar copia de seguridad de la base de datos\?</string>
<string name="onboarding_notifications_mode_title">Notificaciones privadas</string>
<string name="image_descr_profile_image">imagen del perfil</string>
<string name="prohibit_sending_voice_messages">Prohibir el envío de mensajes de voz.</string>
<string name="protect_app_screen">Proteger la pantalla de la aplicación</string>
<string name="read_more_in_github_with_link">Más información en nuestro <font color="#0088ff">repositorio GitHub</font> .</string>
<string name="icon_descr_record_voice_message">Grabar mensaje de voz</string>
<string name="rcv_group_event_member_deleted">eliminado <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="send_link_previews">Enviar previsualizaciones de enlaces</string>
<string name="send_live_message_desc">Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe</string>
<string name="icon_descr_sent_msg_status_send_failed">error de envío</string>
<string name="sending_via">Enviando mediante</string>
<string name="contact_developers">Actualiza la aplicación y ponte en contacto con los desarrolladores.</string>
<string name="sender_cancelled_file_transfer">El remitente ha cancelado la transferencia de archivos.</string>
<string name="smp_server_test_secure_queue">Cola segura</string>
<string name="enter_passphrase_notification_title">Se necesita contraseña</string>
<string name="periodic_notifications_disabled">Notificaciones periódicas desactivadas</string>
<string name="simplex_service_notification_text">Recibiendo mensajes…</string>
<string name="reveal_verb">Revelar</string>
<string name="icon_descr_sent_msg_status_sent">enviado</string>
<string name="reject_contact_button">Rechazar</string>
<string name="network_use_onion_hosts_required">Obligatorio</string>
<string name="save_and_notify_contacts">Guardar y notificar contactos</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Protocolo y código abiertos: cualquiera puede usar los servidores.</string>
<string name="role_in_group">Rol</string>
<string name="network_options_revert">Revertir</string>
<string name="network_option_ping_interval">Intervalo PING</string>
<string name="network_option_ping_count">Contador PING</string>
<string name="only_your_contact_can_delete">Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcar para eliminar).</string>
<string name="v4_5_message_draft_descr">Conserva el último borrador del mensaje con los datos adjuntos.</string>
<string name="v4_5_private_filenames">Nombres de archivos privados</string>
<string name="v4_5_reduced_battery_usage">Reducción del uso de la batería</string>
<string name="observer_cant_send_message_desc">Póngase en contacto con el administrador del grupo.</string>
<string name="ask_your_contact_to_enable_voice">Solicita que tu contacto habilite el envío de mensajes de voz.</string>
<string name="send_live_message">Enviar mensaje en vivo</string>
<string name="scan_QR_code">Escanear código QR</string>
<string name="send_verb">Enviar</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(escanear o pegar desde el portapapeles)</string>
<string name="icon_descr_profile_image_placeholder">Espacio reservado para la imagen del perfil</string>
<string name="image_descr_qr_code">Código QR</string>
<string name="chat_with_the_founder">Envía consultas e ideas</string>
<string name="smp_servers_preset_address">Dirección del servidor predefinida</string>
<string name="send_us_an_email">Contacta por email</string>
<string name="rate_the_app">Valora la aplicación</string>
<string name="save_servers_button">Guardar</string>
<string name="callstate_received_answer">respuesta recibida…</string>
<string name="callstate_received_confirmation">confirmación recibida…</string>
<string name="onboarding_notifications_mode_periodic">Periódico</string>
<string name="privacy_redefined">Privacidad redefinida</string>
<string name="read_more_in_github">Más información en nuestro repositorio GitHub.</string>
<string name="reject">Rechazar</string>
<string name="open_verb">Abrir</string>
<string name="icon_descr_call_pending_sent">Llamada pendiente</string>
<string name="privacy_and_security">Privacidad y seguridad</string>
<string name="store_passphrase_securely_without_recover">Guarda la contraseña de forma segura, NO podrás acceder al chat si la pierdes.</string>
<string name="save_archive">Guardar archivo</string>
<string name="restore_database_alert_desc">Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer.</string>
<string name="rcv_group_event_user_deleted">te ha eliminado</string>
<string name="receiving_via">Recibiendo mediante</string>
<string name="network_option_protocol_timeout">Tiempo de espera del protocolo</string>
<string name="network_option_seconds_label">seg</string>
<string name="users_delete_with_connections">Perfil y conexiones de servidor</string>
<string name="prohibit_sending_disappearing_messages">Prohibir el envío de mensajes temporales</string>
<string name="only_you_can_send_voice">Sólo tú puedes enviar mensajes de voz.</string>
<string name="only_your_contact_can_send_voice">Sólo tu contacto puede enviar mensajes de voz.</string>
<string name="run_chat_section">EJECUTAR CHAT</string>
<string name="restart_the_app_to_use_imported_chat_database">Reinicia la aplicación para poder usar la base de datos importada.</string>
<string name="enter_correct_current_passphrase">Introduce la contraseña actual correcta.</string>
<string name="feature_received_prohibited">recepción prohibida</string>
<string name="only_you_can_delete_messages">Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcar para eliminar).</string>
<string name="prohibit_direct_messages">Prohibir el envío de mensajes directos a los miembros.</string>
<string name="prohibit_sending_disappearing">Prohibir el envío de mensajes temporales</string>
<string name="v4_2_security_assessment">Evaluación de la seguridad</string>
<string name="receiving_files_not_yet_supported">la recepción de archivos aún no está disponible</string>
<string name="sending_files_not_yet_supported">el envío de archivos aún no está disponible</string>
<string name="call_connection_peer_to_peer">entre particulares</string>
<string name="icon_descr_call_rejected">Llamada rechazada</string>
<string name="remove_passphrase">Eliminar</string>
<string name="remove_passphrase_from_keychain">¿Eliminar contraseña de Keystore\?</string>
<string name="open_chat">Abrir chat</string>
<string name="restore_database">Restaurar copia de seguridad de la base de datos</string>
<string name="save_passphrase_and_open_chat">Guardar contraseña y abrir el chat</string>
<string name="restore_passphrase_not_found_desc">La contraseña no se ha encontrado en Keystore, introdúzcala manualmente. Esto puede haber ocurrido si has restaurado los datos de la aplicación con una herramienta de copia de seguridad. Si no es así, ponte en contacto con los desarrolladores.</string>
<string name="remove_member_confirmation">Eliminar</string>
<string name="button_remove_member">Eliminar miembro</string>
<string name="button_send_direct_message">Enviar mensaje directo</string>
<string name="reset_verb">Restablecer</string>
<string name="paste_button">Pegar</string>
<string name="security_code">Código de seguridad</string>
<string name="scan_code_from_contacts_app">Escanea el código de seguridad desde la aplicación de tu contacto.</string>
<string name="smp_servers_save">Guardar servidores</string>
<string name="smp_servers_scan_qr">Escanear código QR del servidor</string>
<string name="smp_servers_preset_server">Servidor predefinido</string>
<string name="save_and_notify_contact">Guardar y notificar contacto</string>
<string name="save_preferences_question">¿Guardar preferencias\?</string>
<string name="save_and_notify_group_members">Guardar y notificar a los miembros del grupo</string>
<string name="connection_error_auth_desc">A menos que tu contacto haya eliminado la conexión o que este enlace ya se haya utilizado, podría tratarse de un error. Por favor, notifícalo.
\nPara conectarte, pide a tu contacto que cree otro enlace de conexión y comprueba que tienes buena conexión de red.</string>
<string name="periodic_notifications_desc">La aplicación recoge nuevos mensajes periódicamente por lo que utiliza un pequeño porcentaje de la batería al día. La aplicación no hace uso de notificaciones automáticas: los datos de tu dispositivo no se envían a los servidores.</string>
<string name="la_notice_title_simplex_lock">Bloqueo SimpleX</string>
<string name="auth_unlock">Desbloquear</string>
<string name="this_text_is_available_in_settings">Este texto está disponible en Configuración</string>
<string name="switch_receiving_address_desc">¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo).</string>
<string name="chat_lock">Bloqueo SimpleX</string>
<string name="using_simplex_chat_servers">Usando servidores <xliff:g id="appNameFull">SimpleX Chat</xliff:g>.</string>
<string name="network_session_mode_transport_isolation">Aislamiento de transporte</string>
<string name="strikethrough">tachado</string>
<string name="use_chat">Usar Chat</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_themes">TEMAS</string>
<string name="stop_chat_confirmation">Detener</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.</string>
<string name="skip_inviting_button">Omitir invitación a miembros</string>
<string name="settings_notification_preview_mode_title">Mostrar vista previa</string>
<string name="la_notice_turn_on">Activar</string>
<string name="share_verb">Compartir</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">envío no autorizado</string>
<string name="set_contact_name">Introduce el nombre del contacto</string>
<string name="network_socks_toggle">Usar proxy SOCKS (puerto 9050)</string>
<string name="unknown_error">Error desconocido</string>
<string name="member_role_will_be_changed_with_notification">El rol cambiará a \"%s\". Se notificará a todos los miembros del grupo.</string>
<string name="v4_2_security_assessment_desc">La seguridad de SimpleX Chat fue auditada por Trail of Bits.</string>
<string name="v4_4_disappearing_messages_desc">Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido.</string>
<string name="ntf_channel_messages">Mensajes de chat SimpleX</string>
<string name="icon_descr_received_msg_status_unread">no leído</string>
<string name="text_field_set_contact_placeholder">Introduce el nombre del contacto…</string>
<string name="switch_receiving_address_question">¿Cambiar dirección de recepción\?</string>
<string name="use_camera_button">Usar cámara</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">¡El contacto con el que has compartido este enlace NO podrá conectarse!</string>
<string name="show_QR_code">Mostrar código QR</string>
<string name="this_link_is_not_a_valid_connection_link">¡El enlace no es un enlace de conexión válido!</string>
<string name="this_QR_code_is_not_a_link">¡El código QR no es un enlace!</string>
<string name="share_invitation_link">Compartir enlace de invitación</string>
<string name="update_network_session_mode_question">¿Actualizar el modo de aislamiento de transporte\?</string>
<string name="icon_descr_speaker_on">Altavoz activado</string>
<string name="stop_chat_to_enable_database_actions">Detener Chat para habilitar acciones sobre la base de datos.</string>
<string name="connection_you_accepted_will_be_cancelled">¡La conexión que has aceptado se cancelará!</string>
<string name="database_initialization_error_desc">La base de datos no funciona correctamente. Pulsa para obtener más información</string>
<string name="moderate_message_will_be_marked_warning">El mensaje será marcado como moderado para todos los miembros.</string>
<string name="next_generation_of_private_messaging">La próxima generación de mensajería privada</string>
<string name="delete_files_and_media_desc">Esta acción no se puede deshacer. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán.</string>
<string name="enable_automatic_deletion_message">Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos.</string>
<string name="messages_section_description">Esta configuración se aplica a los mensajes en su perfil actual de Chat</string>
<string name="this_string_is_not_a_connection_link">¡Esta cadena no es un enlace de conexión!</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">Para preservar tu privacidad, en lugar de notificaciones automáticas la aplicación cuenta con un <b>servicio en segundo plano<xliff:g id="appName">SimpleX</xliff:g></b>, utiliza un pequeño porcentaje de la batería al día.</string>
<string name="icon_descr_settings">Configuración</string>
<string name="icon_descr_speaker_off">Altavoz apagado</string>
<string name="add_contact_or_create_group">Inciar chat nuevo</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Detener Chat para exportar, importar o eliminar la base de datos del chat. No podrá recibir ni enviar mensajes mientras el chat esté detenido.</string>
<string name="thank_you_for_installing_simplex">Gracias por instalar <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">Para proteger la privacidad, en lugar de los identificadores de usuario que utilizan el resto de plataformas, <xliff:g id="appName">SimpleX</xliff:g> dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos.</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Para proteger tu información, activa SimpleX Lock.
\nSe te pedirá que completes la autenticación antes de activar esta función.</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">Al actualizar la configuración, el cliente se reconectará a todos los servidores.</string>
<string name="use_simplex_chat_servers__question">¿Usar servidores <xliff:g id="appNameFull">SimpleX Chat</xliff:g>\?</string>
<string name="simplex_link_group">Enlace de grupo SimpleX</string>
<string name="simplex_link_invitation">Invitación única SimpleX</string>
<string name="simplex_link_mode">Enlaces SimpleX</string>
<string name="error_smp_test_server_auth">El servidor requiere autorización para crear colas, comprueba la contraseña</string>
<string name="enter_passphrase_notification_desc">Para recibir notificaciones, introduce la contraseña de la base de datos</string>
<string name="ntf_channel_calls">Llamadas de chat SimpleX</string>
<string name="notifications_mode_periodic">Se inicia periódicamente</string>
<string name="notification_preview_mode_message_desc">Mostrar contacto y mensaje</string>
<string name="notification_preview_mode_contact_desc">Mostrar sólo contacto</string>
<string name="auth_simplex_lock_turned_on">Bloqueo SimpleX activado</string>
<string name="auth_stop_chat">Detener chat</string>
<string name="moderate_message_will_be_deleted_warning">El mensaje se eliminará para todos los miembros.</string>
<string name="share_file">Compartir archivo…</string>
<string name="images_limit_title">¡Demasiadas imágenes!</string>
<string name="image_decoding_exception_desc">La imagen no se puede decodificar. Pruebe otra imagen o pónte en contacto con los desarrolladores.</string>
<string name="network_enable_socks">¿Usa proxy SOCKS\?</string>
<string name="network_use_onion_hosts">Usar hosts .onion</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">La plataforma de mensajería y aplicaciones que protege tu privacidad y seguridad.</string>
<string name="first_platform_without_user_ids">La primera plataforma sin identificadores de usuario: diseñada para la privacidad.</string>
<string name="alert_message_no_group">Este grupo ya no existe.</string>
<string name="incognito_info_find">Para encontrar el perfil usado en una conexión en modo incógnito, pulsa el nombre del contacto o del grupo en la parte superior del chat.</string>
<string name="accept_feature_set_1_day">Establecer 1 día</string>
<string name="v4_4_french_interface_descr">Gracias a los usuarios: ¡contribuye a través de Weblate!</string>
<string name="v4_5_italian_interface_descr">Gracias a los usuarios: ¡contribuye a través de Weblate!</string>
<string name="v4_5_private_filenames_descr">Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC.</string>
<string name="v4_5_transport_isolation">Aislamiento de transporte</string>
<string name="to_share_with_your_contact">(para compartir con tu contacto)</string>
<string name="unmute_chat">Activar audio</string>
<string name="is_verified">%s está verificado</string>
<string name="is_not_verified">%s no está verificado</string>
<string name="smp_servers_test_server">Probar servidor</string>
<string name="smp_servers_test_servers">Probar servidores</string>
<string name="star_on_github">Comienza en GitHub</string>
<string name="smp_servers_per_user">Los servidores para nuevas conexiones de tu perfil de Chat actual</string>
<string name="network_disable_socks">¿Usar conexión directa a Internet\?</string>
<string name="update_onion_hosts_settings_question">¿Actualizar la configuración de los hosts .onion\?</string>
<string name="profile_is_only_shared_with_your_contacts">El perfil sólo se comparte con tus contactos.</string>
<string name="callstate_starting">inicializando…</string>
<string name="alert_title_skipped_messages">Mensajes omitidos</string>
<string name="settings_section_title_settings">CONFIGURACIÓN</string>
<string name="stop_chat_question">¿Detener Chat\?</string>
<string name="chat_item_ttl_seconds">%s segundo(s)</string>
<string name="group_invitation_tap_to_join">Pulsa para unirse</string>
<string name="rcv_group_event_updated_group_profile">perfil de grupo actualizado</string>
<string name="network_option_tcp_connection_timeout">Tiempo de espera de la conexión TCP agotado</string>
<string name="theme">Tema</string>
<string name="set_group_preferences">Establecer preferencias de grupo</string>
<string name="settings_section_title_support">SOPORTE SIMPLEX CHAT</string>
<string name="set_password_to_export">Seleccióna contraseña para exportar</string>
<string name="update_database">Actualizar</string>
<string name="update_database_passphrase">Actualizar contraseña base de datos</string>
<string name="group_invitation_tap_to_join_incognito">Pulsa para unirte en modo incógnito</string>
<string name="switch_verb">Cambiar</string>
<string name="member_role_will_be_changed_with_invitation">El rol cambiará a \"%s\". El miembro recibirá una nueva invitación.</string>
<string name="update_network_settings_confirmation">Actualizar</string>
<string name="update_network_settings_question">¿Actualizar la configuración de red\?</string>
<string name="trying_to_connect_to_server_to_receive_messages">Intentando conectar con el servidor utilizado para recibir mensajes de este contacto.</string>
<string name="unknown_message_format">formato de mensaje desconocido</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Intentando conectar con el servidor utilizado para recibir mensajes de este contacto (error: <xliff:g id="errorMsg">%1$s</xliff:g> ).</string>
<string name="error_smp_test_failed_at_step">Prueba fallida en el paso %s.</string>
<string name="tap_to_start_new_chat">Pulsa para iniciar chat nuevo</string>
<string name="share_message">Compartir mensaje…</string>
<string name="share_image">Compartir imagen…</string>
<string name="show_call_on_lock_screen">Mostrar</string>
<string name="unknown_database_error_with_info">Error desconocido en la base de datos: %s</string>
<string name="database_backup_can_be_restored">El intento de cambiar la contraseña de la base de datos no se ha completado.</string>
<string name="chat_help_tap_button">Pulsa el botón</string>
<string name="to_start_a_new_chat_help_header">Para iniciar un chat nuevo</string>
<string name="switch_receiving_address">Cambiar dirección de recepción</string>
<string name="group_is_decentralized">El grupo está totalmente descentralizado: sólo es visible para los miembros.</string>
<string name="to_connect_via_link_title">Para conectarse mediante enlace</string>
<string name="smp_servers_test_failed">¡Error en prueba del servidor!</string>
<string name="smp_servers_test_some_failed">Algunos servidores no superaron la prueba:</string>
<string name="smp_servers_use_server">Usar servidor</string>
<string name="smp_servers_use_server_for_new_conn">Usar para conexiones nuevas</string>
<string name="theme_system">Sistema</string>
<string name="description_via_one_time_link">mediante enlace único</string>
<string name="your_chats">Tus chats</string>
<string name="voice_message_send_text">Mensaje de voz…</string>
<string name="your_contact_address">Tu dirección de contacto</string>
<string name="icon_descr_video_off">Desactivar vídeo</string>
<string name="icon_descr_video_on">Activar vídeo</string>
<string name="wrong_passphrase">Contraseña de base de datos incorrecta</string>
<string name="wrong_passphrase_title">¡Contraseña incorrecta!</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Te has unido a este grupo. Conectando con miembro del grupo invitado.</string>
<string name="alert_title_cant_invite_contacts_descr">Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido</string>
<string name="you_are_invited_to_group">Has sido invitado al grupo</string>
<string name="v4_3_voice_messages">Mensajes de voz</string>
<string name="v4_3_irreversible_message_deletion_desc">Tus contactos pueden permitir la eliminación completa de mensajes.</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">Tú controlas a través de qué servidor(es) <b>recibes</b> los mensajes. Tus contactos controlan a través de qué servidor(es) <b>envías</b> tus mensajes.</string>
<string name="voice_messages">Mensajes de voz</string>
<string name="voice_messages_are_prohibited">Los mensajes de voz están prohibidos en este grupo.</string>
<string name="v4_4_verify_connection_security">Comprobar la seguridad de la conexión</string>
<string name="you_are_already_connected_to_vName_via_this_link">¡Ya estás conectado a <xliff:g id="contactName" example="Alice">%1$s! </xliff:g>.</string>
<string name="welcome">¡Bienvenido!</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">Tu perfil de chat será enviado
\na tu contacto</string>
<string name="your_ICE_servers">Tus servidores ICE</string>
<string name="you_rejected_group_invitation">Has rechazado la invitación del grupo.</string>
<string name="snd_group_event_changed_member_role">has cambiado el rol de %s a %s</string>
<string name="call_connection_via_relay">mediante servidor de retransmisión</string>
<string name="contact_wants_to_connect_with_you">¡quiere contactar contigo!</string>
<string name="voice_message">Mensaje de voz</string>
<string name="waiting_for_image">Esperando imagen</string>
<string name="webrtc_ice_servers">Servidores WebRTC ICE</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> quiere conectarse contigo mediante</string>
<string name="failed_to_create_user_duplicate_desc">Tienes un perfil de chat con el mismo nombre mostrado. Debes elegir otro nombre.</string>
<string name="you_can_also_connect_by_clicking_the_link">También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en <b>Abrir en aplicación móvil</b>.</string>
<string name="you_can_connect_to_simplex_chat_founder">Puedes <font color="#0088ff">conectar con los desarrolladores de <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para hacer cualquier pregunta y recibir actualizaciones</font>.</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">Puedes compartir tu dirección como enlace o como código QR: cualquiera podrá conectarse contigo. Si lo eliminas más tarde tus contactos no se perderán.</string>
<string name="observer_cant_send_message_title">¡No puedes enviar mensajes!</string>
<string name="you_can_use_markdown_to_format_messages__prompt">Puedes usar marcadores para dar formato a los mensajes:</string>
<string name="you_must_use_the_most_recent_version_of_database">Debes usar la versión más reciente de tu base de datos SÓLO en un dispositivo, de lo contrario podrías dejar de recibir mensajes de algunos contactos.</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Tu contacto debe estar en línea para que se complete la conexión.
\nPuedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo).</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">La base de datos actual será ELIMINADA y SUSTITUIDA por la importada.
\nEsta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.</string>
<string name="incognito_random_profile">Tu perfil aleatorio</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Te conectarás cuando se acepte tu solicitud de conexión, por favor espere o compruébalo más tarde.</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">Te conectarás cuando el dispositivo de tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano.</string>
<string name="invite_prohibited_description">Estás intentando invitar a un contacto con el que has compartido un perfil incógnito, al grupo en el que utilizas tu perfil principal</string>
<string name="simplex_link_mode_browser">mediante navegador</string>
<string name="simplex_link_connection">mediante <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="simplex_service_notification_title">Servicio <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="personal_welcome">¡Bienvenido <xliff:g>%1$s</xliff:g> !</string>
<string name="group_preview_you_are_invited">has sido invitado al grupo</string>
<string name="waiting_for_file">Esperando archivo</string>
<string name="icon_descr_waiting_for_image">Esperando imagen</string>
<string name="voice_message_with_duration">Mensaje de voz (<xliff:g id="duration">%1$s</xliff:g> )</string>
<string name="network_use_onion_hosts_prefer">Cuando esté disponible</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">No almacenamos ninguno de tus contactos o mensajes (una vez entregados) en los servidores.</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Has sido invitado al grupo. Únete para conectarte con los miembros del grupo.</string>
<string name="snd_group_event_member_deleted">has eliminado <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="group_info_member_you">Tú: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Puedes compartir un enlace o un código QR: cualquiera podrá unirse al grupo. Si lo eliminas más tarde los miembros del grupo no se perderán.</string>
<string name="incognito_info_share">Cuando compartes un perfil incógnito con alguien, este perfil se usará para los grupos a los que te inviten.</string>
<string name="your_preferences">Tus preferencias</string>
<string name="v4_2_auto_accept_contact_requests_desc">Con mensaje de bienvenida opcional.</string>
<string name="you_are_observer">Tu rol es observador</string>
<string name="verify_security_code">Comprobar código de seguridad</string>
<string name="you_accepted_connection">Has aceptado la conexión</string>
<string name="you_invited_your_contact">Has invitado a tu contacto</string>
<string name="you_will_be_connected_when_group_host_device_is_online">Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">Tu contacto puede escanear el código QR desde la aplicación.</string>
<string name="your_settings">Tu configuración</string>
<string name="your_SMP_servers">Tus servidores SMP</string>
<string name="you_control_your_chat">¡Tú controlas tu chat!</string>
<string name="your_profile_is_stored_on_your_device">Tu perfil, contactos y mensajes entregados se almacenan en tu dispositivo.</string>
<string name="callstate_waiting_for_answer">esperando respuesta…</string>
<string name="callstate_waiting_for_confirmation">esperando confirmación…</string>
<string name="onboarding_notifications_mode_off">Cuando la aplicación se está ejecutando</string>
<string name="icon_descr_video_call">Videollamada</string>
<string name="your_calls">Tus llamadas</string>
<string name="your_ice_servers">Tus servidores ICE</string>
<string name="your_privacy">Tu privacidad</string>
<string name="settings_section_title_you">TU</string>
<string name="your_chat_database">Base de datos de Chat</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Puedes iniciar el chat en Configuración / Base de datos o reiniciando la aplicación.</string>
<string name="you_sent_group_invitation">Has enviado una invitación de grupo</string>
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g> contacto(s) seleccionado(s)</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members"> %1$s </xliff:g> MIEMBROS</string>
<string name="your_chat_profiles_stored_locally">Tus perfiles de chat se almacenan localmente, sólo en tu dispositivo</string>
<string name="voice_prohibited_in_this_chat">Los mensajes de voz están prohibidos en este chat.</string>
<string name="whats_new">Novedades</string>
<string name="you_have_to_enter_passphrase_every_time">La contraseña no se almacena en el dispositivo, tienes que introducirla cada vez que inicies la aplicación.</string>
<string name="you_joined_this_group">Te has unido a este grupo</string>
<string name="chat_preferences_yes"></string>
<string name="chat_preferences_you_allow">Permites</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="profile_will_be_sent_to_contact_sending_link">Tu perfil se enviará al contacto del que has recibido este enlace.</string>
<string name="you_will_join_group">Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros.</string>
<string name="sender_you_pronoun"></string>
<string name="connected_to_server_to_receive_messages_from_contact">Estás conectado al servidor utilizado para recibir mensajes de este contacto.</string>
<string name="description_via_contact_address_link">mediante enlace de dirección de contacto</string>
<string name="description_via_group_link">mediante enlace de grupo</string>
<string name="description_you_shared_one_time_link">has compartido un enlace único</string>
<string name="description_you_shared_one_time_link_incognito">has compartido un enlace único en módo incógnito</string>
<string name="you_have_no_chats">No tienes chats</string>
<string name="contact_sent_large_file">El contacto ha enviado un archivo mayor al máximo admitido (<xliff:g id="maxFileSize">%1$s</xliff:g> ).</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> mensaje(s) omitido(s)</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Dejarás de recibir mensajes de este grupo. El historial del chat se conservará.</string>
<string name="view_security_code">Ver código de seguridad</string>
<string name="you_need_to_allow_to_send_voice">Para poder enviar mensajes de voz debes permitir que tu contacto pueda enviarlos.</string>
<string name="voice_messages_prohibited">¡Mensajes de voz prohibidos!</string>
<string name="group_main_profile_sent">Tu perfil de chat se enviará a los miembros del grupo</string>
<string name="icon_descr_address">Dirección <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="image_descr_simplex_logo">Logo <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="icon_descr_simplex_team">Equipo <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="your_profile_will_be_sent">Tu perfil de chat se enviará a tu contacto</string>
<string name="your_chat_profiles">Tus perfiles de chat</string>
<string name="your_simplex_contact_address">Tu dirección de contacto <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="smp_servers_your_server">Tu servidor</string>
<string name="smp_servers_your_server_address">Dirección de tu servidor</string>
<string name="section_title_welcome_message">MENSAJE DE BIENVENIDA</string>
<string name="your_current_profile">Tu perfil actual</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos.
\n
\nLos servidores <xliff:g id="appName">SimpleX</xliff:g> no pueden ver tu perfil.</string>
<string name="language_system">Sistema</string>
</resources>

View File

@ -598,12 +598,14 @@
<string name="incoming_audio_call">Appel audio entrant</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> veut se connecter à vous via</string>
<string name="your_calls">Vos appels</string>
<string name="connect_calls_via_relay">Se connecter via relais</string>
<string name="always_use_relay">Se connecter via relais</string>
<string name="call_on_lock_screen">Appels en écran verrouillé :</string>
<string name="show_call_on_lock_screen">Montrer</string>
<string name="no_call_on_lock_screen">Désactiver</string>
<string name="your_ice_servers">Vos serveurs ICE</string>
<string name="webrtc_ice_servers">Serveurs WebRTC ICE</string>
<string name="relay_server_protects_ip">Le serveur relais protège votre adresse IP, mais il peut observer la durée de l\'appel.</string>
<string name="relay_server_if_necessary">Le serveur relais n\'est utilisé que si nécessaire. Un tiers peut observer votre adresse IP.</string>
<string name="open_simplex_chat_to_accept_call">Ouvrez <xliff:g id="appNameFull">SimpleX Chat</xliff:g> pour décrocher</string>
<string name="status_no_e2e_encryption">sans chiffrement de bout en bout</string>
<string name="status_contact_has_e2e_encryption">Ce contact a le chiffrement de bout en bout</string>
@ -967,4 +969,16 @@
<string name="v4_5_transport_isolation">Isolation du transport</string>
<string name="v4_5_multiple_chat_profiles_descr">Différents noms, avatars et mode d\'isolation de transport.</string>
<string name="moderated_description">modéré</string>
<string name="moderated_item_description">modéré par %s</string>
<string name="delete_member_message__question">Supprimer le message de ce membre \?</string>
<string name="moderate_verb">Modéré</string>
<string name="moderate_message_will_be_deleted_warning">Le message sera supprimé pour tous les membres.</string>
<string name="moderate_message_will_be_marked_warning">Le message sera marqué comme modéré pour tous les membres.</string>
<string name="you_are_observer">vous êtes observateur</string>
<string name="error_updating_link_for_group">Erreur lors de la mise à jour du lien de groupe</string>
<string name="initial_member_role">Rôle initial</string>
<string name="observer_cant_send_message_desc">Veuillez contacter l\'administrateur du groupe.</string>
<string name="observer_cant_send_message_title">Vous ne pouvez pas envoyer de messages !</string>
<string name="group_member_role_observer">observateur</string>
<string name="language_system">Système</string>
</resources>

View File

@ -378,7 +378,7 @@
<string name="icon_descr_call_progress">Chiamata in corso</string>
<string name="call_on_lock_screen">Chiamate sulla schermata di blocco:</string>
<string name="icon_descr_call_connecting">Connessione chiamata</string>
<string name="connect_calls_via_relay">Connetti via relay</string>
<string name="always_use_relay">Connetti via relay</string>
<string name="status_contact_has_e2e_encryption">il contatto ha la crittografia e2e</string>
<string name="status_contact_has_no_e2e_encryption">il contatto non ha la crittografia e2e</string>
<string name="no_call_on_lock_screen">Disattiva</string>
@ -718,6 +718,8 @@
<string name="icon_descr_video_off">Video off</string>
<string name="icon_descr_video_on">Video on</string>
<string name="webrtc_ice_servers">Server WebRTC ICE</string>
<string name="relay_server_protects_ip">Il server relay protegge il tuo indirizzo IP, ma può osservare la durata della chiamata.</string>
<string name="relay_server_if_necessary">Il server relay viene usato solo se necessario. Un altro utente può osservare il tuo indirizzo IP.</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> messaggio/i saltato/i</string>
<string name="your_calls">Le tue chiamate</string>
<string name="your_ice_servers">I tuoi server ICE</string>
@ -967,4 +969,16 @@
<string name="v4_5_private_filenames_descr">Per proteggere il fuso orario, i file immagine/vocali usano UTC.</string>
<string name="v4_5_multiple_chat_profiles_descr">Nomi e avatar diversi, isolamento del trasporto.</string>
<string name="moderated_description">moderato</string>
<string name="moderated_item_description">moderato da %s</string>
<string name="delete_member_message__question">Eliminare il messaggio del membro\?</string>
<string name="moderate_verb">Modera</string>
<string name="moderate_message_will_be_deleted_warning">Il messaggio verrà eliminato per tutti i membri.</string>
<string name="moderate_message_will_be_marked_warning">Il messaggio sarà segnato come moderato per tutti i membri.</string>
<string name="you_are_observer">sei un osservatore</string>
<string name="initial_member_role">Ruolo iniziale</string>
<string name="error_updating_link_for_group">Errore nell\'aggiornamento del link del gruppo</string>
<string name="group_member_role_observer">osservatore</string>
<string name="observer_cant_send_message_desc">Contatta l\'amministratore del gruppo.</string>
<string name="observer_cant_send_message_title">Non puoi inviare messaggi!</string>
<string name="language_system">Sistema</string>
</resources>

View File

@ -459,7 +459,7 @@
<string name="core_version">コアのバージョン: v%s</string>
<string name="edit_image">画像を編集</string>
<string name="callstatus_missed">不在着信</string>
<string name="connect_calls_via_relay">リレー経由で繋がる。</string>
<string name="always_use_relay">リレー経由で繋がる。</string>
<string name="status_e2e_encrypted">エンドツーエンド暗号化済み</string>
<string name="chat_database_deleted">チャットのデータベースが削除されました。</string>
<string name="delete_messages_after">次の期間が経ったら、メッセージを削除:</string>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="chat_item_ttl_month">1 mėnuo</string>
<string name="chat_item_ttl_week">1 savaitė</string>
<string name="about_simplex_chat">Apie <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="chat_item_ttl_day">1 diena</string>
<string name="a_plus_b">a + b</string>
<string name="about_simplex">Apie SimpleX</string>
<string name="smp_servers_add">Pridėti serverį…</string>
<string name="v4_3_improved_server_configuration_desc">Pridėti serverius skenuojant QR kodus.</string>
</resources>

View File

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

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.SimpleX" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:statusBarColor">@android:color/black</item>
<item name="android:windowBackground">@color/window_background_dark</item>
</style>
</resources>

View File

@ -11,7 +11,7 @@
<string name="icon_descr_cancel_image_preview">Annuleer afbeeldingsvoorbeeld</string>
<string name="feature_cancelled_item">geannuleerd %s</string>
<string name="icon_descr_cancel_live_message">Live bericht annuleren</string>
<string name="snd_conn_event_switch_queue_phase_changing">veranderend adres</string>
<string name="snd_conn_event_switch_queue_phase_changing">adres wijzigen</string>
<string name="notifications_mode_service">Altijd aan</string>
<string name="icon_descr_asked_to_receive">Gevraagd om de afbeelding te ontvangen</string>
<string name="change_verb">Wijziging</string>
@ -21,7 +21,7 @@
<string name="allow_direct_messages">Sta het verzenden van directe berichten naar leden toe.</string>
<string name="allow_to_delete_messages">Sta toe om verzonden berichten onomkeerbaar te verwijderen.</string>
<string name="allow_to_send_voice">Sta toe om spraak berichten te verzenden.</string>
<string name="chat_is_running">Chat is aktief</string>
<string name="chat_is_running">Chat is actief</string>
<string name="clear_chat_menu_action">Wissen</string>
<string name="chat_database_section">CHAT DATABASE</string>
<string name="chat_archive_section">CHAT ARCHIEF</string>
@ -57,7 +57,7 @@
<string name="auto_accept_images">Afbeeldingen automatisch accepteren</string>
<string name="auth_unavailable">Verificatie niet beschikbaar</string>
<string name="back">Terug</string>
<string name="v4_2_auto_accept_contact_requests">Contactverzoeken automatisch accepteren</string>
<string name="v4_2_auto_accept_contact_requests">Contact verzoeken automatisch accepteren</string>
<string name="bold">vetgedrukt</string>
<string name="incognito_random_profile_description">Er wordt een willekeurig profiel naar uw contactpersoon verzonden</string>
<string name="attach">Bijvoegen</string>
@ -67,17 +67,17 @@
<string name="all_your_contacts_will_remain_connected">Al uw contacten blijven verbonden.</string>
<string name="allow_voice_messages_question">Spraak berichten toestaan\?</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>Goed voor batterij</b>. Achtergrondservice controleert elke 10 minuten op nieuwe berichten. U kunt oproepen en dringende berichten missen.</string>
<string name="integrity_msg_bad_hash">Onjuiste bericht-hash</string>
<string name="integrity_msg_bad_hash">Onjuiste bericht hash</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Scan QR-code</b>: om verbinding te maken met uw contactpersoon die u de QR-code laat zien.</string>
<string name="integrity_msg_bad_id">Onjuiste bericht-ID</string>
<string name="integrity_msg_bad_id">Onjuiste bericht ID</string>
<string name="call_already_ended">Oproep al beëindigd!</string>
<string name="chat_item_ttl_month">1 maand</string>
<string name="about_simplex">Over SimpleX</string>
<string name="about_simplex_chat">Over <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="above_then_preposition_continuation">hierboven, dan:</string>
<string name="accept_requests">Verzoeken accepteren</string>
<string name="users_delete_all_chats_deleted">Alle gesprekken en berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="clear_chat_warning">Alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd.</string>
<string name="users_delete_all_chats_deleted">Alle gesprekken en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!</string>
<string name="clear_chat_warning">Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd.</string>
<string name="allow_disappearing_messages_only_if">Sta verdwijnende berichten alleen toe als uw contactpersoon dit toestaat.</string>
<string name="allow_voice_messages_only_if">Sta spraak berichten alleen toe als uw contactpersoon ze toestaat.</string>
<string name="allow_your_contacts_irreversibly_delete">Laat uw contacten verzonden berichten onomkeerbaar verwijderen.</string>
@ -86,28 +86,28 @@
<string name="icon_descr_audio_off">Geluid uit</string>
<string name="full_backup">Back-up van app gegevens</string>
<string name="answer_call">Beantwoord oproep</string>
<string name="keychain_is_storing_securely">Android Keychain wordt gebruikt om het wachtwoord veilig op te slaan - hierdoor kan de meldings service werken.</string>
<string name="keychain_allows_to_receive_ntfs">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.</string>
<string name="keychain_is_storing_securely">Android Keychain wordt gebruikt om het wachtwoord veilig op te slaan, hierdoor kan de meldings service werken.</string>
<string name="keychain_allows_to_receive_ntfs">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.</string>
<string name="app_version_code">App build: %s</string>
<string name="notifications_mode_off_desc">App kan alleen meldingen ontvangen wanneer deze actief is, er wordt geen achtergrondservice gestart</string>
<string name="appearance_settings">Uiterlijk</string>
<string name="settings_section_title_icon">APP ICON</string>
<string name="app_version_title">App versie</string>
<string name="app_version_name">App-versie: v%s</string>
<string name="app_version_name">App versie: v%s</string>
<string name="network_session_mode_user_description">Er wordt een aparte TCP-verbinding (en SOCKS-referentie) gebruikt <b> voor elk chat profiel dat je in de app hebt </b>.</string>
<string name="audio_call_no_encryption">audio oproep (niet e2e versleuteld)</string>
<string name="accept_automatically">Automatisch</string>
<string name="notifications_mode_service_desc">Achtergrondservice is altijd actief - meldingen worden weergegeven zodra de berichten beschikbaar zijn.</string>
<string name="notifications_mode_service_desc">Achtergrondservice is altijd actief, meldingen worden weergegeven zodra de berichten beschikbaar zijn.</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Nieuw contact toevoegen</b>: om uw eenmalige QR-code voor uw contact te maken.</string>
<string name="icon_descr_call_ended">Oproep beëindigd</string>
<string name="turning_off_service_and_periodic">Batterijoptimalisatie is actief, waardoor achtergrondservice en periodieke verzoeken om nieuwe berichten worden uitgeschakeld. Je kunt ze weer inschakelen via instellingen.</string>
<string name="onboarding_notifications_mode_off_desc"><b>Beste voor de batterij</b>. U ontvangt alleen meldingen als de app draait, de achtergronddienst wordt NIET gebruikt.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Het kan worden uitgeschakeld via instellingen</b> - meldingen worden nog steeds weergegeven terwijl de app actief is.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Het kan worden uitgeschakeld via instellingen</b>, meldingen worden nog steeds weergegeven terwijl de app actief is.</string>
<string name="both_you_and_your_contacts_can_delete">Zowel jij als je contactpersoon kunnen verzonden berichten onherroepelijk verwijderen.</string>
<string name="both_you_and_your_contact_can_send_disappearing">Zowel jij als je contactpersoon kunnen verdwijnende berichten sturen.</string>
<string name="both_you_and_your_contact_can_send_voice">Zowel jij als je contactpersoon kunnen spraak berichten verzenden.</string>
<string name="impossible_to_recover_passphrase"><b>Let op</b>: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijt raakt.</string>
<string name="onboarding_notifications_mode_service_desc"><b>Gebruikt meer batterij</b>! Achtergrondservice is altijd actief - meldingen worden weergegeven zodra de berichten beschikbaar zijn.</string>
<string name="onboarding_notifications_mode_service_desc"><b>Gebruikt meer batterij</b>! Achtergrondservice is altijd actief, meldingen worden weergegeven zodra de berichten beschikbaar zijn.</string>
<string name="icon_descr_cancel_link_preview">link voorbeeld annuleren</string>
<string name="callstatus_ended">oproep beëindigd <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="database_initialization_error_title">Kan de database niet initialiseren</string>
@ -116,7 +116,7 @@
<string name="cannot_access_keychain">Geen toegang tot Keystore om database wachtwoord op te slaan</string>
<string name="cannot_receive_file">Kan bestand niet ontvangen</string>
<string name="change_role">Rol wijzigen</string>
<string name="rcv_conn_event_switch_queue_phase_changing">veranderend adres</string>
<string name="rcv_conn_event_switch_queue_phase_changing">adres wijzigen</string>
<string name="rcv_conn_event_switch_queue_phase_completed">adres voor u gewijzigd</string>
<string name="rcv_group_event_changed_member_role">veranderde rol van %s naar %s</string>
<string name="change_member_role_question">Groep rol wijzigen\?</string>
@ -130,8 +130,8 @@
<string name="network_session_mode_user">Chat profiel</string>
<string name="settings_section_title_chats">GESPREKKEN</string>
<string name="chat_with_developers">Praat met de ontwikkelaars</string>
<string name="smp_servers_check_address">Controleer het serveradres en probeer het opnieuw.</string>
<string name="choose_file">Kies bestand</string>
<string name="smp_servers_check_address">Controleer het server adres en probeer het opnieuw.</string>
<string name="choose_file">Bestand</string>
<string name="clear_verb">Wissen</string>
<string name="v4_4_verify_connection_security_desc">Vergelijk beveiligingscodes met je contacten.</string>
<string name="icon_descr_contact_checked">Contact gecontroleerd</string>
@ -143,7 +143,7 @@
<string name="group_member_status_intro_invitation">verbinden (introductie uitnodiging)</string>
<string name="display_name_connection_established">verbinding gemaakt</string>
<string name="connection_request_sent">Verbindingsverzoek verzonden!</string>
<string name="connection_timeout">Time-out verbinding</string>
<string name="connection_timeout">Timeout verbinding</string>
<string name="share_one_time_link">Maak een eenmalige uitnodiging link</string>
<string name="create_address">Adres aanmaken</string>
<string name="create_group_link">Groep link maken</string>
@ -166,13 +166,13 @@
<string name="notification_preview_somebody">Contact verborgen:</string>
<string name="image_decoding_exception_title">Decodeerfout</string>
<string name="maximum_supported_file_size">De momenteel maximaal ondersteunde bestandsgrootte is <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contact en alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contact en alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!</string>
<string name="icon_descr_server_status_connected">Verbonden</string>
<string name="confirm_verb">Bevestigen</string>
<string name="connect_via_link_or_qr">Maak verbinding via link / QR-code</string>
<string name="copied">Gekopieerd naar het klembord</string>
<string name="contribute">Bijdragen</string>
<string name="configure_ICE_servers">ICE-servers configureren</string>
<string name="configure_ICE_servers">ICE servers configureren</string>
<string name="network_session_mode_entity">Verbinding</string>
<string name="core_build_timestamp">Core gebouwd op: %s</string>
<string name="core_version">Core versie: v%s</string>
@ -215,9 +215,9 @@
<string name="create_profile_button">Maak</string>
<string name="create_profile">Maak een profiel aan</string>
<string name="delete_address">Adres verwijderen</string>
<string name="connect_calls_via_relay">Verbinden via relais</string>
<string name="always_use_relay">Verbinden via relais</string>
<string name="status_contact_has_e2e_encryption">contact heeft e2e-codering</string>
<string name="status_contact_has_no_e2e_encryption">contact heeft geen e2e-encryptie</string>
<string name="status_contact_has_no_e2e_encryption">contact heeft geen e2e versleuteling</string>
<string name="set_password_to_export_desc">De database is versleuteld met een willekeurige wachtwoord. Wijzig dit voordat u exporteert.</string>
<string name="database_passphrase">Database wachtwoord</string>
<string name="confirm_new_passphrase">Bevestig nieuw wachtwoord…</string>
@ -267,16 +267,16 @@
<string name="delete_pending_connection__question">Wachtende verbinding verwijderen\?</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 desktop: scan weergegeven QR-code vanuit de app, via <b>Scan QR-code</b>.</string>
<string name="settings_developer_tools">Ontwikkel gereedschap</string>
<string name="auth_device_authentication_is_disabled_turning_off">Apparaatverificatie is uitgeschakeld. SimpleX Lock uitschakelen.</string>
<string name="auth_device_authentication_is_disabled_turning_off">Apparaatverificatie is uitgeschakeld. SimpleX Vergrendelen uitschakelen.</string>
<string name="display_name">Weergavenaam</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Lock inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld.</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld.</string>
<string name="direct_messages_are_prohibited_in_chat">Directe berichten tussen leden zijn verboden in deze groep.</string>
<string name="total_files_count_and_size">%d bestand(en) met een totale grootte van %s</string>
<string name="ttl_hour">%d uur</string>
<string name="no_call_on_lock_screen">Uitzetten</string>
<string name="v4_4_disappearing_messages">Verdwijnende berichten</string>
<string name="disappearing_prohibited_in_this_chat">Verdwijnende berichten zijn verboden in dit gesprek.</string>
<string name="auth_disable_simplex_lock">SimpleX Lock uitschakelen</string>
<string name="auth_disable_simplex_lock">SimpleX Vergrendelen uitschakelen</string>
<string name="timed_messages">Verdwijnende berichten</string>
<string name="smp_server_test_disconnect">Verbinding verbreken</string>
<string name="icon_descr_server_status_disconnected">Verbinding verbroken</string>
@ -314,14 +314,14 @@
<string name="error_changing_address">Fout bij wijzigen van adres</string>
<string name="error_deleting_pending_contact_connection">Fout bij het verwijderen van in behandeling zijnde contact verbinding</string>
<string name="error_deleting_user">Fout bij het verwijderen van gebruikers profiel</string>
<string name="auth_enable_simplex_lock">SimpleX Lock inschakelen</string>
<string name="auth_enable_simplex_lock">SimpleX Vergrendelen inschakelen</string>
<string name="hide_verb">Verbergen</string>
<string name="icon_descr_edited">bewerkt</string>
<string name="for_everybody">Voor iedereen</string>
<string name="icon_descr_server_status_error">Fout</string>
<string name="icon_descr_email">Email</string>
<string name="edit_image">Bewerk afbeelding</string>
<string name="exit_without_saving">Afsluiten zonder op te slaan</string>
<string name="exit_without_saving">Afsluiten zonder opslaan</string>
<string name="full_name_optional__prompt">Volledige naam (optioneel)</string>
<string name="encrypted_video_call">e2e versleuteld video gesprek</string>
<string name="allow_accepting_calls_from_lock_screen">Schakel oproepen vanaf het vergrendelscherm in via Instellingen.</string>
@ -343,7 +343,7 @@
<string name="snd_group_event_group_profile_updated">groep profiel bijgewerkt</string>
<string name="group_member_status_group_deleted">groep verwijderd</string>
<string name="icon_descr_expand_role">Vouw de rolselectie uit</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Groep wordt verwijderd voor alle leden - dit kan niet ongedaan worden gemaakt!</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Groep wordt verwijderd voor alle leden, dit kan niet ongedaan worden gemaakt!</string>
<string name="error_creating_link_for_group">Fout bij maken van groep link</string>
<string name="error_deleting_link_for_group">Fout bij verwijderen groep link</string>
<string name="group_link">Groep link</string>
@ -356,7 +356,7 @@
<string name="feature_enabled_for_contact">ingeschakeld voor contact</string>
<string name="feature_enabled_for_you">voor u ingeschakeld</string>
<string name="group_members_can_delete">Groepsleden kunnen verzonden berichten onherroepelijk verwijderen.</string>
<string name="group_members_can_send_dms">Groepsleden kunnen directe berichten sturen.</string>
<string name="group_members_can_send_dms">Groepsleden kunnen directe berichten sturen</string>
<string name="group_members_can_send_voice">Groepsleden kunnen spraak berichten verzenden.</string>
<string name="v4_5_transport_isolation_descr">Per chat profiel (standaard) of per verbinding (BETA).</string>
<string name="v4_5_multiple_chat_profiles_descr">Verschillende namen, avatars en transportisolatie.</string>
@ -368,7 +368,7 @@
<string name="enable_automatic_deletion_question">Automatisch verwijderen van berichten aanzetten\?</string>
<string name="enter_correct_passphrase">Voer het juiste wachtwoord in.</string>
<string name="button_edit_group_profile">Groep profiel bewerken</string>
<string name="network_option_enable_tcp_keep_alive">Schakel TCP-keep-alive in</string>
<string name="network_option_enable_tcp_keep_alive">Schakel TCP keep-alive in</string>
<string name="encrypt_database">Versleutelen</string>
<string name="error_adding_members">Fout bij het toevoegen van gebruiker(s)</string>
<string name="smp_servers_enter_manually">Voer de server handmatig in</string>
@ -378,15 +378,15 @@
<string name="section_title_for_console">VOOR CONSOLE</string>
<string name="group_profile_is_stored_on_members_devices">Groep profiel wordt opgeslagen op de apparaten van de leden, niet op de servers.</string>
<string name="notification_preview_mode_hidden">Verborgen</string>
<string name="delete_group_for_self_cannot_undo_warning">De groep wordt voor u verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="delete_group_for_self_cannot_undo_warning">De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt!</string>
<string name="hide_notification">Verbergen</string>
<string name="server_error">fout</string>
<string name="file_will_be_received_when_contact_is_online">Het bestand wordt ontvangen wanneer uw contact persoon online is, even geduld a.u.b. of controleer later!</string>
<string name="error_saving_file">Fout bij opslaan van bestand</string>
<string name="file_not_found">Bestand niet gevonden</string>
<string name="file_saved">Bestand opgeslagen</string>
<string name="from_gallery_button">Uit galerij</string>
<string name="error_saving_ICE_servers">Fout bij opslaan van ICE-servers</string>
<string name="from_gallery_button">Galerij</string>
<string name="error_saving_ICE_servers">Fout bij opslaan van ICE servers</string>
<string name="callstate_ended">geëindigd</string>
<string name="group_members_can_send_disappearing">Groepsleden kunnen verdwijnende berichten sturen.</string>
<string name="ttl_week">%d week</string>
@ -397,8 +397,8 @@
<string name="error_with_info">Fout: %s</string>
<string name="error_creating_address">Fout bij aanmaken van adres</string>
<string name="icon_descr_help">help</string>
<string name="icon_descr_flip_camera">Flip-camera</string>
<string name="error_saving_smp_servers">Fout bij opslaan van SMP-servers</string>
<string name="icon_descr_flip_camera">Draai camera</string>
<string name="error_saving_smp_servers">Fout bij opslaan van SMP servers</string>
<string name="error_setting_network_config">Fout bij updaten van netwerk configuratie</string>
<string name="failed_to_parse_chat_title">Kan het gesprek niet laden</string>
<string name="failed_to_parse_chats_title">Kan de gesprekken niet laden</string>
@ -420,7 +420,7 @@
<string name="notification_new_contact_request">Nieuw contactverzoek</string>
<string name="auth_log_in_using_credential">Log in met uw inloggegevens</string>
<string name="message_delivery_error_desc">Hoogstwaarschijnlijk heeft dit contact de verbinding met jou verwijderd.</string>
<string name="delete_message_cannot_be_undone_warning">Bericht wordt verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="delete_message_cannot_be_undone_warning">Bericht wordt verwijderd, dit kan niet ongedaan worden gemaakt!</string>
<string name="large_file">Groot bestand!</string>
<string name="mark_read">Markeer gelezen</string>
<string name="mark_unread">Markeer als ongelezen</string>
@ -440,11 +440,11 @@
<string name="how_it_works">Hoe het werkt</string>
<string name="callstatus_missed">gemiste oproep</string>
<string name="how_simplex_works">Hoe <xliff:g id="appName">SimpleX</xliff:g> werkt</string>
<string name="many_people_asked_how_can_it_deliver">Veel mensen vroegen: <i>als <xliff:g id="appName">SimpleX</xliff:g> geen gebruikers-ID\'s heeft, hoe kan het dan berichten bezorgen\?</i></string>
<string name="many_people_asked_how_can_it_deliver">Veel mensen vroegen: <i>als <xliff:g id="appName">SimpleX</xliff:g> geen gebruikers ID\'s heeft, hoe kan het dan berichten bezorgen\?</i></string>
<string name="incoming_audio_call">Inkomende audio oproep</string>
<string name="incoming_video_call">Inkomend video gesprek</string>
<string name="ignore">Negeren</string>
<string name="status_no_e2e_encryption">geen e2e-encryptie</string>
<string name="status_no_e2e_encryption">geen e2e versleuteling</string>
<string name="import_database_question">Chat database importeren\?</string>
<string name="chat_item_ttl_none">nooit</string>
<string name="no_received_app_files">Geen ontvangen of verzonden bestanden</string>
@ -454,17 +454,17 @@
<string name="group_member_status_invited">uitgenodigd</string>
<string name="button_leave_group">Groep verlaten</string>
<string name="info_row_local_name">Lokale naam</string>
<string name="group_unsupported_incognito_main_profile_sent">Incognito modus wordt hier niet ondersteund - uw hoofdprofiel wordt naar groepsleden verzonden</string>
<string name="group_unsupported_incognito_main_profile_sent">Incognito modus wordt hier niet ondersteund, uw hoofdprofiel wordt naar groepsleden verzonden</string>
<string name="users_delete_data_only">Alleen lokale profielgegevens</string>
<string name="message_deletion_prohibited_in_chat">Het onomkeerbaar verwijderen van berichten is verboden in deze groep.</string>
<string name="v4_3_improved_privacy_and_security_desc">App-scherm verbergen in de recente apps.</string>
<string name="v4_3_improved_privacy_and_security_desc">App scherm verbergen in de recente apps.</string>
<string name="settings_section_title_incognito">Incognito modus</string>
<string name="messages_section_title">Berichten</string>
<string name="new_passphrase">Nieuw wachtwoord…</string>
<string name="keychain_error">Keychain fout</string>
<string name="join_group_button">Word lid van</string>
<string name="leave_group_question">Groep verlaten\?</string>
<string name="new_member_role">Nieuwe ledenrol</string>
<string name="new_member_role">Nieuwe leden rol</string>
<string name="no_contacts_to_add">Geen contacten om toe te voegen</string>
<string name="incognito_info_allows">Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chat profiel.</string>
<string name="theme_light">Licht</string>
@ -496,7 +496,7 @@
<string name="member_info_section_title_member">GEBRUIKER</string>
<string name="settings_section_title_messages">BERICHTEN</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 mobiel: tik op <b>Openen in mobiele app</b> en tik vervolgens op <b>Verbinden</b> in de app.</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Gebruiker wordt uit de groep verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Gebruiker wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt!</string>
<string name="message_delivery_error_title">Fout bij bezorging van bericht</string>
<string name="delete_message_mark_deleted_warning">Bericht wordt gemarkeerd voor verwijdering. De ontvanger(s) kunnen dit bericht onthullen.</string>
<string name="network_status">Netwerk status</string>
@ -506,7 +506,7 @@
<string name="import_database">Database importeren</string>
<string name="v4_3_improved_privacy_and_security">Verbeterde privacy en veiligheid</string>
<string name="image_will_be_received_when_contact_is_online">De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!</string>
<string name="incognito_info_protects">De incognito modus beschermt de privacy van uw hoofdprofielnaam en -afbeelding - voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt.</string>
<string name="incognito_info_protects">De incognito modus beschermt de privacy van uw hoofdprofielnaam en afbeelding, voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt.</string>
<string name="new_database_archive">Nieuw database archief</string>
<string name="no_details">geen details</string>
<string name="conn_level_desc_indirect">indirect (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
@ -516,14 +516,14 @@
<string name="settings_notifications_mode_title">Meldingsservice</string>
<string name="notifications">Meldingen</string>
<string name="invalid_contact_link">Ongeldige link!</string>
<string name="smp_servers_invalid_address">Ongeldig serveradres!</string>
<string name="smp_servers_invalid_address">Ongeldig server adres!</string>
<string name="install_simplex_chat_for_terminal">Installeer <xliff:g id="appNameFull">SimpleX Chat</xliff:g> voor terminal</string>
<string name="how_to">Hoe</string>
<string name="how_to_use_your_servers">Hoe u uw servers gebruikt</string>
<string name="network_and_servers">Netwerk &amp; servers</string>
<string name="enter_one_ICE_server_per_line">ICE-servers (één per lijn)</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Zorg ervoor dat WebRTC ICE-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn.</string>
<string name="network_disable_socks_info">Als u bevestigt, kunnen de berichtenservers uw IP-adres zien en uw provider - met welke servers u verbinding maakt.</string>
<string name="enter_one_ICE_server_per_line">ICE servers (één per lijn)</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Zorg ervoor dat WebRTC ICE server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn.</string>
<string name="network_disable_socks_info">Als u bevestigt, kunnen de berichten servers uw IP-adres zien en uw provider, met welke servers u verbinding maakt.</string>
<string name="network_use_onion_hosts_no">Nee</string>
<string name="immune_to_spam_and_abuse">Immuun voor spam en misbruik</string>
<string name="make_private_connection">Maak een privéverbinding</string>
@ -535,7 +535,7 @@
<string name="rcv_group_event_invited_via_your_group_link">uitgenodigd via je groep link</string>
<string name="incognito">Incognito</string>
<string name="icon_descr_call_missed">Gemiste oproep</string>
<string name="description_via_contact_address_link_incognito">incognito via link naar contactadres</string>
<string name="description_via_contact_address_link_incognito">incognito via contact adres link</string>
<string name="description_via_group_link_incognito">incognito via groep link</string>
<string name="description_via_one_time_link_incognito">incognito via eenmalige link</string>
<string name="invalid_chat">ongeldige gesprek</string>
@ -543,21 +543,21 @@
<string name="invalid_message_format">ongeldig berichtformaat</string>
<string name="display_name_invited_to_connect">uitgenodigd om te verbinden</string>
<string name="live">LIVE</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Zorg ervoor dat SMP-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn.</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn.</string>
<string name="marked_deleted_description">gemarkeerd als verwijderd</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen.</string>
<string name="image_descr_profile_image">profielfoto</string>
<string name="privacy_redefined">Privacy opnieuw gedefinieerd</string>
<string name="privacy_and_security">Privacy en beveiliging</string>
<string name="network_error_desc">Controleer uw netwerkverbinding met <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> en probeer het opnieuw.</string>
<string name="error_smp_test_certificate">Mogelijk is de certificaatvingerafdruk in het serveradres onjuist</string>
<string name="error_smp_test_certificate">Mogelijk is de certificaat vingerafdruk in het server adres onjuist</string>
<string name="periodic_notifications">Periodieke meldingen</string>
<string name="auth_open_chat_console">Chat console openen</string>
<string name="toast_permission_denied">Geen toestemming!</string>
<string name="icon_descr_profile_image_placeholder">profielafbeelding tijdelijke aanduiding</string>
<string name="one_time_link">Eenmalige uitnodiging link</string>
<string name="paste_button">Plakken</string>
<string name="smp_servers_preset_address">Vooraf ingesteld serveradres</string>
<string name="smp_servers_preset_address">Vooraf ingesteld server adres</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion hosts worden niet gebruikt.</string>
<string name="onboarding_notifications_mode_title">Privé meldingen</string>
<string name="paste_the_link_you_received">Plak de ontvangen link</string>
@ -573,12 +573,12 @@
<string name="only_you_can_send_disappearing">Alleen jij kunt verdwijnende berichten verzenden.</string>
<string name="only_your_contact_can_send_disappearing">Alleen uw contactpersoon kan verdwijnende berichten verzenden.</string>
<string name="only_you_can_delete_messages">Alleen jij kunt berichten onomkeerbaar verwijderen (je contactpersoon kan ze markeren voor verwijdering).</string>
<string name="feature_offered_item_with_param">aangeboden %s: %2s</string>
<string name="feature_offered_item_with_param">voorgesteld %s: %2s</string>
<string name="old_database_archive">Oud database archief</string>
<string name="enter_correct_current_passphrase">Voer het juiste huidige wachtwoord in.</string>
<string name="group_member_role_owner">eigenaar</string>
<string name="network_option_ping_count">PING-telling</string>
<string name="network_option_ping_interval">PING-interval</string>
<string name="network_option_ping_count">PING telling</string>
<string name="network_option_ping_interval">PING interval</string>
<string name="v4_5_message_draft_descr">Bewaar het laatste berichtconcept, met bijlagen.</string>
<string name="v4_5_private_filenames">Privé bestandsnamen</string>
<string name="images_limit_desc">Er kunnen slechts 10 afbeeldingen tegelijk worden verzonden</string>
@ -599,13 +599,13 @@
<string name="network_use_onion_hosts_prefer_desc">Onion hosts worden gebruikt indien beschikbaar.</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion hosts worden gebruikt indien beschikbaar.</string>
<string name="network_use_onion_hosts_no_desc">Onion hosts worden niet gebruikt.</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Open-source protocol en code iedereen kan de servers draaien.</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Open-source protocol en code. Iedereen kan de servers draaien.</string>
<string name="people_can_connect_only_via_links_you_share">Mensen kunnen alleen verbinding met u maken via de links die u deelt.</string>
<string name="only_your_contact_can_delete">Alleen uw contactpersoon kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).</string>
<string name="only_you_can_send_voice">Alleen jij kunt spraak berichten verzenden.</string>
<string name="only_your_contact_can_send_voice">Alleen uw contactpersoon kan spraak berichten verzenden.</string>
<string name="prohibit_message_deletion">Verbied het onomkeerbaar verwijderen van berichten.</string>
<string name="feature_offered_item">aangeboden %s</string>
<string name="feature_offered_item">voorgesteld %s</string>
<string name="store_passphrase_securely_without_recover">Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de gesprekken.</string>
<string name="store_passphrase_securely">Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u deze kwijtraakt.</string>
<string name="open_chat">Gesprekken openen</string>
@ -613,9 +613,9 @@
<string name="icon_descr_call_pending_sent">Oproep in behandeling</string>
<string name="simplex_link_mode_browser_warning">Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven.</string>
<string name="contact_developers">Werk de app bij en neem contact op met de ontwikkelaars.</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Alleen client-apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met <b>2-laags end-to-end-codering</b>.</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Alleen client apparaten slaan gebruikers profielen, contacten, groepen en berichten op die zijn verzonden met <b>2-laags end-to-end codering</b>.</string>
<string name="sender_may_have_deleted_the_connection_request">De afzender heeft mogelijk het verbindingsverzoek verwijderd.</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Schakel SimpleX Lock in om uw informatie te beschermen.
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Schakel SimpleX Vergrendelen in om uw informatie te beschermen.
\nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld.</string>
<string name="la_notice_turn_on">Aanzetten</string>
<string name="auth_unlock">Ontgrendelen</string>
@ -629,15 +629,15 @@
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">Uw contactpersoon kan de QR-code vanuit de app scannen.</string>
<string name="share_invitation_link">Uitnodiging link delen</string>
<string name="scan_code">Code scannen</string>
<string name="your_contact_address">Uw contactadres</string>
<string name="your_contact_address">Uw contact adres</string>
<string name="your_settings">Uw instellingen</string>
<string name="share_link">Deel link</string>
<string name="you_control_your_chat">Jij beheert je gesprek!</string>
<string name="your_profile_is_stored_on_your_device">Uw profiel, contacten en afgeleverde berichten worden op uw apparaat opgeslagen.</string>
<string name="callstate_starting">beginnen…</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">U bepaalt via welke server(s) je de berichten <b>ontvangt</b>, uw contacten de servers die u gebruikt om ze berichten te sturen.</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">U bepaalt via welke server(s) je de berichten <b>ontvangt</b>, uw contacten de servers die u gebruikt om ze berichten te sturen.</string>
<string name="icon_descr_video_on">Video aan</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Deze actie kan niet ongedaan worden gemaakt - uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren.</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren.</string>
<string name="messages_section_description">Deze instelling is van toepassing op berichten in jou huidige chat profiel</string>
<string name="save_archive">Bewaar archief</string>
<string name="rcv_group_event_updated_group_profile">bijgewerkt groep profiel</string>
@ -654,7 +654,7 @@
<string name="notification_preview_mode_message_desc">Toon contact en bericht</string>
<string name="notification_preview_mode_contact_desc">Toon alleen contactpersoon</string>
<string name="ntf_channel_messages">SimpleX Chat berichten</string>
<string name="auth_simplex_lock_turned_on">SimpleX Lock ingeschakeld</string>
<string name="auth_simplex_lock_turned_on">SimpleX Vergrendelen ingeschakeld</string>
<string name="auth_stop_chat">Stop chat</string>
<string name="reply_verb">Antwoord</string>
<string name="save_verb">Opslaan</string>
@ -669,7 +669,7 @@
<string name="welcome">Welkom!</string>
<string name="group_preview_you_are_invited">je bent uitgenodigd voor de groep</string>
<string name="you_have_no_chats">Je hebt geen gesprekken</string>
<string name="your_chats">Je gesprekken</string>
<string name="your_chats">Jouw gesprekken</string>
<string name="share_file">Deel bestand…</string>
<string name="share_image">Afbeelding delen…</string>
<string name="icon_descr_waiting_for_image">Wachten op afbeelding</string>
@ -706,14 +706,14 @@
<string name="security_code">Beveiligingscode</string>
<string name="is_not_verified">%s is niet geverifieerd</string>
<string name="is_verified">%s is geverifieerd</string>
<string name="to_verify_compare">Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contactpersoon te verifiëren.</string>
<string name="to_verify_compare">Vergelijk (of scan) de code op uw apparaten om end-to-end codering met uw contactpersoon te verifiëren.</string>
<string name="you_can_also_connect_by_clicking_the_link">U kunt ook verbinding maken door op de link te klikken. Als het in de browser wordt geopend, klikt u op de knop <b> Openen in mobiele app </b>.</string>
<string name="your_profile_will_be_sent">Uw chat profiel wordt naar uw contactpersoon verzonden</string>
<string name="your_chat_profiles">Je chat profielen</string>
<string name="your_simplex_contact_address">Uw <xliff:g id="appName">SimpleX</xliff:g> contactadres</string>
<string name="your_chat_profiles">Uw chat profielen</string>
<string name="your_simplex_contact_address">Uw <xliff:g id="appName">SimpleX</xliff:g> contact adres</string>
<string name="chat_with_the_founder">Stuur vragen en ideeën</string>
<string name="send_us_an_email">Stuur ons een e-mail</string>
<string name="chat_lock">SimpleX Lock</string>
<string name="chat_lock">SimpleX Vergrendelen</string>
<string name="smp_servers">SMP servers</string>
<string name="smp_servers_save">Bewaar servers</string>
<string name="smp_servers_test_failed">Servertest mislukt!</string>
@ -722,8 +722,8 @@
<string name="smp_servers_test_server">Server test</string>
<string name="rate_the_app">Beoordeel de app</string>
<string name="smp_servers_use_server">Gebruik server</string>
<string name="using_simplex_chat_servers">Gebruik van <xliff:g id="appNameFull">SimpleX Chat</xliff:g>-servers.</string>
<string name="smp_servers_your_server_address">Uw serveradres</string>
<string name="using_simplex_chat_servers">Gebruik van <xliff:g id="appNameFull">SimpleX Chat</xliff:g> servers.</string>
<string name="smp_servers_your_server_address">Uw server adres</string>
<string name="smp_servers_your_server">Uw server</string>
<string name="network_session_mode_transport_isolation">Transport isolation</string>
<string name="network_socks_toggle">SOCKS-proxy gebruiken (poort 9050)</string>
@ -732,7 +732,7 @@
<string name="section_title_welcome_message">WELKOMS BERICHT</string>
<string name="your_current_profile">Je huidige profiel</string>
<string name="save_and_notify_contacts">Opslaan en Contacten melden</string>
<string name="save_and_notify_group_members">Opslaan en Groepleden melden</string>
<string name="save_and_notify_group_members">Opslaan en Groepsleden melden</string>
<string name="strikethrough">staking</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">Het berichten- en applicatieplatform dat uw privacy en veiligheid beschermt.</string>
<string name="profile_is_only_shared_with_your_contacts">Het profiel wordt alleen gedeeld met uw contacten.</string>
@ -742,7 +742,7 @@
<string name="secret">geheim</string>
<string name="next_generation_of_private_messaging">De volgende generatie privéberichten</string>
<string name="callstate_waiting_for_answer">wachten op antwoord…</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">Om de privacy te beschermen, heeft <xliff:g id="appName">SimpleX</xliff:g> in plaats van gebruikers-ID\'s die door alle andere platforms worden gebruikt, ID\'s voor berichtenwachtrijen, afzonderlijk voor elk van uw contacten.</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">Om de privacy te beschermen, heeft <xliff:g id="appName">SimpleX</xliff:g> in plaats van gebruikers ID\'s die door alle andere platforms worden gebruikt, ID\'s voor berichten wachtrijen, afzonderlijk voor elk van uw contacten.</string>
<string name="use_chat">Gebruik chat</string>
<string name="onboarding_notifications_mode_off">Wanneer de app actief is</string>
<string name="video_call_no_encryption">video gesprek (niet e2e versleuteld)</string>
@ -751,8 +751,10 @@
<string name="icon_descr_video_call">video oproep</string>
<string name="your_calls">Uw oproepen</string>
<string name="show_call_on_lock_screen">Toon</string>
<string name="webrtc_ice_servers">WebRTC ICE-servers</string>
<string name="your_ice_servers">Uw ICE-servers</string>
<string name="webrtc_ice_servers">WebRTC ICE servers</string>
<string name="relay_server_protects_ip">Relay server beschermt uw IP-adres, maar kan de duur van het gesprek observeren.</string>
<string name="relay_server_if_necessary">Relay server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien.</string>
<string name="your_ice_servers">Uw ICE servers</string>
<string name="alert_title_skipped_messages">Overgeslagen berichten</string>
<string name="call_connection_via_relay">via relais</string>
<string name="icon_descr_video_off">Video uit</string>
@ -769,7 +771,7 @@
<string name="you_must_use_the_most_recent_version_of_database">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.</string>
<string name="restart_the_app_to_use_imported_chat_database">Start de app opnieuw om de geïmporteerde chat database te gebruiken.</string>
<string name="stop_chat_to_enable_database_actions">Stop de chat om database acties mogelijk te maken.</string>
<string name="delete_files_and_media_desc">Deze actie kan niet ongedaan worden gemaakt - alle ontvangen en verzonden bestanden en media worden verwijderd. Foto\'s met een lage resolutie blijven behouden.</string>
<string name="delete_files_and_media_desc">Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto\'s met een lage resolutie blijven behouden.</string>
<string name="remove_passphrase_from_keychain">Wachtwoord verwijderen uit Keychain\?</string>
<string name="remove_passphrase">Verwijderen</string>
<string name="update_database">Update</string>
@ -783,13 +785,13 @@
<string name="rcv_group_event_user_deleted">heeft je verwijderd</string>
<string name="group_info_member_you">jij: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g> LEDEN</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">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.</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">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.</string>
<string name="switch_verb">Wijzig</string>
<string name="member_role_will_be_changed_with_notification">De rol wordt gewijzigd in \"%s\". Iedereen in de groep wordt op de hoogte gebracht.</string>
<string name="receiving_via">Ontvang via</string>
<string name="save_group_profile">Groep profiel opslaan</string>
<string name="group_is_decentralized">De groep is volledig gedecentraliseerd het is alleen zichtbaar voor de leden.</string>
<string name="network_option_tcp_connection_timeout">Time-out van TCP-verbinding</string>
<string name="network_option_tcp_connection_timeout">Timeout van TCP-verbinding</string>
<string name="voice_messages">Spraak berichten</string>
<string name="voice_prohibited_in_this_chat">Spraak berichten zijn verboden in dit gesprek.</string>
<string name="prohibit_sending_disappearing">Verbied het verzenden van verdwijnende berichten.</string>
@ -800,7 +802,7 @@
<string name="stop_chat_to_export_import_or_delete_chat_database">Stop de chat om de chat database te exporteren, importeren of verwijderen. U kunt geen berichten ontvangen en verzenden terwijl de chat is gestopt.</string>
<string name="chat_item_ttl_seconds">%s seconde(n)</string>
<string name="update_database_passphrase">Database wachtwoord bijwerken</string>
<string name="database_is_not_encrypted">Uw chat database is niet versleuteld - stel een wachtwoord in om deze te beschermen.</string>
<string name="database_is_not_encrypted">Uw chat database is niet versleuteld, stel een wachtwoord in om deze te beschermen.</string>
<string name="database_restore_error">Databasefout herstellen</string>
<string name="unknown_error">Onbekende fout</string>
<string name="wrong_passphrase_title">Verkeerd wachtwoord!</string>
@ -823,7 +825,7 @@
<string name="conn_stats_section_title_servers">SERVERS</string>
<string name="network_options_reset_to_defaults">Resetten naar standaardwaarden</string>
<string name="switch_receiving_address">Ontvangst adres wijzigen</string>
<string name="network_option_protocol_timeout">Protocol time-out</string>
<string name="network_option_protocol_timeout">Protocol timeout</string>
<string name="network_options_revert">Terugdraaien</string>
<string name="network_options_save">Opslaan</string>
<string name="network_option_seconds_label">sec</string>
@ -857,16 +859,16 @@
<string name="voice_messages_prohibited">Spraak berichten verboden!</string>
<string name="reset_verb">Resetten</string>
<string name="send_verb">Verstuur</string>
<string name="send_live_message_desc">Stuur een live bericht - het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt</string>
<string name="send_live_message_desc">Stuur een live bericht, het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt</string>
<string name="to_share_with_your_contact">(om te delen met uw contact)</string>
<string name="thank_you_for_installing_simplex">Bedankt voor het installeren van <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
<string name="use_camera_button">Gebruik camera</string>
<string name="use_camera_button">Camera</string>
<string name="smp_servers_use_server_for_new_conn">Gebruik voor nieuwe verbindingen</string>
<string name="star_on_github">Star on GitHub</string>
<string name="smp_servers_per_user">De servers voor nieuwe verbindingen van je huidige chat profiel</string>
<string name="your_SMP_servers">Uw SMP-servers</string>
<string name="saved_ICE_servers_will_be_removed">Opgeslagen WebRTC ICE-servers worden verwijderd.</string>
<string name="your_ICE_servers">Uw ICE-servers</string>
<string name="your_SMP_servers">Uw SMP servers</string>
<string name="saved_ICE_servers_will_be_removed">Opgeslagen WebRTC ICE servers worden verwijderd.</string>
<string name="your_ICE_servers">Uw ICE servers</string>
<string name="save_servers_button">Opslaan</string>
<string name="network_enable_socks">SOCKS-proxy gebruiken\?</string>
<string name="network_use_onion_hosts">Gebruik .onion-hosts</string>
@ -877,19 +879,19 @@
<string name="update_network_session_mode_question">Transportisolatiemodus updaten\?</string>
<string name="callstate_received_confirmation">bevestiging ontvangen…</string>
<string name="callstate_waiting_for_confirmation">Wachten op bevestiging…</string>
<string name="first_platform_without_user_ids">Het eerste platform zonder gebruikers-ID\'s - privé door ontwerp.</string>
<string name="first_platform_without_user_ids">Het eerste platform zonder gebruikers ID\'s, privé door ontwerp.</string>
<string name="prohibit_direct_messages">Verbied het sturen van directe berichten naar leden.</string>
<string name="prohibit_sending_voice">Verbieden het verzenden van spraak berichten.</string>
<string name="v4_2_security_assessment_desc">De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits.</string>
<string name="v4_2_auto_accept_contact_requests_desc">Met optioneel welkomstbericht.</string>
<string name="v4_3_voice_messages">Spraak berichten</string>
<string name="v4_3_irreversible_message_deletion_desc">Uw contacten kunnen volledige verwijdering van berichten toestaan.</string>
<string name="you_have_to_enter_passphrase_every_time">U moet elke keer dat de app start het wachtwoord invoeren - deze wordt niet op het apparaat opgeslagen.</string>
<string name="you_have_to_enter_passphrase_every_time">U moet elke keer dat de app start het wachtwoord invoeren, deze wordt niet op het apparaat opgeslagen.</string>
<string name="wrong_passphrase">Verkeerd wachtwoord voor de database</string>
<string name="save_passphrase_and_open_chat">Bewaar het wachtwoord en open je gesprekken</string>
<string name="database_backup_can_be_restored">De poging om het wachtwoord van de database te wijzigen is niet voltooid.</string>
<string name="restore_database">Databaseback-up terugzetten</string>
<string name="restore_database_alert_title">Databaseback-up terugzetten\?</string>
<string name="restore_database">Database back-up terugzetten</string>
<string name="restore_database_alert_title">Database back-up terugzetten\?</string>
<string name="restore_database_alert_confirm">Herstellen</string>
<string name="snd_group_event_changed_member_role">je veranderde de rol van %s in %s</string>
<string name="snd_group_event_changed_role_for_yourself">je veranderde de rol voor jezelf naar %s</string>
@ -906,38 +908,38 @@
<string name="error_smp_test_server_auth">Server vereist autorisatie om wachtrijen te maken, controleer wachtwoord</string>
<string name="set_group_preferences">Groep voorkeuren instellen</string>
<string name="share_message">Bericht delen…</string>
<string name="la_notice_title_simplex_lock">SimpleX Lock</string>
<string name="la_notice_title_simplex_lock">SimpleX Vergrendelen</string>
<string name="save_passphrase_in_keychain">Sla het wachtwoord op in Keychain</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="v4_5_italian_interface_descr">Dank aan de gebruikers draag bij via Weblate!</string>
<string name="periodic_notifications_desc">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.</string>
<string name="periodic_notifications_desc">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.</string>
<string name="image_decoding_exception_desc">De afbeelding kan niet worden gedecodeerd. Probeer een andere afbeelding of neem contact op met de ontwikkelaars.</string>
<string name="settings_section_title_themes">THEMA\'S</string>
<string name="smp_servers_scan_qr">Scan server QR-code</string>
<string name="this_string_is_not_a_connection_link">Deze string is geen verbinding link!</string>
<string name="enable_automatic_deletion_message">Deze actie kan niet ongedaan worden gemaakt - de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren.</string>
<string name="enable_automatic_deletion_message">Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren.</string>
<string name="switch_receiving_address_desc">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.</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">Om je privacy te behouden, heeft de app in plaats van push meldingen een <b><xliff:g id="appName">SimpleX</xliff:g> achtergrondservice</b> deze gebruikt een paar procent van de batterij per dag.</string>
<string name="chat_preferences_you_allow">Jij staat toe</string>
<string name="you_are_invited_to_group">Je bent uitgenodigd voor de groep</string>
<string name="you_can_connect_to_simplex_chat_founder">U kunt <font color="#0088ff">verbinding maken met <xliff:g id="appNameFull">SimpleX Chat</xliff:g> ontwikkelaars om vragen te stellen en updates te ontvangen</font>.</string>
<string name="connection_error_auth_desc">Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn - meld het alstublieft.
<string name="connection_error_auth_desc">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.</string>
<string name="update_onion_hosts_settings_question">.onion hosts-instelling updaten\?</string>
<string name="use_simplex_chat_servers__question"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>-servers gebruiken\?</string>
<string name="use_simplex_chat_servers__question"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> servers gebruiken\?</string>
<string name="voice_messages_are_prohibited">Spraak berichten zijn verboden in deze groep.</string>
<string name="personal_welcome">Welkom <xliff:g>%1$s</xliff:g>!</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">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.</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">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.</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">U kunt de chat starten via app Instellingen / Database of door de app opnieuw op te starten.</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">je hebt het adres gewijzigd voor %s</string>
<string name="snd_group_event_member_deleted">je hebt <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g> verwijderd</string>
<string name="contact_sent_large_file">Je contactpersoon heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (<xliff:g id="maxFileSize">%1$s</xliff:g>).</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">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.</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">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.</string>
<string name="invite_prohibited_description">Je probeert een contact met wie je een incognito profiel hebt gedeeld, uit te nodigen voor de groep waarin je je hoofdprofiel gebruikt</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten.
\n
\n<xliff:g id="appName">SimpleX</xliff:g>-servers kunnen uw profiel niet zien.</string>
\n<xliff:g id="appName">SimpleX</xliff:g> servers kunnen uw profiel niet zien.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">U moet zich authenticeren wanneer u de app na 30 seconden op de achtergrond start of hervat.</string>
<string name="images_limit_title">Te veel afbeeldingen!</string>
<string name="icon_descr_speaker_off">Luidspreker uit</string>
@ -946,7 +948,7 @@
<string name="sender_cancelled_file_transfer">Afzender heeft bestandsoverdracht geannuleerd.</string>
<string name="receiving_files_not_yet_supported">het ontvangen van bestanden wordt nog niet ondersteund</string>
<string name="sending_files_not_yet_supported">het verzenden van bestanden wordt nog niet ondersteund</string>
<string name="simplex_link_contact">SimpleX contactadres</string>
<string name="simplex_link_contact">SimpleX contact adres</string>
<string name="simplex_link_group">SimpleX groep link</string>
<string name="simplex_link_mode">SimpleX links</string>
<string name="simplex_link_invitation">Eenmalige SimpleX uitnodiging</string>
@ -954,7 +956,7 @@
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Er wordt geprobeerd verbinding te maken met de server die wordt gebruikt om berichten van dit contact te ontvangen (fout: <xliff:g id="errorMsg">%1$s</xliff:g>).</string>
<string name="unknown_message_format">onbekend berichtformaat</string>
<string name="simplex_link_mode_browser">Via browser</string>
<string name="description_via_contact_address_link">via contactadres link</string>
<string name="description_via_contact_address_link">via contact adres link</string>
<string name="description_via_group_link">via groep link</string>
<string name="description_via_one_time_link">via een eenmalige link</string>
<string name="simplex_link_connection">via <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
@ -962,8 +964,20 @@
<string name="description_you_shared_one_time_link">je hebt een eenmalige link gedeeld</string>
<string name="description_you_shared_one_time_link_incognito">je hebt een eenmalige link incognito gedeeld</string>
<string name="chat_help_tap_button">Tik op de knop</string>
<string name="read_more_in_github_with_link">Lees meer in onze <font color="#0088ff">GitHub-repository</font>.</string>
<string name="read_more_in_github">Lees meer in onze GitHub-repository.</string>
<string name="read_more_in_github_with_link">Lees meer in onze <font color="#0088ff">GitHub repository</font>.</string>
<string name="read_more_in_github">Lees meer in onze GitHub repository.</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> bericht(en) overgeslagen</string>
<string name="moderated_description">gemodereerd</string>
<string name="moderated_item_description">gemodereerd door %s</string>
<string name="delete_member_message__question">Bericht van lid verwijderen\?</string>
<string name="moderate_verb">Modereren</string>
<string name="moderate_message_will_be_deleted_warning">Het bericht wordt verwijderd voor alle leden.</string>
<string name="moderate_message_will_be_marked_warning">Het bericht wordt gemarkeerd als gemodereerd voor alle leden.</string>
<string name="observer_cant_send_message_desc">Neem contact op met de groep beheerder.</string>
<string name="error_updating_link_for_group">Fout bij bijwerken van groep link</string>
<string name="initial_member_role">Initiële rol</string>
<string name="group_member_role_observer">waarnemer</string>
<string name="observer_cant_send_message_title">Je kunt geen berichten versturen!</string>
<string name="you_are_observer">jij bent waarnemer</string>
<string name="language_system">Systeem</string>
</resources>

View File

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

View File

@ -6,4 +6,433 @@
<string name="chat_item_ttl_week">1 semana</string>
<string name="chat_item_ttl_month">1 mês</string>
<string name="a_plus_b">a + b</string>
<string name="alert_title_cant_invite_contacts">Não é possível convidar contatos!</string>
<string name="rcv_conn_event_switch_queue_phase_changing">mudando endereço…</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">mudando endereço para %s…</string>
<string name="snd_conn_event_switch_queue_phase_changing">"mudando endereço…"</string>
<string name="change_role">Mudar regra</string>
<string name="change_verb">Mudar</string>
<string name="incognito_random_profile_from_contact_description">Um perfil aleatório será enviado para o contato do qual você recebeu este link</string>
<string name="both_you_and_your_contacts_can_delete">Você e seu contato podem excluir mensagens enviadas de forma irreversível.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Pode ser desativado nas configurações</b> as notificações ainda serão exibidas enquanto o aplicativo estiver em execução.</string>
<string name="both_you_and_your_contact_can_send_voice">Você e seu contato podem enviar mensagens de voz.</string>
<string name="notifications_mode_off_desc">O aplicativo pode receber notificações apenas quando estiver em execução, nenhum serviço em segundo plano será iniciado</string>
<string name="notifications_mode_service">Sempre On</string>
<string name="notifications_mode_periodic_desc">Verifica novas mensagens a cada 10 minutos por até 1 minuto</string>
<string name="auth_unavailable">Autenticação indisponível</string>
<string name="icon_descr_cancel_file_preview">Cancelar visualização do arquivo</string>
<string name="icon_descr_asked_to_receive">Pediu para receber a imagem</string>
<string name="icon_descr_cancel_live_message">Cancelar mensagem ao vivo</string>
<string name="back">Voltar</string>
<string name="choose_file">Selecione o arquivo</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Adicionar novo contato</b>: para criar seu QR code único para seu contato.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Escanear \u0020QR code</b>: para se conectar ao seu contato que mostra o código QR para você.</string>
<string name="accept_contact_button">Aceitar</string>
<string name="clear_chat_question">Limpar bate-papo\?</string>
<string name="clear_verb">Limpar</string>
<string name="clear_chat_button">Limpar bate-papo</string>
<string name="clear_chat_menu_action">Limpar</string>
<string name="icon_descr_cancel_link_preview">cancelar pré-visualização do link</string>
<string name="feature_cancelled_item">cancelado %s</string>
<string name="app_version_name">Versão do App: v%s</string>
<string name="callstatus_calling">chamando…</string>
<string name="callstatus_in_progress">chamada em andamento</string>
<string name="accept">Aceitar</string>
<string name="call_already_ended">Chamada já encerrada!</string>
<string name="icon_descr_call_progress">Chamada em andamento</string>
<string name="icon_descr_call_ended">Chamada finalizada</string>
<string name="answer_call">Atender ligação</string>
<string name="integrity_msg_bad_hash">hash de mensagem ruim</string>
<string name="integrity_msg_bad_id">ID de mensagem incorreta</string>
<string name="impossible_to_recover_passphrase"><b>Observação</b>: você NÃO poderá recuperar ou alterar a senha se a perder.</string>
<string name="cannot_receive_file">Não é possível receber o arquivo</string>
<string name="icon_descr_cancel_image_preview">Cancelar visualização da imagem</string>
<string name="icon_descr_close_button">Botão Fechar</string>
<string name="clear_verification">Limpar verificação</string>
<string name="app_version_title">Versão do App</string>
<string name="accept_automatically">Automaticamente</string>
<string name="bold">negrito</string>
<string name="callstatus_error">erro de chamada</string>
<string name="settings_audio_video_calls">Chamadas de áudio e vídeo</string>
<string name="accept_call_on_lock_screen">Aceitar</string>
<string name="call_on_lock_screen">Chamadas na tela de bloqueio:</string>
<string name="icon_descr_audio_on">Áudio ligado</string>
<string name="chat_database_imported">Banco de dados de bate-papo importado</string>
<string name="keychain_is_storing_securely">"Android Keystore é usado para armazenar passphrase com segurança - permite que o serviço de notificação funcione."</string>
<string name="keychain_allows_to_receive_ntfs">"O Android Keystore será usado para armazenar passphrase com segurança depois que você reiniciar o aplicativo ou alterar a senha - isso permitirá o recebimento de notificações."</string>
<string name="cannot_access_keychain">Não é possível acessar o Keystore para salvar a senha do banco de dados</string>
<string name="chat_archive_section">ARQUIVO DE BATE-PAPO</string>
<string name="chat_is_stopped_indication">O bate-papo está parado</string>
<string name="clear_contacts_selection_button">Limpar</string>
<string name="incognito_random_profile_description">Um perfil aleatório será enviado para o seu contato</string>
<string name="chat_preferences">Preferências de bate-papo</string>
<string name="network_session_mode_user">perfil de bate-papo</string>
<string name="accept_requests">Aceitar pedidos</string>
<string name="icon_descr_audio_off">Áudio desligado</string>
<string name="auto_accept_images">Aceitar imagens automaticamente</string>
<string name="chat_database_deleted">Banco de dados de bate-papo excluído</string>
<string name="invite_prohibited">Não é possível convidar o contato!</string>
<string name="turning_off_service_and_periodic">A otimização da bateria está ativa, desligando o serviço em segundo plano e as solicitações periódicas de novas mensagens. Você pode reativá-los através das configurações.</string>
<string name="database_initialization_error_title">Não é possível inicializar o banco de dados</string>
<string name="attach">Anexar</string>
<string name="cancel_verb">Cancelar</string>
<string name="chat_console">Console de bate-papo</string>
<string name="smp_servers_check_address">Verifique o endereço do servidor e tente novamente.</string>
<string name="network_session_mode_user_description">Uma conexão TCP separada (e credencial SOCKS) será usada <b>para cada perfil de bate-papo que você tiver no aplicativo</b>.</string>
<string name="onboarding_notifications_mode_off_desc"><b>Melhor para bateria</b>. Você receberá notificações apenas quando o aplicativo estiver em execução, o serviço em segundo plano NÃO será usado.</string>
<string name="onboarding_notifications_mode_service_desc"><b>Consome mais bateria</b>! O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis.</string>
<string name="settings_section_title_chats">CONVERSAS</string>
<string name="settings_section_title_icon">ÍCONE DO APP</string>
<string name="chat_database_section">BANCO DE DADOS DE BATE-PAPO</string>
<string name="chat_is_running">O bate-papo está em execução</string>
<string name="chat_is_stopped">O bate-papo está parado</string>
<string name="change_database_passphrase_question">Alterar passphrase do banco de dados\?</string>
<string name="chat_archive_header">Arquivo de bate-papo</string>
<string name="rcv_conn_event_switch_queue_phase_completed">endereço alterado para você</string>
<string name="both_you_and_your_contact_can_send_disappearing">Você e seu contato podem enviar mensagens que desaparecem.</string>
<string name="full_backup">Backup de dados do aplicativo</string>
<string name="settings_section_title_calls">CHAMADAS</string>
<string name="v4_2_auto_accept_contact_requests">Aceitar solicitações de contato automaticamente</string>
<string name="appearance_settings">Aparência</string>
<string name="notifications_mode_service_desc">O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis.</string>
<string name="network_session_mode_entity_description">Uma conexão TCP separada (e credencial SOCKS) será usada <b>para cada contato e membro do grupo</b>. <b>Observação</b>: se você tiver muitas conexões, o consumo de bateria e tráfego pode ser substancialmente maior e algumas conexões podem falhar.</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>Bom para bateria</b>. O serviço em segundo plano verifica novas mensagens a cada 10 minutos. Você pode perder chamadas e mensagens urgentes.</string>
<string name="callstatus_ended">chamada finalizada <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="chat_with_developers">Bate-papo com os desenvolvedores</string>
<string name="create_group_link">Criar link de grupo</string>
<string name="button_create_group_link">Criar link</string>
<string name="create_secret_group_title">Criar grupo secreto</string>
<string name="theme_dark">Escuro</string>
<string name="connect_via_invitation_link">Conectar via link de convite\?</string>
<string name="connect_via_contact_link">Conectar via link de contato\?</string>
<string name="smp_server_test_create_queue">Criar fila</string>
<string name="notification_preview_mode_contact">Nome de contato</string>
<string name="notification_preview_somebody">Contato oculto:</string>
<string name="copy_verb">Copiar</string>
<string name="allow_verb">Permitir</string>
<string name="allow_to_send_disappearing">Permitir enviar mensagens que desaparecem.</string>
<string name="allow_direct_messages">Permitir o envio de mensagens diretas aos membros.</string>
<string name="connect_via_link_or_qr">Conectar via link/ QR Code</string>
<string name="clear_chat_warning">"Todas as mensagens serão excluídas - isso não pode ser desfeito! As mensagens serão excluídas APENAS para você."</string>
<string name="smp_servers_preset_add">Adicionar servidores predefinidos</string>
<string name="smp_servers_add">Adicionar servidor…</string>
<string name="create_your_profile">Crie seu perfil</string>
<string name="icon_descr_context">Ícone de contexto</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contato e todas as mensagens serão excluídas - isso não pode ser desfeito!</string>
<string name="copied">Copiado para a área de transferência</string>
<string name="accept_connection_request__question">Aceitar solicitação de conexão\?</string>
<string name="network_settings">Configurações de rede avançadas</string>
<string name="contact_requests">Solicitações de contato</string>
<string name="create_address">Criar endereço</string>
<string name="all_your_contacts_will_remain_connected">Todos os seus contatos permanecerão conectados.</string>
<string name="callstatus_accepted">chamada aceita</string>
<string name="status_contact_has_e2e_encryption">Contato tem criptografia e2e</string>
<string name="status_contact_has_no_e2e_encryption">contato não tem criptografia e2e</string>
<string name="contact_preferences">Preferências de contato</string>
<string name="allow_to_delete_messages">Permite excluir irreversivelmente as mensagens enviadas.</string>
<string name="chat_preferences_always">sempre</string>
<string name="v4_3_improved_server_configuration_desc">Adicione servidores digitalizando QR code.</string>
<string name="allow_to_send_voice">Permitir enviar mensagens de voz.</string>
<string name="create_group">Criar grupo secreto</string>
<string name="always_use_relay">Conectar via relay</string>
<string name="users_add">Adicionar perfil</string>
<string name="connect_via_link">Conectar via link</string>
<string name="create_profile">Criar perfil</string>
<string name="database_encrypted">Banco de dados criptografado!</string>
<string name="group_member_status_creator">criador</string>
<string name="users_delete_all_chats_deleted">Todos os bate-papos e mensagens serão excluídos - isso não pode ser desfeito!</string>
<string name="accept_feature">Aceitar</string>
<string name="allow_disappearing_messages_only_if">Permitir mensagens que desaparecem apenas se o seu contato permitir.</string>
<string name="allow_irreversible_message_deletion_only_if">Permita a exclusão irreversível da mensagem somente se o seu contato permitir.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Permitir que seus contatos enviem mensagens que desaparecem.</string>
<string name="allow_voice_messages_only_if">Permitir mensagens de voz somente se o seu contato permitir.</string>
<string name="allow_your_contacts_to_send_voice_messages">Permitir que seus contatos enviem mensagens de voz.</string>
<string name="group_member_role_admin">admin</string>
<string name="all_group_members_will_remain_connected">Todos os membros do grupo permanecerão conectados.</string>
<string name="contacts_can_mark_messages_for_deletion">"Contatos podem marcar mensagens para exclusão; você será capaz de visualizá-los."</string>
<string name="connect_via_group_link">Conectar via link do grupo\?</string>
<string name="contact_already_exists">Contato já existe</string>
<string name="icon_descr_contact_checked">Contato verificado</string>
<string name="alert_title_contact_connection_pending">Contato ainda não está conectado!</string>
<string name="contribute">Contribuir</string>
<string name="create_profile_button">Criar</string>
<string name="network_enable_socks_info">"Acessar os servidores via proxy SOCKS na porta 9050\? O proxy deve ser iniciado antes de habilitar esta opção."</string>
<string name="allow_your_contacts_irreversibly_delete">Permitir que seus contatos excluam de forma irreversível as mensagens enviadas.</string>
<string name="smp_servers_add_to_another_device">Adicionar a outro dispositivo</string>
<string name="v4_2_group_links_desc">Os administradores podem criar os links para ingressar em grupos.</string>
<string name="allow_voice_messages_question">Permitir mensagens de voz\?</string>
<string name="button_delete_group">Excluir grupo</string>
<string name="info_row_connection">Conexão</string>
<string name="users_delete_question">Excluir perfil de bate-papo\?</string>
<string name="full_deletion">Excluir para todos</string>
<string name="connect_via_link_verb">Conectar</string>
<string name="server_connected">conectado</string>
<string name="server_connecting">conectando</string>
<string name="deleted_description">excluído</string>
<string name="smp_server_test_connect">Conectar</string>
<string name="delete_group_menu_action">Excluir</string>
<string name="connect_button">Conectar</string>
<string name="callstatus_connecting">conectando chamada…</string>
<string name="delete_chat_profile_question">Excluir perfil de bate-papo\?</string>
<string name="delete_files_and_media_for_all_users">Excluir arquivos de todos os perfis de bate-papo</string>
<string name="display_name_connecting">conectando…</string>
<string name="connection_error">Erro de conexão</string>
<string name="button_delete_contact">Excluir contato</string>
<string name="configure_ICE_servers">Configurar servidores ICE</string>
<string name="delete_address__question">Excluir endereço\?</string>
<string name="decentralized">Descentralizado</string>
<string name="delete_database">Excluir banco de dados</string>
<string name="set_password_to_export_desc">"O banco de dados é criptografado usando um passphrase aleatório. Por favor, altere-o antes de exportar."</string>
<string name="confirm_new_passphrase">Confirmar nova passphrase…</string>
<string name="current_passphrase">Passphrase atual…</string>
<string name="database_passphrase_is_required">Passphrase do banco de dados é necessária para abrir o chat.</string>
<string name="delete_archive">Excluir arquivo</string>
<string name="delete_chat_archive_question">Excluir arquivo de bate-papo\?</string>
<string name="rcv_group_event_changed_member_role">regra alterada de %s para %s</string>
<string name="rcv_group_event_member_connected">conectado</string>
<string name="delete_link">Excluir link</string>
<string name="delete_link_question">Excluir link\?</string>
<string name="chat_preferences_default">padrão (%s)</string>
<string name="connection_request_sent">Solicitação de conexão enviada!</string>
<string name="group_member_status_connecting">conectando</string>
<string name="contact_connection_pending">conectando…</string>
<string name="for_me_only">Excluir para mim</string>
<string name="group_connection_pending">conectando…</string>
<string name="delete_contact_question">Excluir contato\?</string>
<string name="confirm_verb">confirmar</string>
<string name="database_passphrase_and_export">Passphrase e exportação do banco de dados</string>
<string name="icon_descr_call_connecting">Conectando chamada</string>
<string name="delete_messages">Excluir mensagens</string>
<string name="database_passphrase_will_be_updated">Passphrase de criptografia do banco de dados será atualizada.</string>
<string name="database_error">Erro de banco de dados</string>
<string name="passphrase_is_different">Passphrase do banco de dados é diferente da salva no Keystore.</string>
<string name="group_member_status_complete">completo</string>
<string name="info_row_database_id">ID do banco de dados</string>
<string name="colored">colorido</string>
<string name="callstate_connected">conectado</string>
<string name="notification_contact_connected">Conectado</string>
<string name="icon_descr_server_status_connected">Conectado</string>
<string name="audio_call_no_encryption">chamada de áudio (não criptografada em e2e)</string>
<string name="change_member_role_question">Alterar a regra do grupo\?</string>
<string name="icon_descr_audio_call">chamada de áudio</string>
<string name="rcv_group_event_changed_your_role">mudou sua regra para %s</string>
<string name="v4_4_verify_connection_security_desc">Compare os códigos de segurança com seus contatos.</string>
<string name="auth_confirm_credential">Confirme sua credencial</string>
<string name="callstate_connecting">conectando…</string>
<string name="group_member_status_announced">conectando (anunciado)</string>
<string name="network_session_mode_entity">Conexão</string>
<string name="connection_error_auth">Erro de conexão (AUTH)</string>
<string name="display_name_connection_established">conexão estabelecida</string>
<string name="connection_local_display_name">conexão <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="archive_created_on_ts">Criado em <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="maximum_supported_file_size">Atualmente, o tamanho máximo de arquivo suportado é <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="delete_verb">Excluir</string>
<string name="database_encryption_will_be_updated">Passphase de criptografia do banco de dados será atualizada e armazenada no Keystore.</string>
<string name="delete_address">Excluir endereço</string>
<string name="encrypted_with_random_passphrase">"O banco de dados é criptografado usando um passphrase aleatório, você pode alterá-la."</string>
<string name="database_passphrase">Passphrase do banco de dados</string>
<string name="database_will_be_encrypted_and_passphrase_stored">O banco de dados será criptografado e o passphrase armazenado no Keystore.</string>
<string name="database_will_be_encrypted">O banco de dados será criptografado.</string>
<string name="ttl_day">%d dia</string>
<string name="image_decoding_exception_title">Erro de decodificação</string>
<string name="delete_contact_menu_action">Excluir</string>
<string name="ttl_days">%d dias</string>
<string name="delete_files_and_media_all">Excluir todos os arquivos</string>
<string name="delete_message__question">Excluir mensagem\?</string>
<string name="delete_after">Excluir depois</string>
<string name="users_delete_profile_for">Excluir perfil de bate-papo para</string>
<string name="rcv_group_event_group_deleted">grupo excluído</string>
<string name="delete_group_question">Excluir grupo\?</string>
<string name="delete_image">Excluir imagem</string>
<string name="delete_files_and_media_question">Excluir arquivos e mídia\?</string>
<string name="group_member_status_connected">conectado</string>
<string name="group_member_status_accepted">conectando (aceito)</string>
<string name="ttl_d">%dd</string>
<string name="v4_5_transport_isolation_descr">Por perfil de bate-papo (padrão) ou por conexão (BETA).</string>
<string name="accept_contact_incognito_button">Aceitar anônimo</string>
<string name="delete_messages_after">Excluir mensagens após</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 desktop: Scaneie o QR code exibido no aplicativo, via <b>Scan QR code</b></string>
<string name="delete_pending_connection__question">Excluir conexão pendente\?</string>
<string name="simplex_link_mode_description">Descrição</string>
<string name="smp_servers_delete_server">Excluir servidor</string>
<string name="group_member_status_intro_invitation">conectando (introduction invitation)</string>
<string name="connection_timeout">Tempo de conexão esgotado</string>
<string name="delete_member_message__question">Excluir mensagem do membro\?</string>
<string name="smp_server_test_delete_queue">Excluir fila</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="settings_developer_tools">Ferramentas de desenvolvimento</string>
<string name="group_member_status_introduced">conectando (introduced)</string>
<string name="color_primary">Realçar</string>
<string name="error_removing_member">Erro ao remover membro</string>
<string name="error_changing_role">Erro ao alterar regra</string>
<string name="conn_level_desc_direct">direto</string>
<string name="server_error">erro</string>
<string name="failed_to_parse_chat_title">Falha ao carregar o bate-papo</string>
<string name="error_setting_network_config">Erro ao atualizar a configuração de rede</string>
<string name="error_sending_message">Erro ao enviar mensagem</string>
<string name="error_adding_members">Erro ao adicionar membro(s)</string>
<string name="smp_server_test_disconnect">Desconectar</string>
<string name="error_deleting_user">Erro ao excluir perfil do usuário</string>
<string name="ttl_s">%ds</string>
<string name="ttl_months">%d meses</string>
<string name="ttl_weeks">%d semanas</string>
<string name="encrypt_database_question">Criptografar banco de dados\?</string>
<string name="error_receiving_file">Erro ao receber arquivo</string>
<string name="error_creating_address">Erro ao criar endereço</string>
<string name="display_name__field">Nome de exibição:</string>
<string name="error_starting_chat">Erro ao iniciar o bate-papo</string>
<string name="error_deleting_database">Erro ao excluir banco de dados de bate-papo</string>
<string name="encrypt_database">Criptografar</string>
<string name="network_option_enable_tcp_keep_alive">Ativar TCP keep-alive</string>
<string name="failed_to_create_user_title">Erro ao criar perfil!</string>
<string name="error_joining_group">Erro ao ingressar no grupo</string>
<string name="failed_to_create_user_duplicate_title">Nome de exibição duplicado!</string>
<string name="error_deleting_contact">Erro ao excluir contato</string>
<string name="error_changing_address">Erro ao alterar endereço</string>
<string name="error_deleting_pending_contact_connection">Erro ao excluir conexão de contato pendente</string>
<string name="edit_verb">Editar</string>
<string name="enable_automatic_deletion_question">Ativar exclusão automática de mensagens\?</string>
<string name="ttl_sec">%d sec</string>
<string name="error_saving_smp_servers">Erro ao salvar servidores SMP</string>
<string name="error_accepting_contact_request">Erro ao aceitar solicitação de contato</string>
<string name="error_deleting_contact_request">Erro ao excluir solicitação de contato</string>
<string name="failed_to_active_user_title">Erro ao trocar de perfil!</string>
<string name="auth_disable_simplex_lock">Desativar Bloqueio SimpleX</string>
<string name="auth_enable_simplex_lock">Ativar Bloqueio SimpleX</string>
<string name="icon_descr_edited">editado</string>
<string name="icon_descr_server_status_error">Erro</string>
<string name="icon_descr_email">Email</string>
<string name="error_saving_ICE_servers">Erro ao salvar servidores ICE</string>
<string name="exit_without_saving">Sair sem salvar</string>
<string name="display_name">Nome de exibição</string>
<string name="encrypted_video_call">chamada de vídeo criptografada e2e</string>
<string name="integrity_msg_duplicate">mensagem duplicada</string>
<string name="status_e2e_encrypted">criptografado e2e</string>
<string name="export_database">Exportar banco de dados</string>
<string name="total_files_count_and_size">%d arquivo(s) com tamanho total de %s</string>
<string name="error_exporting_chat_database">Erro ao exportar banco de dados de bate-papo</string>
<string name="error_importing_database">Erro ao importar banco de dados de bate-papo</string>
<string name="error_stopping_chat">Erro ao interromper o bate-papo</string>
<string name="error_changing_message_deletion">Erro ao alterar configuração</string>
<string name="error_encrypting_database">Erro ao criptografar o banco de dados</string>
<string name="encrypted_database">Banco de dados criptografado</string>
<string name="enter_correct_passphrase">Digite o passphrase correto.</string>
<string name="enter_passphrase">Digite o passphrase…</string>
<string name="error_with_info">Erro: %s</string>
<string name="button_edit_group_profile">Editar perfil do grupo</string>
<string name="icon_descr_expand_role">Expandir seleção de regra</string>
<string name="error_saving_group_profile">Erro ao salvar o perfil do grupo</string>
<string name="direct_messages">Mensagens diretas</string>
<string name="feature_enabled">habilitado</string>
<string name="feature_enabled_for_contact">habilitado para contato</string>
<string name="feature_enabled_for_you">ativado para você</string>
<string name="ttl_m">%dm</string>
<string name="ttl_min">%d min</string>
<string name="ttl_month">%d mês</string>
<string name="ttl_week">%d semana</string>
<string name="ttl_hour">%d hora</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">A autenticação do dispositivo não está habilitada. Você pode ativar o Bloqueio SimpleX em Configurações, depois de ativar a autenticação do dispositivo.</string>
<string name="no_call_on_lock_screen">Desativar</string>
<string name="icon_descr_server_status_disconnected">Desconectado</string>
<string name="disappearing_messages_are_prohibited">Mensagens que desaparecem(temporárias) são proibidas neste grupo.</string>
<string name="error_saving_file">Erro ao salvar arquivo</string>
<string name="display_name_cannot_contain_whitespace">O nome de exibição não pode conter espaços em branco.</string>
<string name="encrypted_audio_call">chamada de áudio criptografada e2e</string>
<string name="edit_image">Editar imagem</string>
<string name="smp_servers_enter_manually">Insira o servidor manualmente</string>
<string name="error_deleting_group">Erro ao excluir grupo</string>
<string name="settings_experimental_features">Funcionalidades experimentais</string>
<string name="error_creating_link_for_group">Erro ao criar o link de grupo</string>
<string name="error_deleting_link_for_group">Erro ao excluir o link de grupo</string>
<string name="direct_messages_are_prohibited_in_chat">Mensagens diretas entre membros são proibidas neste grupo.</string>
<string name="ttl_h">%dh</string>
<string name="ttl_hours">%d horas</string>
<string name="description_via_contact_address_link_incognito">anônimo via link de endereço de contato</string>
<string name="description_via_one_time_link_incognito">anônimo via link único</string>
<string name="hide_verb">Esconder</string>
<string name="from_gallery_button">Da Galeria</string>
<string name="group_members_can_send_disappearing">Os membros do grupo podem enviar mensagens que desaparecem.</string>
<string name="icon_descr_file">Arquivo</string>
<string name="full_name__field">Nome completo:</string>
<string name="incoming_audio_call">Chamada de áudio recebida</string>
<string name="v4_4_disappearing_messages">Mensagens que desaparecem</string>
<string name="v4_3_improved_privacy_and_security_desc">"Ocultar aplicativo nos aplicativos recentes."</string>
<string name="icon_descr_image_snd_complete">Imagem enviada</string>
<string name="group_link">Link do grupo</string>
<string name="import_database">Importar banco de dados</string>
<string name="alert_message_group_invitation_expired">O convite de grupo não é mais válido, foi removido pelo remetente.</string>
<string name="icon_descr_group_inactive">Grupo inativo</string>
<string name="alert_title_no_group">Grupo não encontrado!</string>
<string name="delete_group_for_self_cannot_undo_warning">O grupo será excluído para você - isso não pode ser desfeito!</string>
<string name="info_row_group">Grupo</string>
<string name="conn_level_desc_indirect">indireto (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="incognito">Anônimo</string>
<string name="timed_messages">Mensagens que desaparecem</string>
<string name="group_preferences">Preferências de grupo</string>
<string name="disappearing_prohibited_in_this_chat">Mensagens que desaparecem são proibidas nesse bate-papo.</string>
<string name="group_members_can_send_dms">Os membros do grupo podem enviar mensagens diretas.</string>
<string name="ttl_mth">%dmês</string>
<string name="simplex_link_mode_full">Link completo</string>
<string name="hide_notification">Esconder</string>
<string name="auth_device_authentication_is_disabled_turning_off">A autenticação do dispositivo está desativada. Desativando o SimpleX Lock.</string>
<string name="for_everybody">Para todos</string>
<string name="notification_preview_mode_hidden">Escondido</string>
<string name="create_one_time_link">Gerar um link de convite único.</string>
<string name="how_to_use_your_servers">Como usar seus servidores</string>
<string name="import_database_confirmation">Importar</string>
<string name="import_database_question">Importar banco de dados de bate-papo\?</string>
<string name="group_display_name_field">Nome de exibição do grupo:</string>
<string name="group_full_name_field">Nome completo do grupo:</string>
<string name="v4_2_group_links">Links de grupo</string>
<string name="v4_3_improved_privacy_and_security">Privacidade e segurança aprimoradas</string>
<string name="failed_to_parse_chats_title">Falha ao carregar bate-papos</string>
<string name="file_with_path">Arquivo: %s</string>
<string name="file_saved">Arquivo salvo</string>
<string name="group_members_can_send_voice">Os membros do grupo podem enviar mensagens de voz.</string>
<string name="delete_group_for_all_members_cannot_undo_warning">O grupo será excluído para todos os membros - isso não pode ser desfeito!</string>
<string name="settings_section_title_help">AJUDA</string>
<string name="notification_display_mode_hidden_desc">Ocultar contato e mensagem</string>
<string name="how_to_use_simplex_chat">Como usar</string>
<string name="how_to_use_markdown">Como usar markdown</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Se você não puder se encontrar pessoalmente, <b>mostre o QR code na videochamada</b> ou compartilhe o link.</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Se você não puder encontrar pessoalmente, você pode <b>escanear o QR code na videochamada</b> ou seu contato pode compartilhar um link de convite.</string>
<string name="network_disable_socks_info">Se você confirmar, os servidores de mensagens poderão ver seu endereço IP e seu provedor - e quais servidores você está se conectando.</string>
<string name="image_descr">Imagem</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Se você recebeu o link de convite <xliff:g id="appName">SimpleX Chat</xliff:g>, você pode abri-lo em seu navegador:</string>
<string name="image_saved">Imagem salva na galeria</string>
<string name="group_unsupported_incognito_main_profile_sent">O modo de navegação anônima não é suportado aqui - seu perfil principal será enviado aos membros do grupo</string>
<string name="description_via_group_link_incognito">anônimo via link do grupo</string>
<string name="incoming_video_call">Chamada de vídeo recebida</string>
<string name="turn_off_battery_optimization">Para usá-lo, por favor <b>desative a otimização da bateria</b> para <xliff:g id="appName">SimpleX</xliff:g> na próxima caixa de diálogo. Caso contrário, as notificações serão desativadas.</string>
<string name="share_one_time_link">Gerar um link de convite único</string>
<string name="file_not_found">Arquivo não encontrado</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Se você optar por rejeitar o remetente NÃO será notificado.</string>
<string name="incorrect_code">Código de segurança incorreto!</string>
<string name="install_simplex_chat_for_terminal">Instale o <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para o terminal</string>
<string name="full_name_optional__prompt">Nome Completo (opcional)</string>
<string name="how_it_works">Como funciona</string>
<string name="immune_to_spam_and_abuse">Imune a spam e abuso</string>
<string name="icon_descr_flip_camera">Vire a câmera</string>
<string name="icon_descr_hang_up">Desligar</string>
<string name="settings_section_title_incognito">Modo anônimo</string>
<string name="initial_member_role">Regra inicial</string>
<string name="snd_group_event_group_profile_updated">perfil do grupo atualizado</string>
<string name="group_member_status_group_deleted">Grupo excluído</string>
<string name="incognito_info_protects">O modo de navegação anônima protege a privacidade do nome e da imagem do seu perfil principal — para cada novo contato, um novo perfil aleatório é criado.</string>
<string name="group_members_can_delete">Os membros do grupo podem excluir mensagens enviadas de forma irreversível.</string>
<string name="ttl_w">%dsemana</string>
<string name="v4_3_improved_server_configuration">Configuração de servidor aprimorada</string>
<string name="v4_4_french_interface">Interface francesa</string>
<string name="callstate_ended">terminou</string>
<string name="allow_accepting_calls_from_lock_screen">Ative as chamadas pela tela de bloqueio nas Configurações.</string>
<string name="files_and_media_section">Arquivos &amp; mídia</string>
<string name="error_updating_link_for_group">Erro ao atualizar o link do grupo</string>
<string name="group_invitation_expired">O convite do grupo expirou</string>
<string name="file_will_be_received_when_contact_is_online">O arquivo será recebido quando seu contato estiver online, aguarde ou verifique mais tarde!</string>
<string name="group_profile_is_stored_on_members_devices">O perfil do grupo é armazenado nos dispositivos dos membros, não nos servidores.</string>
<string name="icon_descr_help">ajuda</string>
<string name="how_simplex_works">Como <xliff:g id="appName">SimpleX</xliff:g> funciona</string>
<string name="enter_one_ICE_server_per_line">Servidores ICE (um por linha)</string>
<string name="ignore">Ignorar</string>
<string name="image_will_be_received_when_contact_is_online">A imagem será recebida quando seu contato estiver online, aguarde ou verifique mais tarde!</string>
</resources>

View File

@ -514,13 +514,15 @@
<!-- Call settings -->
<string name="settings_audio_video_calls">Аудио- и видеозвонки</string>
<string name="your_calls">Ваши звонки</string>
<string name="connect_calls_via_relay">Соединяться через сервер (relay)</string>
<string name="always_use_relay">Всегда соединяться через relay</string>
<string name="call_on_lock_screen">Звонки на экране блокировки:</string>
<string name="accept_call_on_lock_screen">Принимать</string>
<string name="show_call_on_lock_screen">Показывать</string>
<string name="no_call_on_lock_screen">Выключить</string>
<string name="your_ice_servers">Ваши ICE серверы</string>
<string name="webrtc_ice_servers">WebRTC ICE серверы</string>
<string name="relay_server_protects_ip">Relay сервер защищает ваш IP адрес, но может отслеживать продолжительность звонка.</string>
<string name="relay_server_if_necessary">Relay сервер используется только при необходимости. Другая сторона может видеть ваш IP адрес.</string>
<!-- Call Lock Screen -->
<string name="open_simplex_chat_to_accept_call">Откройте <xliff:g id="appNameFull">SimpleX Chat</xliff:g>\nчтобы принять звонок</string>
<string name="allow_accepting_calls_from_lock_screen">Вы можете разрешить принимать звонки на экране блокировки через Настройки.</string>
@ -1039,4 +1041,15 @@
<string name="v4_5_reduced_battery_usage">Уменьшенное потребление батареи</string>
<string name="v4_5_transport_isolation">Отдельные транспортные сессии</string>
<string name="moderated_description">удалено</string>
<string name="moderated_item_description">удалено %s</string>
<string name="delete_member_message__question">Удалить сообщение участника\?</string>
<string name="moderate_verb">Модерировать</string>
<string name="moderate_message_will_be_deleted_warning">Сообщение будет удалено для всех членов группы.</string>
<string name="moderate_message_will_be_marked_warning">Сообщение будет помечено как удаленное для всех членов группы.</string>
<string name="observer_cant_send_message_desc">Пожалуйста, свяжитесь с админом группы.</string>
<string name="observer_cant_send_message_title">Вы не можете отправлять сообщения!</string>
<string name="you_are_observer">только чтение сообщений</string>
<string name="group_member_role_observer">читатель</string>
<string name="initial_member_role">Роль при вступлении</string>
<string name="error_updating_link_for_group">Ошибка обновления ссылки группы</string>
</resources>

View File

@ -9,9 +9,9 @@
<string name="accept_contact_button">接受</string>
<string name="accept_call_on_lock_screen">接受</string>
<string name="accept_feature">接受</string>
<string name="chat_item_ttl_month">1月</string>
<string name="chat_item_ttl_month">1</string>
<string name="chat_item_ttl_week">1周</string>
<string name="color_primary">强化</string>
<string name="color_primary">色调</string>
<string name="callstatus_accepted">已接受通话</string>
<string name="accept">接受</string>
<string name="network_enable_socks_info">通过 SOCKS 代理访问服务器在端口9050允许该选项前必须开始代理。</string>
@ -38,7 +38,7 @@
<string name="messages_section_title">消息</string>
<string name="delete_messages_after">在此后删除消息</string>
<string name="settings_section_title_messages">消息</string>
<string name="users_add">添加资料</string>
<string name="users_add">添加个人资料</string>
<string name="users_delete_all_chats_deleted">所有聊天记录和消息将被删除——这一行为无法撤销!</string>
<string name="clear_chat_warning">所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。</string>
<string name="allow_to_send_voice">允许发送语音消息。</string>
@ -67,7 +67,7 @@
<string name="connect_via_contact_link">通过联系人链接连接?</string>
<string name="connect_via_group_link">通过群组链接连接?</string>
<string name="connect_via_link_or_qr">通过群组链接/二维码连接</string>
<string name="connect_calls_via_relay">通过中继连接</string>
<string name="always_use_relay">通过中继连接</string>
<string name="allow_your_contacts_irreversibly_delete">允许您的联系人不可撤回地删除已发送消息。</string>
<string name="chat_preferences_contact_allows">联系人允许</string>
<string name="allow_voice_messages_only_if">仅有您的联系人许可后才允许语音消息。</string>
@ -99,7 +99,7 @@
<string name="app_version_title">应用程序版本</string>
<string name="full_backup">应用程序数据备份</string>
<string name="settings_section_title_icon">应用程序图标</string>
<string name="incognito_random_profile_from_contact_description">一个随机资料将被发送到收到您链接的联系人那里</string>
<string name="incognito_random_profile_from_contact_description">随机配置文件将发送给您从中收到此链接的联系人</string>
<string name="app_version_name">应用程序版本v%s</string>
<string name="notifications_mode_off_desc">仅在运行时应用程序可以接受通知,不会启动后台服务</string>
<string name="incognito_random_profile_description">一个随机资料将发送给您的联系人</string>
@ -185,20 +185,20 @@
<string name="incognito">隐身聊天</string>
<string name="joining_group">加入群组</string>
<string name="join_group_incognito_button">加入隐身聊天</string>
<string name="settings_section_title_incognito">隐身聊天模式</string>
<string name="group_unsupported_incognito_main_profile_sent">这里不支持隐身聊天模式——您的主要资料将被发送给群组成员</string>
<string name="settings_section_title_incognito">隐身模式</string>
<string name="group_unsupported_incognito_main_profile_sent">此处不支持隐身模式——您的主要个人资料将发送给群组成员</string>
<string name="tap_to_start_new_chat">点击开始一个新聊天</string>
<string name="incognito_random_profile">您的随机资料</string>
<string name="description_via_contact_address_link_incognito">通过联系地址链接隐身聊天</string>
<string name="description_via_group_link_incognito">通过群组链接隐身聊天</string>
<string name="description_via_contact_address_link_incognito">通过联系地址链接隐身</string>
<string name="description_via_group_link_incognito">通过群组链接隐身</string>
<string name="description_you_shared_one_time_link_incognito">您分享了一次性链接隐身聊天</string>
<string name="group_invitation_tap_to_join_incognito">点击以加入隐身聊天</string>
<string name="group_main_profile_sent">您的聊天资料将被发送给群组成员</string>
<string name="invite_prohibited_description">您正在尝试邀请与您共享隐身聊天资料的联系人加入您使用主要资料的群组</string>
<string name="incognito_info_protects">隐身聊天模式可以保护您的主要资料名和头像的隐私——为每个新联系人创建一个新的随机资料。</string>
<string name="alert_title_cant_invite_contacts_descr">您正在为该群组使用隐身聊天资料——为防止共享您的主要资料,邀请联系人是不允许的</string>
<string name="invite_prohibited_description">您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组</string>
<string name="incognito_info_protects">隐身模式可以保护你的主要个人资料名称和图像的隐私——对于每个新的联系人,都会创建一个新的随机个人资料。</string>
<string name="alert_title_cant_invite_contacts_descr">您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人</string>
<string name="your_profile_will_be_sent">您的聊天资料将被发送给您的联系人</string>
<string name="description_via_one_time_link_incognito">通过一次性链接隐身聊天</string>
<string name="description_via_one_time_link_incognito">通过一次性链接隐身</string>
<string name="only_group_owners_can_enable_voice">只有群主可以启用语音信息。</string>
<string name="your_privacy">您的隐私设置</string>
<string name="privacy_and_security">隐私和安全</string>
@ -218,7 +218,7 @@
<string name="passphrase_is_different">数据库密码不同于保存在密钥库中的密码。</string>
<string name="database_encryption_will_be_updated">数据库加密密码将被更新并存储在密钥库中。</string>
<string name="database_will_be_encrypted_and_passphrase_stored">数据库将被加密,密码存储在密钥库中。</string>
<string name="restore_passphrase_not_found_desc">在密匙库中没有找到密码,请手动输入。如果使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。</string>
<string name="restore_passphrase_not_found_desc">在密匙库中没有找到密码,请手动输入。如果使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。</string>
<string name="remove_passphrase_from_keychain">从密钥库中删除密码?</string>
<string name="save_passphrase_in_keychain">在密钥库中保存密码</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务</string>
@ -335,7 +335,7 @@
<string name="icon_descr_contact_checked">已检查联系人</string>
<string name="notification_preview_somebody">联系人已隐藏:</string>
<string name="alert_title_contact_connection_pending">联系人尚未连接!</string>
<string name="icon_descr_context">背景图标</string>
<string name="icon_descr_context">上下文图标</string>
<string name="copied">复制到剪贴板</string>
<string name="contact_connection_pending">连接中……</string>
<string name="create_group_link">创建群组链接</string>
@ -373,7 +373,7 @@
<string name="group_member_status_group_deleted">群组已删除</string>
<string name="delete_group_for_all_members_cannot_undo_warning">将为所有成员删除群组——此操作无法撤消!</string>
<string name="conn_level_desc_direct">直接</string>
<string name="direct_messages">私聊</string>
<string name="direct_messages">直接信息</string>
<string name="feature_enabled">已启用</string>
<string name="group_members_can_send_voice">群组成员可以发送语音消息。</string>
<string name="v4_2_group_links">群组链接</string>
@ -441,7 +441,7 @@
<string name="enable_automatic_deletion_question">启用自动删除消息?</string>
<string name="section_title_for_console">用于控制台</string>
<string name="direct_messages_are_prohibited_in_chat">此群中禁止成员之间私聊。</string>
<string name="disappearing_messages_are_prohibited">此群组中禁止显示限时消息。</string>
<string name="disappearing_messages_are_prohibited">该组禁止限时消息。</string>
<string name="group_members_can_delete">群组成员可以不可撤回地删除已发送的消息。</string>
<string name="group_members_can_send_dms">群组成员可以私信。</string>
<string name="v4_4_disappearing_messages">限时消息</string>
@ -463,7 +463,7 @@
<string name="info_row_local_name">本地名称</string>
<string name="invalid_message_format">无效的消息格式</string>
<string name="invalid_data">无效数据</string>
<string name="live">LIVE</string>
<string name="live">实时</string>
<string name="display_name_invited_to_connect">已邀请连接</string>
<string name="invalid_connection_link">无效的连接链接</string>
<string name="italic">斜体</string>
@ -540,7 +540,7 @@
<string name="notifications">通知</string>
<string name="simplex_service_notification_text">正在接收消息……</string>
<string name="enter_passphrase_notification_desc">要接收通知,请输入数据库密码</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">为了保护您的隐私,该应用程序没有推送通知,而是一个 <b><xliff:g id="appName">SimpleX</xliff:g> 后台服务 </b>——它每天使用百分之几的电池。</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">为了保护您的隐私,该应用程序没有推送通知,而是具有 <b><xliff:g id="appName">SimpleX</xliff:g> 后台服务 </b>——它每天使用百分之几的电池。</string>
<string name="your_settings">您的设置</string>
<string name="turn_off_battery_optimization">为了使用它,请 <b>禁用电池优化</b><xliff:g id="appName">SimpleX</xliff:g>在下一个对话框。否则通知将被禁用。</string>
<string name="settings_notification_preview_title">通知预览</string>
@ -549,7 +549,7 @@
<string name="notifications_mode_off">在应用程序打开时运行</string>
<string name="settings_notification_preview_mode_title">显示预览</string>
<string name="periodic_notifications_desc">该应用程序会定期获取新消息——它每天会消耗百分之几的电量。该应用程序不使用推送通知——您设备中的数据不会发送到服务器。</string>
<string name="v4_3_irreversible_message_deletion_desc">的联系人可以允许完全删除消息。</string>
<string name="v4_3_irreversible_message_deletion_desc">的联系人可以允许完全删除消息。</string>
<string name="v4_4_disappearing_messages_desc">已发送的消息将在设定的时间后被删除。</string>
<string name="your_chat_database">您的聊天数据库</string>
<string name="wrong_passphrase_title">密码错误!</string>
@ -576,7 +576,7 @@
<string name="update_network_settings_confirmation">更新</string>
<string name="open_simplex_chat_to_accept_call">打开 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 来接听电话</string>
<string name="icon_descr_video_call">视频通话</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> 想通过方式与您联系</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> 想通过以下方式与您联系</string>
<string name="icon_descr_call_rejected">拒接来电</string>
<string name="call_connection_peer_to_peer">点对点</string>
<string name="error_with_info">错误:%s</string>
@ -592,12 +592,12 @@
<string name="your_chat_profiles">您的聊天资料</string>
<string name="icon_descr_call_missed">未接来电</string>
<string name="icon_descr_call_pending_sent">待定来电</string>
<string name="your_chat_profiles_stored_locally">您的聊天资料存储在本地,在您的设备上</string>
<string name="your_chat_profiles_stored_locally">您的聊天资料存储在本地,仅存储在您的设备上</string>
<string name="connection_error_auth_desc">除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。
\n如果要连接请让您的联系人创建另一个连接链接并检查您的网络连接是否稳定。</string>
<string name="you_are_already_connected_to_vName_via_this_link">您已经连接到 <xliff:g id="contactName" example="Alice">%1$s!</xliff:g></string>
<string name="your_chat_profile_will_be_sent_to_your_contact">您的聊天资料将被发送
\n给的联系人</string>
\n给的联系人</string>
<string name="users_delete_with_connections">资料和服务器连接</string>
<string name="update_network_settings_question">更新网络设置?</string>
<string name="only_you_can_delete_messages">只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。</string>
@ -615,7 +615,7 @@
<string name="rcv_group_event_updated_group_profile">已更新的群组资料</string>
<string name="rcv_group_event_member_deleted">已删除 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="snd_group_event_member_deleted">您删除了 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="profile_will_be_sent_to_contact_sending_link">您的资料将被发送到收到您链接的联系人那里</string>
<string name="profile_will_be_sent_to_contact_sending_link">您的个人资料将发送给您收到此链接的联系人</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">正在尝试连接到用于从该联系人接收消息的服务器(错误:<xliff:g id="errorMsg">%1$s</xliff:g>)。</string>
<string name="connected_to_server_to_receive_messages_from_contact">您已连接到用于接收该联系人消息的服务器。</string>
<string name="description_you_shared_one_time_link">您分享了一次性链接</string>
@ -644,4 +644,341 @@
<string name="v4_5_multiple_chat_profiles">多个聊天资料</string>
<string name="database_initialization_error_desc">数据库不能正常工作。点击了解更多</string>
<string name="message_delivery_error_title">消息传递错误</string>
<string name="ttl_hour">%d 小时</string>
<string name="ttl_hours">%d 小时</string>
<string name="ttl_month">%d 月</string>
<string name="ttl_sec">%d 秒</string>
<string name="how_simplex_works"><xliff:g id="appName">SimpleX</xliff:g> 是如何工作的</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。</string>
<string name="many_people_asked_how_can_it_deliver">许多人问:<i>如果<xliff:g id="appName">SimpleX</xliff:g>没有用户标识符,它是怎样传递信息的?</i></string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">确保 SMP 服务器地址格式正确、每行分开且不重复。</string>
<string name="markdown_help">Markdown 帮助</string>
<string name="mark_code_verified">标记为已验证</string>
<string name="make_private_connection">建立私密连接</string>
<string name="group_preview_join_as">以 %s 身份加入</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">如果您收到 <xliff:g id="appName">SimpleX Chat</xliff:g> 邀请链接,您可以在浏览器中打开它:</string>
<string name="mark_read">标记为已读</string>
<string name="mark_unread">标记为未读</string>
<string name="markdown_in_messages">在消息中使用 Markdown</string>
<string name="file_with_path">文件:%s</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">成员将被移出群组——此操作无法撤消!</string>
<string name="v4_5_message_draft">消息草稿</string>
<string name="thousand_abbreviation">k</string>
<string name="marked_deleted_description">标记为已删除</string>
<string name="ttl_week">%d 星期</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">您将停止接收来自该群组的消息。聊天记录将被保留。</string>
<string name="group_member_role_member">成员</string>
<string name="member_info_section_title_member">成员</string>
<string name="ttl_weeks">%d 星期</string>
<string name="ttl_min">%d 分钟</string>
<string name="ttl_months">%d 月</string>
<string name="network_and_servers">网络和服务器</string>
<string name="network_settings_title">网络设置</string>
<string name="moderated_description">已被管理员移除</string>
<string name="network_use_onion_hosts_prefer_desc">Onion 主机将在可用时使用。</string>
<string name="network_use_onion_hosts_no_desc">将不会使用 Onion 主机。</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 手机:点击<b>在手机应用程序中打开</b>,然后在应用程序中点击<b>连接</b></string>
<string name="delete_message_mark_deleted_warning">消息将被标记为删除。收件人将能够揭示此消息。</string>
<string name="v4_5_reduced_battery_usage_descr">更多改进即将推出!</string>
<string name="no_contacts_selected">未选择联系人</string>
<string name="one_time_link">一次性邀请链接</string>
<string name="feature_off">关闭</string>
<string name="network_use_onion_hosts_required_desc">连接需要 Onion 主机。</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion 主机将在可用时使用。</string>
<string name="chat_item_ttl_none">从不</string>
<string name="feature_offered_item">已提供 %s</string>
<string name="feature_offered_item_with_param">已提供 %s%2s</string>
<string name="new_in_version">%s 中的新功能</string>
<string name="add_contact">一次性邀请链接</string>
<string name="ok">好的</string>
<string name="no_details">没有细节</string>
<string name="only_stored_on_members_devices">(仅由群组成员存储)</string>
<string name="only_you_can_send_voice">只有您可以发送语音消息。</string>
<string name="delete_message_cannot_be_undone_warning">消息将被删除——此操作无法撤消!</string>
<string name="images_limit_desc">一次只能发送10张图片</string>
<string name="icon_descr_more_button">更多</string>
<string name="new_database_archive">新数据库存档</string>
<string name="old_database_archive">旧数据库存档</string>
<string name="new_member_role">新成员角色</string>
<string name="no_contacts_to_add">没有联系人可添加</string>
<string name="network_status">网络状态</string>
<string name="chat_preferences_off">关闭</string>
<string name="network_use_onion_hosts_no_desc_in_alert">将不会使用 Onion 主机。</string>
<string name="network_use_onion_hosts_required_desc_in_alert">连接需要 Onion 主机。</string>
<string name="no_received_app_files">没有收到或发送的文件</string>
<string name="sender_cancelled_file_transfer">发送人已取消文件传输。</string>
<string name="share_verb">分享</string>
<string name="send_live_message">发送实时消息</string>
<string name="this_text_is_available_in_settings">此文本在设置中可用</string>
<string name="icon_descr_received_msg_status_unread">未读</string>
<string name="saved_ICE_servers_will_be_removed">保存的 WebRTC ICE 服务器将被删除。</string>
<string name="is_verified">%s 已验证</string>
<string name="smp_servers_use_server_for_new_conn">用于新连接</string>
<string name="network_disable_socks">使用直接互联网连接?</string>
<string name="network_use_onion_hosts_required">必要</string>
<string name="save_and_notify_contact">保存并通知联系人</string>
<string name="save_and_notify_contacts">保存并通知联系人</string>
<string name="read_more_in_github">在我们的 GitHub 仓库中阅读更多内容。</string>
<string name="reject">拒绝</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">为了保护隐私,而不是所有其他平台使用的用户 ID<xliff:g id="appName">SimpleX</xliff:g> 具有消息队列的标识符,每个联系人都是分开的。</string>
<string name="network_option_tcp_connection_timeout">TCP 连接超时</string>
<string name="feature_received_prohibited">收到,禁止</string>
<string name="accept_feature_set_1_day">设定1天</string>
<string name="v4_2_security_assessment_desc">SimpleX Chat 安全性由 Trail of Bits 审核。</string>
<string name="simplex_link_mode_browser_warning">在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。</string>
<string name="restore_database_alert_desc">恢复数据库备份后请输入之前的密码。 此操作无法撤消。</string>
<string name="contact_developers">请更新应用程序并联系开发者。</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">开源协议和代码——任何人都可以运行服务器。</string>
<string name="paste_button">粘贴</string>
<string name="network_option_ping_count">PING 次数</string>
<string name="prohibit_sending_voice">禁止发送语音消息。</string>
<string name="network_option_ping_interval">PING 间隔</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">请检查您使用的链接是否正确,或者让您的联系人给您发送另一个链接。</string>
<string name="network_option_protocol_timeout">协议超时</string>
<string name="reject_contact_button">拒绝</string>
<string name="reply_verb">回复</string>
<string name="network_options_reset_to_defaults">重置为默认</string>
<string name="run_chat_section">运行聊天程序</string>
<string name="save_archive">保存存档</string>
<string name="scan_code">扫码</string>
<string name="scan_code_from_contacts_app">从您联系人的应用程序中扫描安全码。</string>
<string name="security_code">安全码</string>
<string name="secret">秘密</string>
<string name="v4_2_security_assessment">安全评估</string>
<string name="ntf_channel_messages">SimpleX 消息</string>
<string name="is_not_verified">%s 未验证</string>
<string name="v4_5_italian_interface_descr">感谢用户——通过 Weblate 做出贡献!</string>
<string name="first_platform_without_user_ids">第一个没有任何用户标识符的平台——专为隐私保护设计。</string>
<string name="group_is_decentralized">该小组是完全分散式的——它只对成员可见。</string>
<string name="image_decoding_exception_desc">图像无法解码。 请尝试不同的图像或联系开发者。</string>
<string name="theme">主题</string>
<string name="delete_files_and_media_desc">此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。</string>
<string name="member_role_will_be_changed_with_invitation">角色将更改为“%s”。 该成员将收到新的邀请。</string>
<string name="enable_automatic_deletion_message">此操作无法撤消——早于所选的发送和接收的消息将被删除。 这可能需要几分钟时间。</string>
<string name="this_QR_code_is_not_a_link">此二维码不是链接!</string>
<string name="switch_receiving_address_desc">此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。</string>
<string name="this_link_is_not_a_valid_connection_link">此链接不是有效的连接链接!</string>
<string name="to_start_a_new_chat_help_header">开始新的聊天</string>
<string name="to_verify_compare">要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。</string>
<string name="unmute_chat">取消静音</string>
<string name="update_onion_hosts_settings_question">更新 .onion 主机设置?</string>
<string name="update_network_session_mode_question">更新传输隔离模式?</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(从剪贴板扫描或粘贴)</string>
<string name="smp_server_test_secure_queue">保护队列</string>
<string name="reveal_verb">揭示</string>
<string name="la_notice_turn_on">打开</string>
<string name="icon_descr_sent_msg_status_send_failed">发送失败</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">未经授权发送</string>
<string name="images_limit_title">太多图片!</string>
<string name="icon_descr_server_status_pending">待办的</string>
<string name="switch_receiving_address_question">切换接收地址吗?</string>
<string name="ask_your_contact_to_enable_voice">请让您的联系人启用发送语音消息。</string>
<string name="icon_descr_record_voice_message">录制语音消息</string>
<string name="icon_descr_send_message">发消息</string>
<string name="reset_verb">重置</string>
<string name="send_verb">发送</string>
<string name="send_live_message_desc">发送实时消息——它会在您键入时为收件人更新</string>
<string name="add_contact_or_create_group">开始新聊天</string>
<string name="to_share_with_your_contact">(与您的联系人分享)</string>
<string name="to_connect_via_link_title">通过链接连接</string>
<string name="set_contact_name">设置联系人姓名</string>
<string name="connection_you_accepted_will_be_cancelled">您接受的连接将被取消!</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">您与之共享此链接的联系人将无法连接!</string>
<string name="show_QR_code">显示二维码</string>
<string name="chat_with_the_founder">发送问题和想法</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">保护您的隐私和安全的消息传递和应用程序平台。</string>
<string name="strikethrough">删去</string>
<string name="people_can_connect_only_via_links_you_share">人们只能通过您共享的链接与您建立联系。</string>
<string name="next_generation_of_private_messaging">下一代私密通讯软件</string>
<string name="paste_the_link_you_received">粘贴收到的链接</string>
<string name="alert_title_skipped_messages">已跳过消息</string>
<string name="settings_section_title_support">支持 SIMPLEX CHAT</string>
<string name="send_link_previews">发送链接预览</string>
<string name="settings_section_title_socks">SOCKS 代理</string>
<string name="stop_chat_question">停止聊天程序?</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。</string>
<string name="restore_database">恢复数据库备份</string>
<string name="restore_database_alert_title">恢复数据库备份?</string>
<string name="button_remove_member">删除成员</string>
<string name="button_send_direct_message">发送私信</string>
<string name="receiving_via">接收通过</string>
<string name="sending_via">发送通过</string>
<string name="conn_stats_section_title_servers">服务器</string>
<string name="switch_receiving_address">切换接收地址</string>
<string name="v4_5_message_draft_descr">保留最后的消息草稿及其附件。</string>
<string name="v4_5_private_filenames">私密文件名</string>
<string name="v4_4_french_interface_descr">感谢用户——通过 Weblate 做出贡献!</string>
<string name="v4_5_transport_isolation">传输隔离</string>
<string name="paste_connection_link_below_to_connect">将您收到的链接粘贴到下面的框中以与您的联系人联系。</string>
<string name="share_invitation_link">分享邀请链接</string>
<string name="this_string_is_not_a_connection_link">此字符串不是连接链接!</string>
<string name="send_us_an_email">给我们发电子邮件</string>
<string name="smp_servers">SMP 服务器</string>
<string name="sending_files_not_yet_supported">尚不支持发送文件</string>
<string name="trying_to_connect_to_server_to_receive_messages">正在尝试连接到用于从该联系人接收消息的服务器。</string>
<string name="receiving_files_not_yet_supported">尚不支持接收文件</string>
<string name="unknown_message_format">未知消息格式</string>
<string name="smp_servers_test_server">测试服务器</string>
<string name="smp_servers_test_servers">测试服务器</string>
<string name="simplex_link_contact">SimpleX 联系地址</string>
<string name="simplex_link_invitation">SimpleX 一次性邀请</string>
<string name="simplex_link_group">SimpleX 群组链接</string>
<string name="simplex_link_mode">SimpleX 链接</string>
<string name="sender_may_have_deleted_the_connection_request">发送人可能已删除连接请求。</string>
<string name="smp_servers_preset_server">预设服务器</string>
<string name="image_descr_qr_code">二维码</string>
<string name="network_session_mode_transport_isolation">传输隔离</string>
<string name="share_link">分享链接</string>
<string name="select_contacts">选择联系人</string>
<string name="skip_inviting_button">跳过邀请成员</string>
<string name="switch_verb">转变</string>
<string name="prohibit_sending_voice_messages">禁止发送语音消息。</string>
<string name="only_your_contact_can_send_voice">只有您的联系人可以发送语音消息。</string>
<string name="prohibit_direct_messages">禁止直接向成员发送私信。</string>
<string name="protect_app_screen">保护应用程序屏幕</string>
<string name="settings_section_title_themes">主题</string>
<string name="stop_chat_to_enable_database_actions">停止聊天以启用数据库操作。</string>
<string name="chat_item_ttl_seconds">%s 秒</string>
<string name="alert_message_no_group">该群组已不存在。</string>
<string name="group_invitation_tap_to_join">点击加入</string>
<string name="stop_chat_confirmation">停止</string>
<string name="restart_the_app_to_use_imported_chat_database">重新启动应用程序以使用导入的聊天数据库。</string>
<string name="group_member_role_owner">所有者</string>
<string name="group_member_status_removed">已删除</string>
<string name="role_in_group">角色</string>
<string name="network_option_seconds_label"></string>
<string name="network_options_revert">恢复</string>
<string name="reset_color">重置颜色</string>
<string name="save_color">保存颜色</string>
<string name="v4_5_reduced_battery_usage">减少电池使用量</string>
<string name="v4_5_private_filenames_descr">为了保护时区,图像/语音文件使用 UTC。</string>
<string name="use_chat">使用聊天</string>
<string name="read_more_in_github_with_link">在我们的 <font color="#0088ff">GitHub 存储库</font> 中阅读更多内容。</string>
<string name="auth_open_chat_console">打开聊天控制台</string>
<string name="auth_stop_chat">Stop chat</string>
<string name="toast_permission_denied">权限被拒绝!</string>
<string name="chat_help_tap_button">点击按钮</string>
<string name="thank_you_for_installing_simplex">感谢您安装 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="use_camera_button">使用相机</string>
<string name="smp_servers_preset_address">预设服务器地址</string>
<string name="smp_servers_scan_qr">扫描服务器二维码</string>
<string name="smp_servers_test_failed">服务器测试失败!</string>
<string name="smp_servers_test_some_failed">一些服务器未通过测试:</string>
<string name="star_on_github">在 GitHub 上加星</string>
<string name="save_and_notify_group_members">保存并通知群组成员</string>
<string name="icon_descr_speaker_off">扬声器关闭</string>
<string name="icon_descr_speaker_on">扬声器开启</string>
<string name="rcv_group_event_user_deleted">已将您移除</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">更新设置会将客户端重新连接到所有服务器。</string>
<string name="theme_system">系统</string>
<string name="v4_4_live_messages_desc">对方会在您键入时看到更新。</string>
<string name="view_security_code">查看安全码</string>
<string name="voice_message_with_duration">语音消息 (<xliff:g id="duration">%1$s</xliff:g>)</string>
<string name="waiting_for_image">等待图像中</string>
<string name="welcome">欢迎!</string>
<string name="personal_welcome">欢迎 <xliff:g>%1$s</xliff:g></string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">当您的联系人设备在线时,您将可以连接,请稍等或稍后查看!</string>
<string name="rate_the_app">评价此应用程序</string>
<string name="network_enable_socks">使用 SOCKS 代理?</string>
<string name="network_socks_toggle">使用 SOCKS 代理(端口 9050</string>
<string name="total_files_count_and_size">%d 个文件,总大小为 %s</string>
<string name="you_joined_this_group">您已加入此群组</string>
<string name="you_are_invited_to_group">您被邀请加入群组</string>
<string name="chat_preferences_default">默认(%s</string>
<string name="voice_prohibited_in_this_chat">此聊天中禁止语音消息。</string>
<string name="voice_messages_are_prohibited">语音信息在该群组中被禁用。</string>
<string name="verify_security_code">验证安全码</string>
<string name="using_simplex_chat_servers">使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务器。</string>
<string name="simplex_link_connection">通过 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="group_invitation_item_description">邀请至群组 <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> 地址</string>
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g> 团队</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g> 成员</string>
<string name="chat_preferences_yes"></string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 如果您以后删除它,您不会丢失您的联系人。</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">您可以控制通过哪些服务器<b>接收</b>消息,您的联系人 - 您用来向他们发送消息的服务器。</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">您的联系人可以从应用程序中扫描二维码。</string>
<string name="you_will_be_connected_when_group_host_device_is_online">您将在组主设备上线时连接到该群组,请稍等或稍后再检查!</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。</string>
<string name="archive_created_on_ts">创建于 <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="you_can_connect_to_simplex_chat_founder">您可以 <font color="#0088ff"> 连接到 <xliff:g id="appNameFull"> SimpleX Chat </xliff:g> 开发者提出任何问题并接收更新 </font></string>
<string name="you_accepted_connection">您已接受连接</string>
<string name="your_SMP_servers">您的 SMP 服务器</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> 已跳过消息</string>
<string name="ttl_s">%ds</string>
<string name="whats_new">更新内容</string>
<string name="group_preview_you_are_invited">您被邀请加入群组</string>
<string name="you_have_no_chats">您没有聊天记录</string>
<string name="icon_descr_waiting_for_image">等待图像中</string>
<string name="voice_message">语音消息</string>
<string name="voice_messages_prohibited">语音消息禁止发送!</string>
<string name="you_need_to_allow_to_send_voice">您需要允许您的联系人发送语音消息才能发送它们。</string>
<string name="scan_QR_code">扫描二维码</string>
<string name="you_invited_your_contact">您邀请了您的联系人</string>
<string name="contact_wants_to_connect_with_you">想要与您连接!</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">您的联系人需要在线才能完成连接。
\n您可以取消此连接并删除联系人稍后尝试使用新链接</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> 标志</string>
<string name="your_simplex_contact_address">您的 <xliff:g id="appName">SimpleX</xliff:g> 联系地址</string>
<string name="install_simplex_chat_for_terminal">为终端安装 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="use_simplex_chat_servers__question">使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务器?</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">我们不会在服务器上存储您的任何联系人或消息(一旦发送)。</string>
<string name="webrtc_ice_servers">WebRTC ICE 服务器</string>
<string name="relay_server_protects_ip">中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。</string>
<string name="relay_server_if_necessary">中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。</string>
<string name="your_ice_servers">您的 ICE 服务器</string>
<string name="icon_descr_video_off">视频关闭</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">您可以通过应用设置/数据库或重启应用开始聊天。</string>
<string name="snd_group_event_changed_member_role">您将 %s 的角色更改为 %s</string>
<string name="snd_group_event_changed_role_for_yourself">您将自己的角色更改为 %s</string>
<string name="snd_conn_event_switch_queue_phase_completed">您已更改地址</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。</string>
<string name="conn_level_desc_indirect">间接(<xliff:g id="conn_level">%1$s</xliff:g></string>
<string name="you_can_also_connect_by_clicking_the_link">您也可以通过点击链接进行连接。 如果它在浏览器中打开,请单击<b>在移动应用程序中打开</b>按钮。</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="you_will_join_group">您将加入此链接指向的群组并连接到其群组成员。</string>
<string name="description_via_group_link">通过群组链接</string>
<string name="description_via_one_time_link">通过一次性链接</string>
<string name="description_via_contact_address_link">通过联系地址链接</string>
<string name="simplex_link_mode_browser">通过浏览器</string>
<string name="smp_servers_your_server">您的服务器</string>
<string name="network_use_onion_hosts_prefer">当可用时</string>
<string name="network_use_onion_hosts">使用 .onion 主机</string>
<string name="your_ICE_servers">您的 ICE 服务器</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="section_title_welcome_message">欢迎消息</string>
<string name="you_control_your_chat">您的聊天由您掌控!</string>
<string name="you_can_use_markdown_to_format_messages__prompt">您可以使用 markdown 来编排消息格式:</string>
<string name="ttl_h">%dh</string>
<string name="ttl_days">%d 天</string>
<string name="ttl_w">%dw</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">您被邀请加入群组。 加入以与群组成员联系。</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">你加入了这个群组。连接到邀请组成员。</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">您更改了 %s 的地址</string>
<string name="snd_group_event_user_left">您已离开</string>
<string name="num_contacts_selected"><xliff:g id="connection ID" example="1">%1$d</xliff:g> 已选择联系人</string>
<string name="chat_preferences_you_allow">您允许</string>
<string name="v4_2_auto_accept_contact_requests_desc">带有可选的欢迎消息。</string>
<string name="ttl_m">%dm</string>
<string name="ttl_mth">%dmth</string>
<string name="waiting_for_file">等待文件中</string>
<string name="contact_sent_large_file">您的联系人发送的文件大于当前支持的最大大小 (&lt;xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"maxFileSize\"&gt;%1$s&lt;/xliff :g&gt;).</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">当您的连接请求被接受后,您将可以连接,请稍等或稍后检查!</string>
<string name="smp_servers_use_server">使用服务器</string>
<string name="smp_servers_your_server_address">您的服务器地址</string>
<string name="icon_descr_video_on">视频开启</string>
<string name="v4_3_voice_messages_desc">最多 40 秒,立即收到。</string>
<string name="v4_4_verify_connection_security">验证连接安全</string>
<string name="moderated_item_description">由 %s 审核</string>
<string name="moderate_verb">管理员移除</string>
<string name="moderate_message_will_be_deleted_warning">将为所有成员删除该消息。</string>
<string name="moderate_message_will_be_marked_warning">该消息将对所有成员显示为已审核。</string>
<string name="delete_member_message__question">删除成员消息?</string>
<string name="group_member_role_observer">观察者</string>
<string name="you_are_observer">您是观察者</string>
<string name="error_updating_link_for_group">更新群组链接错误</string>
<string name="observer_cant_send_message_title">您无法发送消息!</string>
<string name="initial_member_role">初始角色</string>
<string name="observer_cant_send_message_desc">请联系群组管理员。</string>
<string name="language_system">系统</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@ -2,4 +2,5 @@
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="window_background_dark">#121212</color>
</resources>

View File

@ -103,6 +103,7 @@
<string name="smp_server_test_delete_queue">Delete queue</string>
<string name="smp_server_test_disconnect">Disconnect</string>
<string name="error_deleting_user">Error deleting user profile</string>
<string name="error_updating_user_privacy">Error updating user privacy</string>
<!-- background service notice - SimpleXAPI.kt -->
<string name="icon_descr_instant_notifications">Instant notifications</string>
@ -459,6 +460,7 @@
<string name="smp_servers_check_address">Check server address and try again.</string>
<string name="smp_servers_delete_server">Delete server</string>
<string name="smp_servers_per_user">The servers for new connections of your current chat profile</string>
<string name="smp_save_servers_question">Save servers?</string>
<string name="install_simplex_chat_for_terminal">Install <xliff:g id="appNameFull">SimpleX Chat</xliff:g> for terminal</string>
<string name="star_on_github">Star on GitHub</string>
<string name="contribute">Contribute</string>
@ -535,6 +537,16 @@
<string name="save_and_notify_group_members">Save and notify group members</string>
<string name="exit_without_saving">Exit without saving</string>
<!-- HiddenProfileView.kt -->
<string name="hide_profile">Hide profile</string>
<string name="password_to_show">Password to show</string>
<string name="save_profile_password">Save profile password</string>
<string name="hidden_profile_password">Hidden profile password</string>
<string name="confirm_password">Confirm password</string>
<string name="to_reveal_profile_enter_password">To reveal your hidden profile, enter a full password into a search field in "Your chat profiles" page.</string>
<string name="error_saving_user_password">Error saving user password</string>
<!-- Welcome Prompts - WelcomeView.kt -->
<string name="you_control_your_chat">You control your chat!</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">The messaging and application platform protecting your privacy and security.</string>
@ -631,13 +643,15 @@
<!-- Call settings -->
<string name="settings_audio_video_calls">Audio &amp; video calls</string>
<string name="your_calls">Your calls</string>
<string name="connect_calls_via_relay">Connect via relay</string>
<string name="always_use_relay">Always use relay</string>
<string name="call_on_lock_screen">Calls on lock screen:</string>
<string name="accept_call_on_lock_screen">Accept</string>
<string name="show_call_on_lock_screen">Show</string>
<string name="no_call_on_lock_screen">Disable</string>
<string name="your_ice_servers">Your ICE servers</string>
<string name="webrtc_ice_servers">WebRTC ICE servers</string>
<string name="relay_server_protects_ip">Relay server protects your IP address, but it can observe the duration of the call.</string>
<string name="relay_server_if_necessary">Relay server is only used if necessary. Another party can observe your IP address.</string>
<!-- Call Lock Screen -->
<string name="open_simplex_chat_to_accept_call">Open <xliff:g id="appNameFull">SimpleX Chat</xliff:g> to accept call</string>
@ -696,6 +710,7 @@
<string name="settings_developer_tools">Developer tools</string>
<string name="settings_experimental_features">Experimental features</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_language" translatable="false">LANGUAGE</string>
<string name="settings_section_title_icon">APP ICON</string>
<string name="settings_section_title_themes">THEMES</string>
<string name="settings_section_title_messages">MESSAGES</string>
@ -921,6 +936,8 @@
<string name="delete_group_for_self_cannot_undo_warning">Group will be deleted for you - this cannot be undone!</string>
<string name="button_leave_group">Leave group</string>
<string name="button_edit_group_profile">Edit group profile</string>
<string name="button_add_welcome_message">Add welcome message</string>
<string name="button_welcome_message">Welcome message</string>
<string name="group_link">Group link</string>
<string name="create_group_link">Create group link</string>
<string name="button_create_group_link">Create link</string>
@ -958,6 +975,11 @@
<string name="conn_level_desc_direct">direct</string>
<string name="conn_level_desc_indirect">indirect (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<!-- GroupWelcomeView.kt -->
<string name="group_welcome_title">Welcome message</string>
<string name="save_welcome_message_question">Save welcome message?</string>
<string name="save_and_update_group_profile">Save and update group profile</string>
<!-- ConnectionStats -->
<string name="conn_stats_section_title_servers">SERVERS</string>
<string name="receiving_via">Receiving via</string>
@ -1001,6 +1023,20 @@
<string name="users_delete_profile_for">Delete chat profile for</string>
<string name="users_delete_with_connections">Profile and server connections</string>
<string name="users_delete_data_only">Local profile data only</string>
<string name="user_hide">Hide</string>
<string name="user_unhide">Unhide</string>
<string name="user_mute">Mute</string>
<string name="user_unmute">Unmute</string>
<string name="enter_password_to_show">Enter password above to show!</string>
<string name="tap_to_activate_profile">Tap to activate profile.</string>
<string name="cant_delete_user_profile">Can\'t delete user profile!</string>
<string name="should_be_at_least_one_visible_profile">There should be at least one visible user profile.</string>
<string name="should_be_at_least_one_profile">There should be at least one user profile.</string>
<string name="make_profile_private">Make profile private!</string>
<string name="you_can_hide_or_mute_user_profile">You can hide or mute a user profile - hold it for the menu.\nSimpleX Lock must be enabled.</string>
<string name="dont_show_again">Don\'t show again</string>
<string name="muted_when_inactive">Muted when inactive!</string>
<string name="you_will_still_receive_calls_and_ntfs">You will still receive calls and notifications from muted profiles when they are active.</string>
<!-- Incognito mode -->
<string name="incognito">Incognito</string>
@ -1018,6 +1054,9 @@
<string name="theme_light">Light</string>
<string name="theme_dark">Dark</string>
<!-- Languages -->
<string name="language_system">System</string>
<!-- Appearance.kt -->
<string name="theme">Theme</string>
<string name="save_color">Save color</string>
@ -1144,4 +1183,16 @@
<string name="v4_5_reduced_battery_usage_descr">More improvements are coming soon!</string>
<string name="v4_5_italian_interface">Italian interface</string>
<string name="v4_5_italian_interface_descr">Thanks to the users contribute via Weblate!</string>
<string name="v4_6_hidden_chat_profiles">Hidden chat profiles</string>
<string name="v4_6_hidden_chat_profiles_descr">Protect your chat profiles with a password!</string>
<string name="v4_6_audio_video_calls">Audio and video calls</string>
<string name="v4_6_audio_video_calls_descr">Support bluetooth and other improvements.</string>
<string name="v4_6_group_moderation">Group moderation</string>
<string name="v4_6_group_moderation_descr">Now admins can:\n- delete members\' messages.\n- disable members (\"observer\" role)</string>
<string name="v4_6_group_welcome_message">Group welcome message</string>
<string name="v4_6_group_welcome_message_descr">Set the message shown to new members!</string>
<string name="v4_6_reduced_battery_usage">Further reduced battery usage</string>
<string name="v4_6_reduced_battery_usage_descr">More improvements are coming soon!</string>
<string name="v4_6_chinese_spanish_interface">Chinese and Spanish interface</string>
<string name="v4_6_chinese_spanish_interface_descr">Thanks to the users contribute via Weblate!</string>
</resources>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="en"/>
<locale android:name="ru"/>
<locale android:name="de"/>
<locale android:name="fr"/>
<locale android:name="it"/>
<locale android:name="nl"/>
<locale android:name="cs"/>
<locale android:name="zh-CN"/>
</locale-config>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -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"
}
}

View File

@ -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"),

View File

@ -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<Int64, () -> 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
}

View File

@ -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 {

View File

@ -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<Void, Never>?
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 {

View File

@ -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()
}
}

View File

@ -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()

View File

@ -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)
}
}
}

View File

@ -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()
}
}
}
}

View File

@ -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()
}
}
}
}

View File

@ -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 {

View File

@ -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)")
}
}
}

View File

@ -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)
}
}

View File

@ -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

View File

@ -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 {

View File

@ -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))
}
}

View File

@ -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: {

View File

@ -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

View File

@ -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 {

View File

@ -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 {

View File

@ -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))

View File

@ -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<Bool>) -> some View {
Image(image)
.resizable()

View File

@ -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)

View File

@ -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))
}
}

View File

@ -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):

View File

@ -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 {

View File

@ -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 {

View File

@ -5,97 +5,120 @@
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
<trans-unit id="&#10;" xml:space="preserve" approved="no">
<source>
</source>
<target state="needs-translation">
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="needs-translation"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="needs-translation"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="needs-translation"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (" xml:space="preserve">
<trans-unit id=" (" xml:space="preserve" approved="no">
<source> (</source>
<target state="needs-translation"> (</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (can be copied)" xml:space="preserve">
<trans-unit id=" (can be copied)" xml:space="preserve" approved="no">
<source> (can be copied)</source>
<target state="translated"> (يمكن نسخها)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="!1 colored!" xml:space="preserve">
<trans-unit id="!1 colored!" xml:space="preserve" approved="no">
<source>!1 colored!</source>
<target state="translated">! 1 ملون!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="#secret#" xml:space="preserve">
<trans-unit id="#secret#" xml:space="preserve" approved="no">
<source>#secret#</source>
<target state="translated">#سر#</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@" xml:space="preserve">
<trans-unit id="%@" xml:space="preserve" approved="no">
<source>%@</source>
<target state="needs-translation">%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ %@" xml:space="preserve">
<trans-unit id="%@ %@" xml:space="preserve" approved="no">
<source>%@ %@</source>
<target state="needs-translation">%@ %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ / %@" xml:space="preserve">
<trans-unit id="%@ / %@" xml:space="preserve" approved="no">
<source>%@ / %@</source>
<target state="needs-translation">%@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<trans-unit id="%@ is connected!" xml:space="preserve" approved="no">
<source>%@ is connected!</source>
<target state="translated">%@ متصل!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%@ is not verified" xml:space="preserve">
<trans-unit id="%@ is not verified" xml:space="preserve" approved="no">
<source>%@ is not verified</source>
<target state="translated">%@ لم يتم التحقق منها</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is verified" xml:space="preserve">
<trans-unit id="%@ is verified" xml:space="preserve" approved="no">
<source>%@ is verified</source>
<target state="translated">%@ تم التحقق منه</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<trans-unit id="%@ wants to connect!" xml:space="preserve" approved="no">
<source>%@ wants to connect!</source>
<target state="translated">%@ يريد الاتصال!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%d days" xml:space="preserve">
<trans-unit id="%d days" xml:space="preserve" approved="no">
<source>%d days</source>
<target state="translated">%d أيام</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d hours" xml:space="preserve">
<trans-unit id="%d hours" xml:space="preserve" approved="no">
<source>%d hours</source>
<target state="translated">%d ساعات</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d min" xml:space="preserve">
<trans-unit id="%d min" xml:space="preserve" approved="no">
<source>%d min</source>
<target state="translated">%d دقيقة</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d months" xml:space="preserve">
<trans-unit id="%d months" xml:space="preserve" approved="no">
<source>%d months</source>
<target state="translated">%d شهور</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d sec" xml:space="preserve">
<trans-unit id="%d sec" xml:space="preserve" approved="no">
<source>%d sec</source>
<target state="translated">%d ثانية</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d skipped message(s)" xml:space="preserve">
<source>%d skipped message(s)</source>
<note>integrity error chat item</note>
</trans-unit>
<trans-unit id="%lld" xml:space="preserve">
<trans-unit id="%lld" xml:space="preserve" approved="no">
<source>%lld</source>
<target state="needs-translation">%lld</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld %@" xml:space="preserve">
<trans-unit id="%lld %@" xml:space="preserve" approved="no">
<source>%lld %@</source>
<target state="needs-translation">%lld %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld contact(s) selected" xml:space="preserve">
@ -106,182 +129,226 @@
<source>%lld file(s) with total size of %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve">
<trans-unit id="%lld members" xml:space="preserve" approved="no">
<source>%lld members</source>
<target state="translated">%lld أعضاء</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<trans-unit id="%lldd" xml:space="preserve" approved="no">
<source>%lldd</source>
<target state="needs-translation">%lldd</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldh" xml:space="preserve">
<trans-unit id="%lldh" xml:space="preserve" approved="no">
<source>%lldh</source>
<target state="needs-translation">%lldh</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldk" xml:space="preserve">
<trans-unit id="%lldk" xml:space="preserve" approved="no">
<source>%lldk</source>
<target state="needs-translation">%lldk</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldm" xml:space="preserve">
<trans-unit id="%lldm" xml:space="preserve" approved="no">
<source>%lldm</source>
<target state="translated">%lldm</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldmth" xml:space="preserve">
<trans-unit id="%lldmth" xml:space="preserve" approved="no">
<source>%lldmth</source>
<target state="needs-translation">%lldmth</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%llds" xml:space="preserve">
<trans-unit id="%llds" xml:space="preserve" approved="no">
<source>%llds</source>
<target state="needs-translation">%llds</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldw" xml:space="preserve">
<trans-unit id="%lldw" xml:space="preserve" approved="no">
<source>%lldw</source>
<target state="needs-translation">%lldw</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
<trans-unit id="(" xml:space="preserve" approved="no">
<source>(</source>
<target state="needs-translation">(</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=")" xml:space="preserve">
<trans-unit id=")" xml:space="preserve" approved="no">
<source>)</source>
<target state="needs-translation">)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve" approved="no">
<source>**Add new contact**: to create your one-time QR Code or link for your contact.</source>
<target state="translated">** إضافة جهة اتصال جديدة **: لإنشاء رمز QR لمرة واحدة أو رابط جهة الاتصال الخاصة بك.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Create link / QR code** for your contact to use." xml:space="preserve">
<trans-unit id="**Create link / QR code** for your contact to use." xml:space="preserve" approved="no">
<source>**Create link / QR code** for your contact to use.</source>
<target state="translated">** أنشئ رابطًا / رمز QR ** لتستخدمه جهة الاتصال الخاصة بك.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**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." xml:space="preserve">
<trans-unit id="**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." xml:space="preserve" approved="no">
<source>**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.</source>
<target state="translated">** المزيد من الخصوصية **: تحقق من الرسائل الجديدة كل 20 دقيقة. تتم مشاركة رمز الجهاز مع خادم SimpleX Chat ، ولكن ليس عدد جهات الاتصال أو الرسائل لديك.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." xml:space="preserve">
<trans-unit id="**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." xml:space="preserve" approved="no">
<source>**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app).</source>
<target state="translated">** الأكثر خصوصية **: لا تستخدم خادم إشعارات SimpleX Chat ، وتحقق من الرسائل بشكل دوري في الخلفية (يعتمد على عدد مرات استخدامك للتطبيق).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Paste received link** or open it in the browser and tap **Open in mobile app**." xml:space="preserve">
<trans-unit id="**Paste received link** or open it in the browser and tap **Open in mobile app**." xml:space="preserve" approved="no">
<source>**Paste received link** or open it in the browser and tap **Open in mobile app**.</source>
<target state="translated">** الصق الرابط المستلم ** أو افتحه في المتصفح واضغط على ** فتح في تطبيق الهاتف **.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve" approved="no">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target state="translated">** يرجى ملاحظة **: لن تتمكن من استعادة أو تغيير عبارة المرور إذا فقدتها.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." xml:space="preserve">
<trans-unit id="**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." xml:space="preserve" approved="no">
<source>**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from.</source>
<target state="translated">** موصى به **: يتم إرسال رمز الجهاز والإشعارات إلى خادم إشعارات SimpleX Chat ، ولكن ليس محتوى الرسالة أو حجمها أو مصدرها.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Scan QR code**: to connect to your contact in person or via video call." xml:space="preserve">
<trans-unit id="**Scan QR code**: to connect to your contact in person or via video call." xml:space="preserve" approved="no">
<source>**Scan QR code**: to connect to your contact in person or via video call.</source>
<target state="translated">** مسح رمز QR **: للاتصال بجهة الاتصال الخاصة بك شخصيًا أو عبر مكالمة فيديو.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: Instant push notifications require passphrase saved in Keychain." xml:space="preserve">
<trans-unit id="**Warning**: Instant push notifications require passphrase saved in Keychain." xml:space="preserve" approved="no">
<source>**Warning**: Instant push notifications require passphrase saved in Keychain.</source>
<target state="translated">** تحذير **: تتطلب الإشعارات الفورية حفظ عبارة المرور في Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve" approved="no">
<source>**e2e encrypted** audio call</source>
<target state="translated">** تشفير ** e2e ** مكالمة صوتية</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** video call" xml:space="preserve">
<trans-unit id="**e2e encrypted** video call" xml:space="preserve" approved="no">
<source>**e2e encrypted** video call</source>
<target state="translated">** مكالمة فيديو ** مشفرة e2e **</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="*bold*" xml:space="preserve">
<trans-unit id="*bold*" xml:space="preserve" approved="no">
<source>\*bold*</source>
<target state="translated">\*عريض*</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=", " xml:space="preserve">
<trans-unit id=", " xml:space="preserve" approved="no">
<source>, </source>
<target state="needs-translation">, </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="." xml:space="preserve">
<trans-unit id="." xml:space="preserve" approved="no">
<source>.</source>
<target state="needs-translation">.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="1 day" xml:space="preserve">
<trans-unit id="1 day" xml:space="preserve" approved="no">
<source>1 day</source>
<target state="translated">يوم 1</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="1 hour" xml:space="preserve">
<trans-unit id="1 hour" xml:space="preserve" approved="no">
<source>1 hour</source>
<target state="translated">1 ساعة</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="1 month" xml:space="preserve">
<trans-unit id="1 month" xml:space="preserve" approved="no">
<source>1 month</source>
<target state="translated">شهر 1</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="1 week" xml:space="preserve">
<trans-unit id="1 week" xml:space="preserve" approved="no">
<source>1 week</source>
<target state="translated">اسبوع 1</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="2 weeks" xml:space="preserve">
<trans-unit id="2 weeks" xml:space="preserve" approved="no">
<source>2 weeks</source>
<target state="translated">2 أسابيع</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="6" xml:space="preserve">
<trans-unit id="6" xml:space="preserve" approved="no">
<source>6</source>
<target state="needs-translation">6</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=": " xml:space="preserve">
<trans-unit id=": " xml:space="preserve" approved="no">
<source>: </source>
<target state="needs-translation">: </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A new contact" xml:space="preserve">
<trans-unit id="A new contact" xml:space="preserve" approved="no">
<source>A new contact</source>
<target state="translated">جهة اتصال جديدة</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="A random profile will be sent to the contact that you received this link from" xml:space="preserve">
<trans-unit id="A random profile will be sent to the contact that you received this link from" xml:space="preserve" approved="no">
<source>A random profile will be sent to the contact that you received this link from</source>
<target state="translated">سيتم إرسال ملف تعريف عشوائي إلى جهة الاتصال التي تلقيت منها هذا الرابط</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A random profile will be sent to your contact" xml:space="preserve">
<trans-unit id="A random profile will be sent to your contact" xml:space="preserve" approved="no">
<source>A random profile will be sent to your contact</source>
<target state="translated">سيتم إرسال ملف تعريف عشوائي إلى جهة الاتصال الخاصة بك</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve" approved="no">
<source>A separate TCP connection will be used **for each chat profile you have in the app**.</source>
<target state="translated">سيتم استخدام اتصال TCP منفصل ** لكل ملف تعريف دردشة لديك في التطبيق **.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each contact and group member**.&#10;**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve">
<trans-unit id="A separate TCP connection will be used **for each contact and group member**.&#10;**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve" approved="no">
<source>A separate TCP connection will be used **for each contact and group member**.
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</source>
<target state="translated">سيتم استخدام اتصال TCP منفصل ** لكل جهة اتصال وعضو في المجموعة **.
** يرجى الملاحظة **: إذا كان لديك العديد من التوصيلات ، فقد يكون استهلاك البطارية وحركة المرور أعلى بكثير وقد تفشل بعض الاتصالات.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<trans-unit id="About SimpleX" xml:space="preserve" approved="no">
<source>About SimpleX</source>
<target state="translated">عن SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX Chat" xml:space="preserve">
<trans-unit id="About SimpleX Chat" xml:space="preserve" approved="no">
<source>About SimpleX Chat</source>
<target state="translated">عن SimpleX Chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Accent color" xml:space="preserve">
<trans-unit id="Accent color" xml:space="preserve" approved="no">
<source>Accent color</source>
<target state="translated">لون التمييز</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Accept" xml:space="preserve">
<trans-unit id="Accept" xml:space="preserve" approved="no">
<source>Accept</source>
<target state="translated">قبول</target>
<note>accept contact request via notification
accept incoming call via notification</note>
</trans-unit>
<trans-unit id="Accept contact" xml:space="preserve">
<trans-unit id="Accept contact" xml:space="preserve" approved="no">
<source>Accept contact</source>
<target state="translated">قبول الاتصال</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Accept contact request from %@?" xml:space="preserve">
<trans-unit id="Accept contact request from %@?" xml:space="preserve" approved="no">
<source>Accept contact request from %@?</source>
<target state="translated">قبول طلب الاتصال من %@?</target>
<note>notification body</note>
</trans-unit>
<trans-unit id="Accept incognito" xml:space="preserve">
<trans-unit id="Accept incognito" xml:space="preserve" approved="no">
<source>Accept incognito</source>
<target state="translated">قبول التخفي</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Accept requests" xml:space="preserve">

View File

@ -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"
}

View File

@ -2,7 +2,7 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="de" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
@ -385,6 +385,10 @@
<target>Einem anderen Gerät hinzufügen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add welcome message" xml:space="preserve">
<source>Add welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Administratoren können Links für den Beitritt zu Gruppen erzeugen.</target>
@ -480,6 +484,11 @@
<target>Sind Sie bereits verbunden?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source>
<target>Über ein Relais verbinden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Answer call" xml:space="preserve">
<source>Answer call</source>
<target>Anruf annehmen</target>
@ -520,11 +529,20 @@
<target>Audio- &amp; Videoanrufe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Audio and video calls" xml:space="preserve">
<source>Audio and video calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Authentifizierung fehlgeschlagen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<target>Bevor der Anruf verbunden wird, ist eine Authentifizierung erforderlich, aber Sie könnten Anrufe verpassen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication unavailable" xml:space="preserve">
<source>Authentication unavailable</source>
<target>Authentifizierung nicht verfügbar</target>
@ -580,6 +598,10 @@
<target>Anrufe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
<source>Can't delete user profile!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't invite contact!" xml:space="preserve">
<source>Can't invite contact!</source>
<target>Kontakt kann nicht eingeladen werden!</target>
@ -685,6 +707,10 @@
<target>Überprüfen Sie die Serveradresse und versuchen Sie es nochmal.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chinese and Spanish interface" xml:space="preserve">
<source>Chinese and Spanish interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Datei auswählen</target>
@ -740,6 +766,10 @@
<target>Neues Passwort bestätigen…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm password" xml:space="preserve">
<source>Confirm password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Verbinden</target>
@ -770,11 +800,6 @@
<target>Über einen Einmal-Link verbinden?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via relay" xml:space="preserve">
<source>Connect via relay</source>
<target>Über ein Relais verbinden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source>
<target>Mit dem Server verbinden…</target>
@ -1133,6 +1158,11 @@
<target>Link löschen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete member message?" xml:space="preserve">
<source>Delete member message?</source>
<target>Nachricht des Mitglieds löschen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete message?" xml:space="preserve">
<source>Delete message?</source>
<target>Die Nachricht löschen?</target>
@ -1268,6 +1298,10 @@
<target>Später wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't show again" xml:space="preserve">
<source>Don't show again</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Doppelter Anzeigename!</target>
@ -1368,6 +1402,10 @@
<target>Passwort eingeben…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter password above to show!" xml:space="preserve">
<source>Enter password above to show!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter server manually" xml:space="preserve">
<source>Enter server manually</source>
<target>Geben Sie den Server manuell ein</target>
@ -1523,6 +1561,10 @@
<target>Fehler beim Speichern des Passworts in den Schlüsselbund</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending message" xml:space="preserve">
<source>Error sending message</source>
<target>Fehler beim Senden der Nachricht</target>
@ -1543,6 +1585,11 @@
<target>Fehler beim Umschalten des Profils!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating group link" xml:space="preserve">
<source>Error updating group link</source>
<target>Fehler beim Aktualisieren des Gruppen-Links</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Fehler beim Aktualisieren der Nachricht</target>
@ -1553,6 +1600,10 @@
<target>Fehler beim Aktualisieren der Einstellungen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating user privacy" xml:space="preserve">
<source>Error updating user privacy</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: %@" xml:space="preserve">
<source>Error: %@</source>
<target>Fehler: %@</target>
@ -1638,6 +1689,14 @@
<target>Vollständiger Name:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Further reduced battery usage" xml:space="preserve">
<source>Further reduced battery usage</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="GIFs and stickers" xml:space="preserve">
<source>GIFs and stickers</source>
<target>GIFs und Sticker</target>
@ -1713,6 +1772,10 @@
<target>Grppennachricht:</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Group moderation" xml:space="preserve">
<source>Group moderation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group preferences" xml:space="preserve">
<source>Group preferences</source>
<target>Gruppenpräferenzen</target>
@ -1728,6 +1791,10 @@
<target>Das Gruppenprofil wird nur auf den Mitglieds-Systemen gespeichert und nicht auf den Servern.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group welcome message" xml:space="preserve">
<source>Group welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for all members - this cannot be undone!</source>
<target>Die Gruppe wird für alle Mitglieder gelöscht - dies kann nicht rückgängig gemacht werden!</target>
@ -1748,6 +1815,14 @@
<target>Verborgen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden chat profiles" xml:space="preserve">
<source>Hidden chat profiles</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden profile password" xml:space="preserve">
<source>Hidden profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide" xml:space="preserve">
<source>Hide</source>
<target>Verbergen</target>
@ -1758,6 +1833,10 @@
<target>App-Bildschirm in aktuellen Anwendungen verbergen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide profile" xml:space="preserve">
<source>Hide profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Wie SimpleX funktioniert</target>
@ -1788,11 +1867,6 @@
<target>ICE-Server (einer pro Zeile)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If the video fails to connect, flip the camera to resolve it." xml:space="preserve">
<source>If the video fails to connect, flip the camera to resolve it.</source>
<target>Wenn der Videoanruf nicht funktioniert, wechseln Sie die Kamera, um das Problem zu lösen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you can't meet in person, **show QR code in the video call**, or share the link." xml:space="preserve">
<source>If you can't meet in person, **show QR code in the video call**, or share the link.</source>
<target>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.</target>
@ -1905,6 +1979,11 @@
<target>Sofort</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Interface" xml:space="preserve">
<source>Interface</source>
<target>Schnittstelle</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
<source>Invalid connection link</source>
<target>Ungültiger Verbindungslink</target>
@ -2060,6 +2139,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Stellen Sie eine private Verbindung her</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make profile private!" xml:space="preserve">
<source>Make profile private!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Stellen Sie sicher, dass die SMP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@).</target>
@ -2160,6 +2243,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Die Migration wurde abgeschlossen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
<source>Moderate</source>
<target>Moderieren</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Weitere Verbesserungen sind bald verfügbar!</target>
@ -2180,6 +2268,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Stummschalten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Name</target>
@ -2280,6 +2372,12 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Benachrichtigungen sind deaktiviert!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Now admins can:&#10;- delete members' messages.&#10;- disable members (&quot;observer&quot; role)" xml:space="preserve">
<source>Now admins can:
- delete members' messages.
- disable members ("observer" role)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Aus (Lokal)</target>
@ -2405,6 +2503,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>PING-Intervall</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste" xml:space="preserve">
<source>Paste</source>
<target>Einfügen</target>
@ -2455,6 +2557,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Bitte überprüfen sie sowohl Ihre, als auch die Präferenzen Ihres Kontakts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<target>Bitte kontaktieren Sie den Gruppen-Administrator.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
<source>Please enter correct current passphrase.</source>
<target>Bitte geben Sie das korrekte, aktuelle Passwort ein.</target>
@ -2550,6 +2657,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>App-Bildschirm schützen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protect your chat profiles with a password!" xml:space="preserve">
<source>Protect your chat profiles with a password!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protocol timeout" xml:space="preserve">
<source>Protocol timeout</source>
<target>Protokollzeitüberschreitung</target>
@ -2745,6 +2856,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Speichern und Gruppenmitglieder benachrichtigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
<source>Save archive</source>
<target>Archiv speichern</target>
@ -2770,11 +2885,23 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Präferenzen speichern?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save profile password" xml:space="preserve">
<source>Save profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers" xml:space="preserve">
<source>Save servers</source>
<target>Alle Server speichern</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers?" xml:space="preserve">
<source>Save servers?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save welcome message?" xml:space="preserve">
<source>Save welcome message?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
<source>Saved WebRTC ICE servers will be removed</source>
<target>Gespeicherte WebRTC ICE-Server werden entfernt</target>
@ -2925,6 +3052,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Passwort für den Export festlegen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set the message shown to new members!" xml:space="preserve">
<source>Set the message shown to new members!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve">
<source>Set timeouts for proxy/VPN</source>
<target>Zeitüberschreitungen für Proxy/VPN einstellen</target>
@ -2960,6 +3091,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>QR-Code anzeigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Anrufliste zeigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<target>Vorschau anzeigen</target>
@ -3100,6 +3236,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Schaltfläche antippen </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
<source>Tap to join</source>
<target>Zum Beitreten tippen</target>
@ -3185,9 +3325,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Die Gruppe ist vollständig dezentralisiert sie ist nur für Mitglieder sichtbar.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The microphone does not work when the app is in the background." xml:space="preserve">
<source>The microphone does not work when the app is in the background.</source>
<target>Das Mikrofon wird nicht funktionieren, wenn sich die App im Hintergrund befindet.</target>
<trans-unit id="The message will be deleted for all members." xml:space="preserve">
<source>The message will be deleted for all members.</source>
<target>Diese Nachricht wird für alle Gruppenmitglieder gelöscht.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The message will be marked as moderated for all members." xml:space="preserve">
<source>The message will be marked as moderated for all members.</source>
<target>Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The next generation of private messaging" xml:space="preserve">
@ -3220,6 +3365,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Design</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one user profile." xml:space="preserve">
<source>There should be at least one user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one visible user profile." xml:space="preserve">
<source>There should be at least one visible user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
<source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source>
<target>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.</target>
@ -3265,11 +3418,6 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Um eine Verbindung mit einem neuen Kontakt zu erstellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To prevent the call interruption, enable Do Not Disturb mode." xml:space="preserve">
<source>To prevent the call interruption, enable Do Not Disturb mode.</source>
<target>Aktivieren Sie den "Nicht stören" Modus, um Anruf-Unterbrechungen zu vermeiden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve">
<source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source>
<target>Zum Schutz Ihrer Privatsphäre verwendet SimpleX an Stelle von Benutzerkennungen, die von allen anderen Plattformen verwendet werden, Kennungen für Nachrichtenwarteschlangen, die für jeden Ihrer Kontakte individuell sind.</target>
@ -3292,6 +3440,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve">
<source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve">
<source>To support instant push notifications the chat database has to be migrated.</source>
<target>Um sofortige Push-Benachrichtigungen zu unterstützen, muss die Chat-Datenbank migriert werden.</target>
@ -3347,6 +3499,15 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Unerwarteter Migrationsstatus</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unknown caller" xml:space="preserve">
<source>Unknown caller</source>
<target>Anrufer unbekannt</target>
<note>callkit banner</note>
</trans-unit>
<trans-unit id="Unknown database error: %@" xml:space="preserve">
<source>Unknown database error: %@</source>
<target>Unbekannter Datenbankfehler: %@</target>
@ -3357,6 +3518,11 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Unbekannter Fehler</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
<target>Aktivieren Sie den Modus "Bitte nicht stören", um Unterbrechungen zu vermeiden, es sei denn, Sie verwenden die iOS Anrufschnittstelle.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.&#10;To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
<source>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.</source>
@ -3434,6 +3600,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Für neue Verbindungen nutzen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source>
<target>Benutzen Sie die iOS Anrufschnittstelle</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
<source>Use server</source>
<target>Server nutzen</target>
@ -3594,11 +3765,21 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Sie sind zu der Gruppe eingeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
<source>You can accept calls from lock screen, without device and app authentication.</source>
<target>Sie können Anrufe ohne Geräte- und App-Authentifizierung vom Sperrbildschirm aus annehmen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve">
<source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source>
<target>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**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
<source>You can now send messages to %@</source>
<target>Sie können nun Nachrichten an %@ versenden</target>
@ -3629,6 +3810,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Um Nachrichteninhalte zu formatieren, können Sie Markdowns verwenden:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
<source>You can't send messages!</source>
<target>Sie können keine Nachrichten versenden!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You control through which server(s) **to receive** the messages, your contacts the servers you use to message them." xml:space="preserve">
<source>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</source>
<target>Sie können selbst festlegen, über welche Server Sie Ihre Nachrichten **empfangen** und an Ihre Kontakte **senden** wollen.</target>
@ -3709,6 +3895,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Sie werden der Gruppe beitreten, auf die sich dieser Link bezieht und sich mit deren Gruppenmitgliedern verbinden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
<source>You will still receive calls and notifications from muted profiles when they are active.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve">
<source>You will stop receiving messages from this group. Chat history will be preserved.</source>
<target>Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten.</target>
@ -3769,11 +3959,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Meine Chat-Profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Meine Chats</target>
@ -3945,7 +4130,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="cancelled %@" xml:space="preserve">
<source>cancelled %@</source>
<target>Beende %@</target>
<target>abgebrochen %@</target>
<note>feature offered item</note>
</trans-unit>
<trans-unit id="changed address for you" xml:space="preserve">
@ -4238,6 +4423,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<target>Moderiert</target>
<note>moderated chat item</note>
</trans-unit>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>von %@ moderiert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="never" xml:space="preserve">
<source>never</source>
<target>nie</target>
@ -4258,6 +4448,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<target>Keine E2E-Verschlüsselung</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
<source>observer</source>
<target>Beobachter</target>
<note>member role</note>
</trans-unit>
<trans-unit id="off" xml:space="preserve">
<source>off</source>
<target>Aus</target>
@ -4266,12 +4461,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="offered %@" xml:space="preserve">
<source>offered %@</source>
<target>Beginne %@</target>
<target>angeboten %@</target>
<note>feature offered item</note>
</trans-unit>
<trans-unit id="offered %@: %@" xml:space="preserve">
<source>offered %1$@: %2$@</source>
<target>Beginne %1$@: %2$@</target>
<target>angeboten %1$@: %2$@</target>
<note>feature offered item</note>
</trans-unit>
<trans-unit id="on" xml:space="preserve">
@ -4414,6 +4609,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<target>Sie sind zur Gruppe eingeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
<source>you are observer</source>
<target>Sie sind Beobachter</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>Sie haben die Adresse gewechselt</target>
@ -4468,7 +4668,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="de" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleName" xml:space="preserve">
@ -4500,7 +4700,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</file>
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="de" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleDisplayName" xml:space="preserve">

View File

@ -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"
}

View File

@ -2,7 +2,7 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="en" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
@ -385,6 +385,11 @@
<target>Add to another device</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add welcome message" xml:space="preserve">
<source>Add welcome message</source>
<target>Add welcome message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Admins can create the links to join groups.</target>
@ -480,6 +485,11 @@
<target>Already connected?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source>
<target>Always use relay</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Answer call" xml:space="preserve">
<source>Answer call</source>
<target>Answer call</target>
@ -520,11 +530,21 @@
<target>Audio &amp; video calls</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Audio and video calls" xml:space="preserve">
<source>Audio and video calls</source>
<target>Audio and video calls</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Authentication failed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<target>Authentication is required before the call is connected, but you may miss calls.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication unavailable" xml:space="preserve">
<source>Authentication unavailable</source>
<target>Authentication unavailable</target>
@ -580,6 +600,11 @@
<target>Calls</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
<source>Can't delete user profile!</source>
<target>Can't delete user profile!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't invite contact!" xml:space="preserve">
<source>Can't invite contact!</source>
<target>Can't invite contact!</target>
@ -685,6 +710,11 @@
<target>Check server address and try again.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chinese and Spanish interface" xml:space="preserve">
<source>Chinese and Spanish interface</source>
<target>Chinese and Spanish interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Choose file</target>
@ -740,6 +770,11 @@
<target>Confirm new passphrase…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm password" xml:space="preserve">
<source>Confirm password</source>
<target>Confirm password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Connect</target>
@ -770,11 +805,6 @@
<target>Connect via one-time link?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via relay" xml:space="preserve">
<source>Connect via relay</source>
<target>Connect via relay</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source>
<target>Connecting to server…</target>
@ -1133,6 +1163,11 @@
<target>Delete link?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete member message?" xml:space="preserve">
<source>Delete member message?</source>
<target>Delete member message?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete message?" xml:space="preserve">
<source>Delete message?</source>
<target>Delete message?</target>
@ -1268,6 +1303,11 @@
<target>Do it later</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't show again" xml:space="preserve">
<source>Don't show again</source>
<target>Don't show again</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Duplicate display name!</target>
@ -1368,6 +1408,11 @@
<target>Enter passphrase…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter password above to show!" xml:space="preserve">
<source>Enter password above to show!</source>
<target>Enter password above to show!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter server manually" xml:space="preserve">
<source>Enter server manually</source>
<target>Enter server manually</target>
@ -1523,6 +1568,11 @@
<target>Error saving passphrase to keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Error saving user password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending message" xml:space="preserve">
<source>Error sending message</source>
<target>Error sending message</target>
@ -1543,6 +1593,11 @@
<target>Error switching profile!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating group link" xml:space="preserve">
<source>Error updating group link</source>
<target>Error updating group link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Error updating message</target>
@ -1553,6 +1608,11 @@
<target>Error updating settings</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating user privacy" xml:space="preserve">
<source>Error updating user privacy</source>
<target>Error updating user privacy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: %@" xml:space="preserve">
<source>Error: %@</source>
<target>Error: %@</target>
@ -1638,6 +1698,16 @@
<target>Full name:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source>
<target>Fully re-implemented - work in background!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Further reduced battery usage" xml:space="preserve">
<source>Further reduced battery usage</source>
<target>Further reduced battery usage</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="GIFs and stickers" xml:space="preserve">
<source>GIFs and stickers</source>
<target>GIFs and stickers</target>
@ -1713,6 +1783,11 @@
<target>Group message:</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Group moderation" xml:space="preserve">
<source>Group moderation</source>
<target>Group moderation</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group preferences" xml:space="preserve">
<source>Group preferences</source>
<target>Group preferences</target>
@ -1728,6 +1803,11 @@
<target>Group profile is stored on members' devices, not on the servers.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group welcome message" xml:space="preserve">
<source>Group welcome message</source>
<target>Group welcome message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for all members - this cannot be undone!</source>
<target>Group will be deleted for all members - this cannot be undone!</target>
@ -1748,6 +1828,16 @@
<target>Hidden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden chat profiles" xml:space="preserve">
<source>Hidden chat profiles</source>
<target>Hidden chat profiles</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden profile password" xml:space="preserve">
<source>Hidden profile password</source>
<target>Hidden profile password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide" xml:space="preserve">
<source>Hide</source>
<target>Hide</target>
@ -1758,6 +1848,11 @@
<target>Hide app screen in the recent apps.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide profile" xml:space="preserve">
<source>Hide profile</source>
<target>Hide profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>How SimpleX works</target>
@ -1788,11 +1883,6 @@
<target>ICE servers (one per line)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If the video fails to connect, flip the camera to resolve it." xml:space="preserve">
<source>If the video fails to connect, flip the camera to resolve it.</source>
<target>If the video fails to connect, flip the camera to resolve it.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you can't meet in person, **show QR code in the video call**, or share the link." xml:space="preserve">
<source>If you can't meet in person, **show QR code in the video call**, or share the link.</source>
<target>If you can't meet in person, **show QR code in the video call**, or share the link.</target>
@ -1905,6 +1995,11 @@
<target>Instantly</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Interface" xml:space="preserve">
<source>Interface</source>
<target>Interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
<source>Invalid connection link</source>
<target>Invalid connection link</target>
@ -2060,6 +2155,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Make a private connection</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make profile private!" xml:space="preserve">
<source>Make profile private!</source>
<target>Make profile private!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</target>
@ -2160,6 +2260,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Migration is completed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
<source>Moderate</source>
<target>Moderate</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>More improvements are coming soon!</target>
@ -2180,6 +2285,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Mute</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
<target>Muted when inactive!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Name</target>
@ -2280,6 +2390,15 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Notifications are disabled!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Now admins can:&#10;- delete members' messages.&#10;- disable members (&quot;observer&quot; role)" xml:space="preserve">
<source>Now admins can:
- delete members' messages.
- disable members ("observer" role)</source>
<target>Now admins can:
- delete members' messages.
- disable members ("observer" role)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Off (Local)</target>
@ -2405,6 +2524,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>PING interval</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Password to show</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste" xml:space="preserve">
<source>Paste</source>
<target>Paste</target>
@ -2455,6 +2579,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Please check yours and your contact preferences.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<target>Please contact group admin.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
<source>Please enter correct current passphrase.</source>
<target>Please enter correct current passphrase.</target>
@ -2550,6 +2679,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Protect app screen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protect your chat profiles with a password!" xml:space="preserve">
<source>Protect your chat profiles with a password!</source>
<target>Protect your chat profiles with a password!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protocol timeout" xml:space="preserve">
<source>Protocol timeout</source>
<target>Protocol timeout</target>
@ -2745,6 +2879,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Save and notify group members</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<target>Save and update group profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
<source>Save archive</source>
<target>Save archive</target>
@ -2770,11 +2909,26 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Save preferences?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save profile password" xml:space="preserve">
<source>Save profile password</source>
<target>Save profile password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers" xml:space="preserve">
<source>Save servers</source>
<target>Save servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers?" xml:space="preserve">
<source>Save servers?</source>
<target>Save servers?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save welcome message?" xml:space="preserve">
<source>Save welcome message?</source>
<target>Save welcome message?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
<source>Saved WebRTC ICE servers will be removed</source>
<target>Saved WebRTC ICE servers will be removed</target>
@ -2925,6 +3079,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Set passphrase to export</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set the message shown to new members!" xml:space="preserve">
<source>Set the message shown to new members!</source>
<target>Set the message shown to new members!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve">
<source>Set timeouts for proxy/VPN</source>
<target>Set timeouts for proxy/VPN</target>
@ -2960,6 +3119,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Show QR code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Show calls in phone history</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<target>Show preview</target>
@ -3100,6 +3264,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Tap button </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<target>Tap to activate profile.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
<source>Tap to join</source>
<target>Tap to join</target>
@ -3185,9 +3354,14 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>The group is fully decentralized it is visible only to the members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The microphone does not work when the app is in the background." xml:space="preserve">
<source>The microphone does not work when the app is in the background.</source>
<target>The microphone does not work when the app is in the background.</target>
<trans-unit id="The message will be deleted for all members." xml:space="preserve">
<source>The message will be deleted for all members.</source>
<target>The message will be deleted for all members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The message will be marked as moderated for all members." xml:space="preserve">
<source>The message will be marked as moderated for all members.</source>
<target>The message will be marked as moderated for all members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The next generation of private messaging" xml:space="preserve">
@ -3220,6 +3394,16 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Theme</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one user profile." xml:space="preserve">
<source>There should be at least one user profile.</source>
<target>There should be at least one user profile.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one visible user profile." xml:space="preserve">
<source>There should be at least one visible user profile.</source>
<target>There should be at least one visible user profile.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
<source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source>
<target>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</target>
@ -3265,11 +3449,6 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>To make a new connection</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To prevent the call interruption, enable Do Not Disturb mode." xml:space="preserve">
<source>To prevent the call interruption, enable Do Not Disturb mode.</source>
<target>To prevent the call interruption, enable Do Not Disturb mode.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve">
<source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source>
<target>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</target>
@ -3292,6 +3471,11 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>To record voice message please grant permission to use Microphone.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve">
<source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source>
<target>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve">
<source>To support instant push notifications the chat database has to be migrated.</source>
<target>To support instant push notifications the chat database has to be migrated.</target>
@ -3347,6 +3531,16 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Unexpected migration state</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Unhide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unknown caller" xml:space="preserve">
<source>Unknown caller</source>
<target>Unknown caller</target>
<note>callkit banner</note>
</trans-unit>
<trans-unit id="Unknown database error: %@" xml:space="preserve">
<source>Unknown database error: %@</source>
<target>Unknown database error: %@</target>
@ -3357,6 +3551,11 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Unknown error</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
<target>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.&#10;To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
<source>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.</source>
@ -3434,6 +3633,11 @@ To connect, please ask your contact to create another connection link and check
<target>Use for new connections</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source>
<target>Use iOS call interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
<source>Use server</source>
<target>Use server</target>
@ -3594,11 +3798,23 @@ To connect, please ask your contact to create another connection link and check
<target>You are invited to group</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
<source>You can accept calls from lock screen, without device and app authentication.</source>
<target>You can accept calls from lock screen, without device and app authentication.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve">
<source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source>
<target>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
<source>You can now send messages to %@</source>
<target>You can now send messages to %@</target>
@ -3629,6 +3845,11 @@ To connect, please ask your contact to create another connection link and check
<target>You can use markdown to format messages:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
<source>You can't send messages!</source>
<target>You can't send messages!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You control through which server(s) **to receive** the messages, your contacts the servers you use to message them." xml:space="preserve">
<source>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</source>
<target>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</target>
@ -3709,6 +3930,11 @@ To connect, please ask your contact to create another connection link and check
<target>You will join a group this link refers to and connect to its group members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
<source>You will still receive calls and notifications from muted profiles when they are active.</source>
<target>You will still receive calls and notifications from muted profiles when they are active.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve">
<source>You will stop receiving messages from this group. Chat history will be preserved.</source>
<target>You will stop receiving messages from this group. Chat history will be preserved.</target>
@ -3769,11 +3995,6 @@ To connect, please ask your contact to create another connection link and check
<target>Your chat profiles</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Your chat profiles are stored locally, only on your device.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Your chats</target>
@ -4238,6 +4459,11 @@ SimpleX servers cannot see your profile.</target>
<target>moderated</target>
<note>moderated chat item</note>
</trans-unit>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderated by %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="never" xml:space="preserve">
<source>never</source>
<target>never</target>
@ -4258,6 +4484,11 @@ SimpleX servers cannot see your profile.</target>
<target>no e2e encryption</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
<source>observer</source>
<target>observer</target>
<note>member role</note>
</trans-unit>
<trans-unit id="off" xml:space="preserve">
<source>off</source>
<target>off</target>
@ -4414,6 +4645,11 @@ SimpleX servers cannot see your profile.</target>
<target>you are invited to group</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
<source>you are observer</source>
<target>you are observer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>you changed address</target>
@ -4468,7 +4704,7 @@ SimpleX servers cannot see your profile.</target>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="en" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleName" xml:space="preserve">
@ -4500,7 +4736,7 @@ SimpleX servers cannot see your profile.</target>
</file>
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="en" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleDisplayName" xml:space="preserve">

View File

@ -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"
}

View File

@ -0,0 +1,15 @@
{
"colors" : [
{
"idiom" : "universal",
"locale" : "es"
}
],
"properties" : {
"localizable" : true
},
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -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"
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -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.";

View File

@ -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!";

View File

@ -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";

View File

@ -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"
}

View File

@ -2,7 +2,7 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="fr" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
@ -385,6 +385,10 @@
<target>Ajouter à un autre appareil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add welcome message" xml:space="preserve">
<source>Add welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Les admins peuvent créer les liens qui permettent de rejoindre les groupes.</target>
@ -480,6 +484,11 @@
<target>Déjà connecté ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source>
<target>Se connecter via relais</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Answer call" xml:space="preserve">
<source>Answer call</source>
<target>Répondre à l'appel</target>
@ -520,11 +529,20 @@
<target>Appels audio et vidéo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Audio and video calls" xml:space="preserve">
<source>Audio and video calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Échec de l'authentification</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<target>L'authentification est requise avant que l'appel ne soit connecté, mais vous risquez de manquer des appels.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication unavailable" xml:space="preserve">
<source>Authentication unavailable</source>
<target>Authentification indisponible</target>
@ -580,6 +598,10 @@
<target>Appels</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
<source>Can't delete user profile!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't invite contact!" xml:space="preserve">
<source>Can't invite contact!</source>
<target>Impossible d'inviter le contact!</target>
@ -685,6 +707,10 @@
<target>Vérifiez l'adresse du serveur et réessayez.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chinese and Spanish interface" xml:space="preserve">
<source>Chinese and Spanish interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Choisir le fichier</target>
@ -740,6 +766,10 @@
<target>Confirmer la nouvelle phrase secrète…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm password" xml:space="preserve">
<source>Confirm password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Se connecter</target>
@ -770,11 +800,6 @@
<target>Se connecter via un lien unique?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via relay" xml:space="preserve">
<source>Connect via relay</source>
<target>Se connecter via relais</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source>
<target>Connexion au serveur…</target>
@ -1133,6 +1158,11 @@
<target>Supprimer le lien?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete member message?" xml:space="preserve">
<source>Delete member message?</source>
<target>Supprimer le message de ce membre ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete message?" xml:space="preserve">
<source>Delete message?</source>
<target>Supprimer le message?</target>
@ -1268,6 +1298,10 @@
<target>Faites-le plus tard</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't show again" xml:space="preserve">
<source>Don't show again</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nom d'affichage en double !</target>
@ -1368,6 +1402,10 @@
<target>Entrez la phrase secrète…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter password above to show!" xml:space="preserve">
<source>Enter password above to show!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter server manually" xml:space="preserve">
<source>Enter server manually</source>
<target>Entrer un serveur manuellement</target>
@ -1523,6 +1561,10 @@
<target>Erreur lors de l'enregistrement de la phrase de passe dans la keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending message" xml:space="preserve">
<source>Error sending message</source>
<target>Erreur lors de l'envoi du message</target>
@ -1543,6 +1585,11 @@
<target>Erreur lors du changement de profil !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating group link" xml:space="preserve">
<source>Error updating group link</source>
<target>Erreur lors de la mise à jour du lien de groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Erreur lors de la mise à jour du message</target>
@ -1553,6 +1600,10 @@
<target>Erreur lors de la mise à jour des paramètres</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating user privacy" xml:space="preserve">
<source>Error updating user privacy</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: %@" xml:space="preserve">
<source>Error: %@</source>
<target>Erreur: %@</target>
@ -1638,6 +1689,14 @@
<target>Nom complet :</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Further reduced battery usage" xml:space="preserve">
<source>Further reduced battery usage</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="GIFs and stickers" xml:space="preserve">
<source>GIFs and stickers</source>
<target>GIFs et stickers</target>
@ -1713,6 +1772,10 @@
<target>Message du groupe:</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Group moderation" xml:space="preserve">
<source>Group moderation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group preferences" xml:space="preserve">
<source>Group preferences</source>
<target>Préférences du groupe</target>
@ -1728,6 +1791,10 @@
<target>Le profil du groupe est stocké sur les appareils des membres, pas sur les serveurs.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group welcome message" xml:space="preserve">
<source>Group welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for all members - this cannot be undone!</source>
<target>Le groupe va être supprimé pour tout les membres - impossible de revenir en arrière!</target>
@ -1748,6 +1815,14 @@
<target>Caché</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden chat profiles" xml:space="preserve">
<source>Hidden chat profiles</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden profile password" xml:space="preserve">
<source>Hidden profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide" xml:space="preserve">
<source>Hide</source>
<target>Cacher</target>
@ -1758,6 +1833,10 @@
<target>Masquer l'écran de l'app dans les apps récentes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide profile" xml:space="preserve">
<source>Hide profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Comment SimpleX fonctionne</target>
@ -1788,11 +1867,6 @@
<target>Serveurs ICE (un par ligne)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If the video fails to connect, flip the camera to resolve it." xml:space="preserve">
<source>If the video fails to connect, flip the camera to resolve it.</source>
<target>Si la vidéo ne se connecte pas, retournez la caméra.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you can't meet in person, **show QR code in the video call**, or share the link." xml:space="preserve">
<source>If you can't meet in person, **show QR code in the video call**, or share the link.</source>
<target>Si vous ne pouvez pas voir la personne, **montrez lui le code QR dans un appel vidéo**, ou partagez lui le lien.</target>
@ -1905,6 +1979,11 @@
<target>Instantané</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Interface" xml:space="preserve">
<source>Interface</source>
<target>Interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
<source>Invalid connection link</source>
<target>Lien de connection invalide</target>
@ -2060,6 +2139,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Établir une connexion privée</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make profile private!" xml:space="preserve">
<source>Make profile private!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Assurez-vous que les adresses des serveurs SMP sont au bon format et ne sont pas dupliquées, un par ligne.</target>
@ -2160,6 +2243,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>La migration est terminée</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
<source>Moderate</source>
<target>Modéré</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Plus d'améliorations à venir !</target>
@ -2180,6 +2268,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Muet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nom</target>
@ -2280,6 +2372,12 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Les notifications sont désactivées!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Now admins can:&#10;- delete members' messages.&#10;- disable members (&quot;observer&quot; role)" xml:space="preserve">
<source>Now admins can:
- delete members' messages.
- disable members ("observer" role)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Off (Local)</target>
@ -2405,6 +2503,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Intervalle de PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste" xml:space="preserve">
<source>Paste</source>
<target>Coller</target>
@ -2455,6 +2557,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Veuillez vérifier vos préférences ainsi que celles de votre contact.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<target>Veuillez contacter l'administrateur du groupe.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
<source>Please enter correct current passphrase.</source>
<target>Veuillez entrer la phrase secrète actuelle correcte.</target>
@ -2550,6 +2657,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Protéger l'écran de l'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protect your chat profiles with a password!" xml:space="preserve">
<source>Protect your chat profiles with a password!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protocol timeout" xml:space="preserve">
<source>Protocol timeout</source>
<target>Délai du protocole</target>
@ -2745,6 +2856,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Sauvegarder et en informer les membres du groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
<source>Save archive</source>
<target>Sauvegarder l'archive</target>
@ -2770,11 +2885,23 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Sauvegarder les préférences ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save profile password" xml:space="preserve">
<source>Save profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers" xml:space="preserve">
<source>Save servers</source>
<target>Sauvegarder les serveurs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers?" xml:space="preserve">
<source>Save servers?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save welcome message?" xml:space="preserve">
<source>Save welcome message?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
<source>Saved WebRTC ICE servers will be removed</source>
<target>Les serveurs WebRTC ICE sauvegardés seront supprimés</target>
@ -2925,6 +3052,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Définir la phrase secrète pour l'export</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set the message shown to new members!" xml:space="preserve">
<source>Set the message shown to new members!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve">
<source>Set timeouts for proxy/VPN</source>
<target>Définir les délais pour le proxy/VPN</target>
@ -2960,6 +3091,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Afficher le code QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Afficher les appels dans l'historique du téléphone</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<target>Montrer l'aperçu</target>
@ -3100,6 +3236,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Appuyez sur le bouton </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
<source>Tap to join</source>
<target>Appuyez pour rejoindre</target>
@ -3185,9 +3325,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Le groupe est entièrement décentralisé il n'est visible que par ses membres.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The microphone does not work when the app is in the background." xml:space="preserve">
<source>The microphone does not work when the app is in the background.</source>
<target>Le microphone ne fonctionne pas lorsque l'application est en arrière-plan.</target>
<trans-unit id="The message will be deleted for all members." xml:space="preserve">
<source>The message will be deleted for all members.</source>
<target>Le message sera supprimé pour tous les membres.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The message will be marked as moderated for all members." xml:space="preserve">
<source>The message will be marked as moderated for all members.</source>
<target>Le message sera marqué comme modéré pour tous les membres.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The next generation of private messaging" xml:space="preserve">
@ -3220,6 +3365,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Thème</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one user profile." xml:space="preserve">
<source>There should be at least one user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one visible user profile." xml:space="preserve">
<source>There should be at least one visible user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
<source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source>
<target>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.</target>
@ -3265,11 +3418,6 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Pour établir une nouvelle connexion</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To prevent the call interruption, enable Do Not Disturb mode." xml:space="preserve">
<source>To prevent the call interruption, enable Do Not Disturb mode.</source>
<target>Pour éviter l'interruption des appels, activez le mode Ne pas déranger.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve">
<source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source>
<target>Pour protéger votre vie privée, au lieu dIDs utilisés par toutes les autres plateformes, SimpleX a des IDs pour les queues de messages, distinctes pour chacun de vos contacts.</target>
@ -3292,6 +3440,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>Pour enregistrer un message vocal, veuillez accorder la permission d'utiliser le microphone.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve">
<source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve">
<source>To support instant push notifications the chat database has to be migrated.</source>
<target>Pour prendre en charge les notifications push instantanées, la base de données du chat doit être migrée.</target>
@ -3347,6 +3499,15 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>État de la migration inattendu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unknown caller" xml:space="preserve">
<source>Unknown caller</source>
<target>Appel inconnu</target>
<note>callkit banner</note>
</trans-unit>
<trans-unit id="Unknown database error: %@" xml:space="preserve">
<source>Unknown database error: %@</source>
<target>Erreur inconnue de la base de données: %@</target>
@ -3357,6 +3518,11 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>Erreur inconnue</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
<target>À moins que vous utilisiez l'interface d'appel d'iOS, activez le mode "Ne pas déranger" pour éviter les interruptions.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.&#10;To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
<source>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.</source>
@ -3434,6 +3600,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Utiliser pour les nouvelles connexions</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source>
<target>Utiliser l'interface d'appel d'iOS</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
<source>Use server</source>
<target>Utiliser ce serveur</target>
@ -3594,11 +3765,21 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vous êtes invité·e au groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
<source>You can accept calls from lock screen, without device and app authentication.</source>
<target>Vous pouvez accepter des appels à partir de l'écran de verrouillage, sans authentification de l'appareil ou de l'application.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve">
<source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source>
<target>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**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
<source>You can now send messages to %@</source>
<target>Vous pouvez maintenant envoyer des messages à %@</target>
@ -3629,6 +3810,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vous pouvez utiliser le format markdown pour mettre en forme les messages :</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
<source>You can't send messages!</source>
<target>Vous ne pouvez pas envoyer de messages !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You control through which server(s) **to receive** the messages, your contacts the servers you use to message them." xml:space="preserve">
<source>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</source>
<target>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.</target>
@ -3709,6 +3895,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vous allez rejoindre le groupe correspondant à ce lien et être mis en relation avec les autres membres du groupe.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
<source>You will still receive calls and notifications from muted profiles when they are active.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve">
<source>You will stop receiving messages from this group. Chat history will be preserved.</source>
<target>Vous ne recevrez plus de messages de ce groupe. L'historique du chat sera conservé.</target>
@ -3769,11 +3959,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vos profils de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Vos profils de chat sont stockés localement, uniquement sur votre appareil.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Vos chats</target>
@ -4238,6 +4423,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
<target>modéré</target>
<note>moderated chat item</note>
</trans-unit>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>modéré par %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="never" xml:space="preserve">
<source>never</source>
<target>jamais</target>
@ -4258,6 +4448,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
<target>sans chiffrement de bout en bout</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
<source>observer</source>
<target>observateur</target>
<note>member role</note>
</trans-unit>
<trans-unit id="off" xml:space="preserve">
<source>off</source>
<target>off</target>
@ -4414,6 +4609,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
<target>vous êtes invité·e au groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
<source>you are observer</source>
<target>vous êtes observateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>vous avez changé d'adresse</target>
@ -4468,7 +4668,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="fr" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleName" xml:space="preserve">
@ -4500,7 +4700,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</file>
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="fr" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleDisplayName" xml:space="preserve">

View File

@ -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"
}

View File

@ -2,7 +2,7 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="it" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
@ -385,6 +385,10 @@
<target>Aggiungi ad un altro dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add welcome message" xml:space="preserve">
<source>Add welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Gli amministratori possono creare i link per entrare nei gruppi.</target>
@ -480,6 +484,11 @@
<target>Già connesso?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source>
<target>Connetti via relay</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Answer call" xml:space="preserve">
<source>Answer call</source>
<target>Rispondi alla chiamata</target>
@ -520,11 +529,20 @@
<target>Chiamate audio e video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Audio and video calls" xml:space="preserve">
<source>Audio and video calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Autenticazione fallita</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<target>L'autenticazione è necessaria prima che la chiamata sia connessa, ma potresti perdere le chiamate.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication unavailable" xml:space="preserve">
<source>Authentication unavailable</source>
<target>Autenticazione non disponibile</target>
@ -580,6 +598,10 @@
<target>Chiamate</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
<source>Can't delete user profile!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't invite contact!" xml:space="preserve">
<source>Can't invite contact!</source>
<target>Impossibile invitare il contatto!</target>
@ -685,6 +707,10 @@
<target>Controlla l'indirizzo del server e riprova.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chinese and Spanish interface" xml:space="preserve">
<source>Chinese and Spanish interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Scegli file</target>
@ -740,6 +766,10 @@
<target>Conferma password nuova…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm password" xml:space="preserve">
<source>Confirm password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Connetti</target>
@ -770,11 +800,6 @@
<target>Connettere via link una tantum?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via relay" xml:space="preserve">
<source>Connect via relay</source>
<target>Connetti via relay</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source>
<target>Connessione al server…</target>
@ -1133,6 +1158,11 @@
<target>Eliminare il link?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete member message?" xml:space="preserve">
<source>Delete member message?</source>
<target>Eliminare il messaggio del membro?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete message?" xml:space="preserve">
<source>Delete message?</source>
<target>Eliminare il messaggio?</target>
@ -1268,6 +1298,10 @@
<target>Fallo dopo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't show again" xml:space="preserve">
<source>Don't show again</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nome da mostrare doppio!</target>
@ -1368,6 +1402,10 @@
<target>Inserisci la password…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter password above to show!" xml:space="preserve">
<source>Enter password above to show!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter server manually" xml:space="preserve">
<source>Enter server manually</source>
<target>Inserisci il server a mano</target>
@ -1523,6 +1561,10 @@
<target>Errore nel salvataggio della password nel portachiavi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending message" xml:space="preserve">
<source>Error sending message</source>
<target>Errore nell'invio del messaggio</target>
@ -1543,6 +1585,11 @@
<target>Errore nel cambio di profilo!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating group link" xml:space="preserve">
<source>Error updating group link</source>
<target>Errore nell'aggiornamento del link del gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Errore nell'aggiornamento del messaggio</target>
@ -1553,6 +1600,10 @@
<target>Errore nell'aggiornamento delle impostazioni</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating user privacy" xml:space="preserve">
<source>Error updating user privacy</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: %@" xml:space="preserve">
<source>Error: %@</source>
<target>Errore: %@</target>
@ -1638,6 +1689,14 @@
<target>Nome completo:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Further reduced battery usage" xml:space="preserve">
<source>Further reduced battery usage</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="GIFs and stickers" xml:space="preserve">
<source>GIFs and stickers</source>
<target>GIF e adesivi</target>
@ -1713,6 +1772,10 @@
<target>Messaggio del gruppo:</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Group moderation" xml:space="preserve">
<source>Group moderation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group preferences" xml:space="preserve">
<source>Group preferences</source>
<target>Preferenze del gruppo</target>
@ -1728,6 +1791,10 @@
<target>Il profilo del gruppo è memorizzato sui dispositivi dei membri, non sui server.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group welcome message" xml:space="preserve">
<source>Group welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for all members - this cannot be undone!</source>
<target>Il gruppo verrà eliminato per tutti i membri. Non è reversibile!</target>
@ -1748,6 +1815,14 @@
<target>Nascosta</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden chat profiles" xml:space="preserve">
<source>Hidden chat profiles</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden profile password" xml:space="preserve">
<source>Hidden profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide" xml:space="preserve">
<source>Hide</source>
<target>Nascondi</target>
@ -1758,6 +1833,10 @@
<target>Nascondi la schermata dell'app nelle app recenti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide profile" xml:space="preserve">
<source>Hide profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Come funziona SimpleX</target>
@ -1788,11 +1867,6 @@
<target>Server ICE (uno per riga)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If the video fails to connect, flip the camera to resolve it." xml:space="preserve">
<source>If the video fails to connect, flip the camera to resolve it.</source>
<target>Se il video non riesce a connettersi, cambia la fotocamera (frontale/posteriore) per risolvere.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you can't meet in person, **show QR code in the video call**, or share the link." xml:space="preserve">
<source>If you can't meet in person, **show QR code in the video call**, or share the link.</source>
<target>Se non potete incontrarvi di persona, **mostra il codice QR durante la videochiamata** o condividi il link.</target>
@ -1905,6 +1979,11 @@
<target>Istantaneamente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Interface" xml:space="preserve">
<source>Interface</source>
<target>Interfaccia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
<source>Invalid connection link</source>
<target>Link di connessione non valido</target>
@ -2060,6 +2139,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Crea una connessione privata</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make profile private!" xml:space="preserve">
<source>Make profile private!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Assicurati che gli indirizzi dei server SMP siano nel formato corretto, uno per riga e non doppi (%@).</target>
@ -2160,6 +2243,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>La migrazione è completata</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
<source>Moderate</source>
<target>Modera</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Altri miglioramenti sono in arrivo!</target>
@ -2180,6 +2268,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Silenzia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nome</target>
@ -2280,6 +2372,12 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Le notifiche sono disattivate!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Now admins can:&#10;- delete members' messages.&#10;- disable members (&quot;observer&quot; role)" xml:space="preserve">
<source>Now admins can:
- delete members' messages.
- disable members ("observer" role)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Off (Locale)</target>
@ -2405,6 +2503,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Intervallo PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste" xml:space="preserve">
<source>Paste</source>
<target>Incolla</target>
@ -2455,6 +2557,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Controlla le preferenze tue e del tuo contatto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<target>Contatta l'amministratore del gruppo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
<source>Please enter correct current passphrase.</source>
<target>Inserisci la password attuale corretta.</target>
@ -2550,6 +2657,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Proteggi la schermata dell'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protect your chat profiles with a password!" xml:space="preserve">
<source>Protect your chat profiles with a password!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protocol timeout" xml:space="preserve">
<source>Protocol timeout</source>
<target>Scadenza del protocollo</target>
@ -2745,6 +2856,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Salva e avvisa i membri del gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
<source>Save archive</source>
<target>Salva archivio</target>
@ -2770,11 +2885,23 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Salvare le preferenze?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save profile password" xml:space="preserve">
<source>Save profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers" xml:space="preserve">
<source>Save servers</source>
<target>Salva i server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers?" xml:space="preserve">
<source>Save servers?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save welcome message?" xml:space="preserve">
<source>Save welcome message?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
<source>Saved WebRTC ICE servers will be removed</source>
<target>I server WebRTC ICE salvati verranno rimossi</target>
@ -2925,6 +3052,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Imposta la password per esportare</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set the message shown to new members!" xml:space="preserve">
<source>Set the message shown to new members!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve">
<source>Set timeouts for proxy/VPN</source>
<target>Imposta scadenze per proxy/VPN</target>
@ -2960,6 +3091,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Mostra codice QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Mostra le chiamate nella cronologia del telefono</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<target>Mostra anteprima</target>
@ -3100,6 +3236,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Tocca il pulsante </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
<source>Tap to join</source>
<target>Tocca per entrare</target>
@ -3185,9 +3325,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Il gruppo è completamente decentralizzato: è visibile solo ai membri.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The microphone does not work when the app is in the background." xml:space="preserve">
<source>The microphone does not work when the app is in the background.</source>
<target>Il microfono non funziona quando l'app è in secondo piano.</target>
<trans-unit id="The message will be deleted for all members." xml:space="preserve">
<source>The message will be deleted for all members.</source>
<target>Il messaggio verrà eliminato per tutti i membri.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The message will be marked as moderated for all members." xml:space="preserve">
<source>The message will be marked as moderated for all members.</source>
<target>Il messaggio sarà segnato come moderato per tutti i membri.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The next generation of private messaging" xml:space="preserve">
@ -3220,6 +3365,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Tema</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one user profile." xml:space="preserve">
<source>There should be at least one user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one visible user profile." xml:space="preserve">
<source>There should be at least one visible user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
<source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source>
<target>Questa azione non può essere annullata: tutti i file e i media ricevuti e inviati verranno eliminati. Rimarranno le immagini a bassa risoluzione.</target>
@ -3265,11 +3418,6 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Per creare una nuova connessione</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To prevent the call interruption, enable Do Not Disturb mode." xml:space="preserve">
<source>To prevent the call interruption, enable Do Not Disturb mode.</source>
<target>Per evitare l'interruzione della chiamata, attiva la modalità Non disturbare.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve">
<source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source>
<target>Per proteggere la privacy, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX ha identificatori per le code di messaggi, separati per ciascuno dei tuoi contatti.</target>
@ -3292,6 +3440,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Per registrare un messaggio vocale, concedi l'autorizzazione all'uso del microfono.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve">
<source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve">
<source>To support instant push notifications the chat database has to be migrated.</source>
<target>Per supportare le notifiche push istantanee, il database della chat deve essere migrato.</target>
@ -3347,6 +3499,15 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Stato di migrazione imprevisto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unknown caller" xml:space="preserve">
<source>Unknown caller</source>
<target>Chiamante sconosciuto</target>
<note>callkit banner</note>
</trans-unit>
<trans-unit id="Unknown database error: %@" xml:space="preserve">
<source>Unknown database error: %@</source>
<target>Errore del database sconosciuto: %@</target>
@ -3357,6 +3518,11 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Errore sconosciuto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
<target>A meno che non utilizzi l'interfaccia di chiamata iOS, attiva la modalità Non disturbare per evitare interruzioni.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.&#10;To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
<source>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.</source>
@ -3434,6 +3600,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Usa per connessioni nuove</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source>
<target>Usa interfaccia di chiamata iOS</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
<source>Use server</source>
<target>Usa il server</target>
@ -3594,11 +3765,21 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Sei stato/a invitato/a al gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
<source>You can accept calls from lock screen, without device and app authentication.</source>
<target>Puoi accettare chiamate dalla schermata di blocco, senza l'autenticazione del dispositivo e dell'app.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve">
<source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source>
<target>Puoi anche connetterti cliccando il link. Se si apre nel browser, clicca il pulsante **Apri nell'app mobile**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
<source>You can now send messages to %@</source>
<target>Ora puoi inviare messaggi a %@</target>
@ -3629,6 +3810,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Puoi usare il markdown per formattare i messaggi:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
<source>You can't send messages!</source>
<target>Non puoi inviare messaggi!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You control through which server(s) **to receive** the messages, your contacts the servers you use to message them." xml:space="preserve">
<source>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</source>
<target>Puoi controllare attraverso quale/i server **ricevere** i messaggi, i tuoi contatti i server che usi per inviare loro i messaggi.</target>
@ -3709,6 +3895,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Entrerai in un gruppo a cui si riferisce questo link e ti connetterai ai suoi membri.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
<source>You will still receive calls and notifications from muted profiles when they are active.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve">
<source>You will stop receiving messages from this group. Chat history will be preserved.</source>
<target>Non riceverai più messaggi da questo gruppo. La cronologia della chat verrà conservata.</target>
@ -3769,11 +3959,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>I tuoi profili di chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Le tue chat</target>
@ -4238,6 +4423,11 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<target>moderato</target>
<note>moderated chat item</note>
</trans-unit>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderato da %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="never" xml:space="preserve">
<source>never</source>
<target>mai</target>
@ -4258,6 +4448,11 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<target>nessuna crittografia e2e</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
<source>observer</source>
<target>osservatore</target>
<note>member role</note>
</trans-unit>
<trans-unit id="off" xml:space="preserve">
<source>off</source>
<target>off</target>
@ -4414,6 +4609,11 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<target>sei stato/a invitato/a al gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
<source>you are observer</source>
<target>sei un osservatore</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>hai cambiato indirizzo</target>
@ -4468,7 +4668,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="it" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleName" xml:space="preserve">
@ -4500,7 +4700,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</file>
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="it" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleDisplayName" xml:space="preserve">

View File

@ -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"
}

View File

@ -1,33 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="nb-NO" datatype="plaintext">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="lt" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
<trans-unit id="&#10;" xml:space="preserve" approved="no">
<source>
</source>
<target state="translated">
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (" xml:space="preserve">
<trans-unit id=" (" xml:space="preserve" approved="no">
<source> (</source>
<target state="translated"> (</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (can be copied)" xml:space="preserve">
<trans-unit id=" (can be copied)" xml:space="preserve" approved="no">
<source> (can be copied)</source>
<target state="translated"> (galima nukopijuoti)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="!1 colored!" xml:space="preserve">
@ -38,16 +45,19 @@
<source>#secret#</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@" xml:space="preserve">
<trans-unit id="%@" xml:space="preserve" approved="no">
<source>%@</source>
<target state="translated">%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ %@" xml:space="preserve">
<trans-unit id="%@ %@" xml:space="preserve" approved="no">
<source>%@ %@</source>
<target state="translated">%@ %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ / %@" xml:space="preserve">
<trans-unit id="%@ / %@" xml:space="preserve" approved="no">
<source>%@ / %@</source>
<target state="translated">%@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
@ -384,6 +394,10 @@
<source>Already connected?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Answer call" xml:space="preserve">
<source>Answer call</source>
<note>No comment provided by engineer.</note>
@ -420,6 +434,10 @@
<source>Authentication failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication unavailable" xml:space="preserve">
<source>Authentication unavailable</source>
<note>No comment provided by engineer.</note>
@ -616,10 +634,6 @@
<source>Connect via one-time link?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via relay" xml:space="preserve">
<source>Connect via relay</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source>
<note>No comment provided by engineer.</note>
@ -904,6 +918,10 @@
<source>Delete link?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete member message?" xml:space="preserve">
<source>Delete member message?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete message?" xml:space="preserve">
<source>Delete message?</source>
<note>No comment provided by engineer.</note>
@ -1232,6 +1250,10 @@
<source>Error switching profile!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating group link" xml:space="preserve">
<source>Error updating group link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<note>No comment provided by engineer.</note>
@ -1428,10 +1450,6 @@
<source>ICE servers (one per line)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If the video fails to connect, flip the camera to resolve it." xml:space="preserve">
<source>If the video fails to connect, flip the camera to resolve it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you can't meet in person, **show QR code in the video call**, or share the link." xml:space="preserve">
<source>If you can't meet in person, **show QR code in the video call**, or share the link.</source>
<note>No comment provided by engineer.</note>
@ -1521,6 +1539,10 @@
<source>Instantly</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Interface" xml:space="preserve">
<source>Interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
<source>Invalid connection link</source>
<note>No comment provided by engineer.</note>
@ -1722,6 +1744,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<source>Migration is completed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
<source>Moderate</source>
<note>chat item action</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<note>No comment provided by engineer.</note>
@ -1898,6 +1924,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<source>Open chat console</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open-source protocol and code anybody can run the servers." xml:space="preserve">
<source>Open-source protocol and code anybody can run the servers.</source>
<note>No comment provided by engineer.</note>
@ -1954,6 +1984,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<source>Please check yours and your contact preferences.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
<source>Please enter correct current passphrase.</source>
<note>No comment provided by engineer.</note>
@ -2358,6 +2392,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<note>No comment provided by engineer.</note>
@ -2538,8 +2576,12 @@ We will be adding server redundancy to prevent lost messages.</source>
<source>The group is fully decentralized it is visible only to the members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The microphone does not work when the app is in the background." xml:space="preserve">
<source>The microphone does not work when the app is in the background.</source>
<trans-unit id="The message will be deleted for all members." xml:space="preserve">
<source>The message will be deleted for all members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The message will be marked as moderated for all members." xml:space="preserve">
<source>The message will be marked as moderated for all members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The next generation of private messaging" xml:space="preserve">
@ -2602,10 +2644,6 @@ We will be adding server redundancy to prevent lost messages.</source>
<source>To make a new connection</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To prevent the call interruption, enable Do Not Disturb mode." xml:space="preserve">
<source>To prevent the call interruption, enable Do Not Disturb mode.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve">
<source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source>
<note>No comment provided by engineer.</note>
@ -2667,6 +2705,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<source>Unexpected migration state</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unknown caller" xml:space="preserve">
<source>Unknown caller</source>
<note>callkit banner</note>
</trans-unit>
<trans-unit id="Unknown database error: %@" xml:space="preserve">
<source>Unknown database error: %@</source>
<note>No comment provided by engineer.</note>
@ -2675,6 +2717,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<source>Unknown error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.&#10;To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
<source>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.</source>
@ -2736,6 +2782,10 @@ To connect, please ask your contact to create another connection link and check
<source>Use for new connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
<source>Use server</source>
<note>No comment provided by engineer.</note>
@ -2864,6 +2914,10 @@ To connect, please ask your contact to create another connection link and check
<source>You are invited to group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
<source>You can accept calls from lock screen, without device and app authentication.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve">
<source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source>
<note>No comment provided by engineer.</note>
@ -2892,6 +2946,10 @@ To connect, please ask your contact to create another connection link and check
<source>You can use markdown to format messages:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
<source>You can't send messages!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You control through which server(s) **to receive** the messages, your contacts the servers you use to message them." xml:space="preserve">
<source>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</source>
<note>No comment provided by engineer.</note>
@ -3374,6 +3432,14 @@ SimpleX servers cannot see your profile.</source>
<source>missed call</source>
<note>call status</note>
</trans-unit>
<trans-unit id="moderated" xml:space="preserve">
<source>moderated</source>
<note>moderated chat item</note>
</trans-unit>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="never" xml:space="preserve">
<source>never</source>
<note>No comment provided by engineer.</note>
@ -3390,6 +3456,10 @@ SimpleX servers cannot see your profile.</source>
<source>no e2e encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
<source>observer</source>
<note>member role</note>
</trans-unit>
<trans-unit id="off" xml:space="preserve">
<source>off</source>
<note>enabled status
@ -3515,6 +3585,10 @@ SimpleX servers cannot see your profile.</source>
<source>you are invited to group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
<source>you are observer</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<note>chat item text</note>
@ -3557,9 +3631,9 @@ SimpleX servers cannot see your profile.</source>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="nb-NO" datatype="plaintext">
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="lt" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleName" xml:space="preserve">
@ -3584,9 +3658,9 @@ SimpleX servers cannot see your profile.</source>
</trans-unit>
</body>
</file>
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="nb-NO" datatype="plaintext">
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="lt" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleDisplayName" xml:space="preserve">

View File

@ -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"
}

View File

@ -2,7 +2,7 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<file original="en.lproj/Localizable.strings" source-language="en" target-language="ru" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
@ -385,6 +385,10 @@
<target>Добавить на другое устройство</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add welcome message" xml:space="preserve">
<source>Add welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Админы могут создать ссылки для вступления в группу.</target>
@ -480,6 +484,11 @@
<target>Соединение уже установлено?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source>
<target>Всегда соединяться через relay</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Answer call" xml:space="preserve">
<source>Answer call</source>
<target>Принять звонок</target>
@ -520,11 +529,19 @@
<target>Аудио- и видеозвонки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Audio and video calls" xml:space="preserve">
<source>Audio and video calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Ошибка аутентификации</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication unavailable" xml:space="preserve">
<source>Authentication unavailable</source>
<target>Аутентификация недоступна</target>
@ -580,6 +597,10 @@
<target>Звонки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
<source>Can't delete user profile!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't invite contact!" xml:space="preserve">
<source>Can't invite contact!</source>
<target>Нельзя пригласить контакт!</target>
@ -685,6 +706,10 @@
<target>Проверьте адрес сервера и попробуйте снова.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chinese and Spanish interface" xml:space="preserve">
<source>Chinese and Spanish interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Выбрать файл</target>
@ -740,6 +765,10 @@
<target>Подтвердите новый пароль…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm password" xml:space="preserve">
<source>Confirm password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Соединиться</target>
@ -770,11 +799,6 @@
<target>Соединиться через одноразовую ссылку?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via relay" xml:space="preserve">
<source>Connect via relay</source>
<target>Соединяться через сервер (relay)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source>
<target>Устанавливается соединение с сервером…</target>
@ -1133,6 +1157,11 @@
<target>Удалить ссылку?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete member message?" xml:space="preserve">
<source>Delete member message?</source>
<target>Удалить сообщение участника?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete message?" xml:space="preserve">
<source>Delete message?</source>
<target>Удалить сообщение?</target>
@ -1268,6 +1297,10 @@
<target>Отложить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't show again" xml:space="preserve">
<source>Don't show again</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Имя профиля уже используется!</target>
@ -1368,6 +1401,10 @@
<target>Введите пароль…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter password above to show!" xml:space="preserve">
<source>Enter password above to show!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter server manually" xml:space="preserve">
<source>Enter server manually</source>
<target>Ввести сервер вручную</target>
@ -1523,6 +1560,10 @@
<target>Ошибка сохранения пароля в Keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending message" xml:space="preserve">
<source>Error sending message</source>
<target>Ошибка при отправке сообщения</target>
@ -1543,6 +1584,11 @@
<target>Ошибка выбора профиля!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating group link" xml:space="preserve">
<source>Error updating group link</source>
<target>Ошибка обновления ссылки группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Ошибка при обновлении сообщения</target>
@ -1553,6 +1599,10 @@
<target>Ошибка при сохранении настроек сети</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating user privacy" xml:space="preserve">
<source>Error updating user privacy</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: %@" xml:space="preserve">
<source>Error: %@</source>
<target>Ошибка: %@</target>
@ -1638,6 +1688,14 @@
<target>Полное имя:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Further reduced battery usage" xml:space="preserve">
<source>Further reduced battery usage</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="GIFs and stickers" xml:space="preserve">
<source>GIFs and stickers</source>
<target>ГИФ файлы и стикеры</target>
@ -1713,6 +1771,10 @@
<target>Групповое сообщение:</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Group moderation" xml:space="preserve">
<source>Group moderation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group preferences" xml:space="preserve">
<source>Group preferences</source>
<target>Предпочтения группы</target>
@ -1728,6 +1790,10 @@
<target>Профиль группы хранится на устройствах членов, а не на серверах.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group welcome message" xml:space="preserve">
<source>Group welcome message</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for all members - this cannot be undone!</source>
<target>Группа будет удалена для всех членов - это действие нельзя отменить!</target>
@ -1748,6 +1814,14 @@
<target>Скрытое</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden chat profiles" xml:space="preserve">
<source>Hidden chat profiles</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hidden profile password" xml:space="preserve">
<source>Hidden profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide" xml:space="preserve">
<source>Hide</source>
<target>Спрятать</target>
@ -1758,6 +1832,10 @@
<target>Скрыть экран приложения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hide profile" xml:space="preserve">
<source>Hide profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Как SimpleX работает</target>
@ -1788,11 +1866,6 @@
<target>ICE серверы (один на строке)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If the video fails to connect, flip the camera to resolve it." xml:space="preserve">
<source>If the video fails to connect, flip the camera to resolve it.</source>
<target>Если видео не соединилось, переключите камеру.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you can't meet in person, **show QR code in the video call**, or share the link." xml:space="preserve">
<source>If you can't meet in person, **show QR code in the video call**, or share the link.</source>
<target>Если вы не можете встретиться лично, вы можете **показать QR код во время видеозвонка**, или поделиться ссылкой.</target>
@ -1905,6 +1978,10 @@
<target>Мгновенно</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Interface" xml:space="preserve">
<source>Interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
<source>Invalid connection link</source>
<target>Ошибка в ссылке контакта</target>
@ -2060,6 +2137,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Добавьте контакт</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make profile private!" xml:space="preserve">
<source>Make profile private!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Пожалуйста, проверьте, что адреса SMP серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@).</target>
@ -2160,6 +2241,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Перемещение данных завершено</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
<source>Moderate</source>
<target>Модерировать</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Дополнительные улучшения скоро!</target>
@ -2180,6 +2266,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Без звука</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Имя</target>
@ -2280,6 +2370,12 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Уведомления выключены</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Now admins can:&#10;- delete members' messages.&#10;- disable members (&quot;observer&quot; role)" xml:space="preserve">
<source>Now admins can:
- delete members' messages.
- disable members ("observer" role)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Выключить (Локальные)</target>
@ -2382,6 +2478,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Открыть профили пользователя</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open-source protocol and code anybody can run the servers." xml:space="preserve">
@ -2404,6 +2501,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Интервал PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste" xml:space="preserve">
<source>Paste</source>
<target>Вставить</target>
@ -2454,6 +2555,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Проверьте предпочтения вашего контакта.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<target>Пожалуйста, свяжитесь с админом группы.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
<source>Please enter correct current passphrase.</source>
<target>Пожалуйста, введите правильный пароль.</target>
@ -2549,6 +2655,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Защитить экран приложения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protect your chat profiles with a password!" xml:space="preserve">
<source>Protect your chat profiles with a password!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protocol timeout" xml:space="preserve">
<source>Protocol timeout</source>
<target>Таймаут протокола</target>
@ -2744,6 +2854,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Сохранить и уведомить членов группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
<source>Save archive</source>
<target>Сохранить архив</target>
@ -2769,11 +2883,23 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Сохранить предпочтения?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save profile password" xml:space="preserve">
<source>Save profile password</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers" xml:space="preserve">
<source>Save servers</source>
<target>Сохранить серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers?" xml:space="preserve">
<source>Save servers?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save welcome message?" xml:space="preserve">
<source>Save welcome message?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
<source>Saved WebRTC ICE servers will be removed</source>
<target>Сохраненные WebRTC ICE серверы будут удалены</target>
@ -2924,6 +3050,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Установите пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set the message shown to new members!" xml:space="preserve">
<source>Set the message shown to new members!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve">
<source>Set timeouts for proxy/VPN</source>
<target>Установить таймауты для прокси/VPN</target>
@ -2959,6 +3089,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Показать QR код</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<target>Показывать уведомления</target>
@ -3099,6 +3233,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Нажмите кнопку </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
<source>Tap to join</source>
<target>Нажмите, чтобы вступить</target>
@ -3184,9 +3322,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Группа полностью децентрализована — она видна только членам.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The microphone does not work when the app is in the background." xml:space="preserve">
<source>The microphone does not work when the app is in the background.</source>
<target>Микрофон не работает, когда приложение в фоновом режиме.</target>
<trans-unit id="The message will be deleted for all members." xml:space="preserve">
<source>The message will be deleted for all members.</source>
<target>Сообщение будет удалено для всех членов группы.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The message will be marked as moderated for all members." xml:space="preserve">
<source>The message will be marked as moderated for all members.</source>
<target>Сообщение будет помечено как удаленное для всех членов группы.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The next generation of private messaging" xml:space="preserve">
@ -3219,6 +3362,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Тема</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one user profile." xml:space="preserve">
<source>There should be at least one user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="There should be at least one visible user profile." xml:space="preserve">
<source>There should be at least one visible user profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
<source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source>
<target>Это действие нельзя отменить — все полученные и отправленные файлы будут удалены. Изображения останутся в низком разрешении.</target>
@ -3264,11 +3415,6 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Чтобы соединиться</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To prevent the call interruption, enable Do Not Disturb mode." xml:space="preserve">
<source>To prevent the call interruption, enable Do Not Disturb mode.</source>
<target>Чтобы избежать прерывания звонков, включите режим Не Беспокоить.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve">
<source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source>
<target>Чтобы защитить вашу конфиденциальность, вместо ID пользователей, которые есть в других платформах, SimpleX использует ID для очередей сообщений, разные для каждого контакта.</target>
@ -3291,6 +3437,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve">
<source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve">
<source>To support instant push notifications the chat database has to be migrated.</source>
<target>Для поддержки мгновенный доставки уведомлений данные чата должны быть перемещены.</target>
@ -3346,6 +3496,14 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Неожиданная ошибка при перемещении данных чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unknown caller" xml:space="preserve">
<source>Unknown caller</source>
<note>callkit banner</note>
</trans-unit>
<trans-unit id="Unknown database error: %@" xml:space="preserve">
<source>Unknown database error: %@</source>
<target>Неизвестная ошибка базы данных: %@</target>
@ -3356,6 +3514,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Неизвестная ошибка</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.&#10;To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
<source>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.</source>
@ -3433,6 +3595,10 @@ To connect, please ask your contact to create another connection link and check
<target>Использовать для новых соединений</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
<source>Use server</source>
<target>Использовать сервер</target>
@ -3593,11 +3759,20 @@ To connect, please ask your contact to create another connection link and check
<target>Вы приглашены в группу</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
<source>You can accept calls from lock screen, without device and app authentication.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve">
<source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source>
<target>Вы также можете соединиться, открыв ссылку. Если ссылка откроется в браузере, нажмите кнопку **Open in mobile app**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
<source>You can now send messages to %@</source>
<target>Вы теперь можете отправлять сообщения %@</target>
@ -3628,6 +3803,11 @@ To connect, please ask your contact to create another connection link and check
<target>Вы можете форматировать сообщения:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
<source>You can't send messages!</source>
<target>Вы не можете отправлять сообщения!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You control through which server(s) **to receive** the messages, your contacts the servers you use to message them." xml:space="preserve">
<source>You control through which server(s) **to receive** the messages, your contacts the servers you use to message them.</source>
<target>Вы определяете через какие серверы вы **получаете сообщения**, ваши контакты - серверы, которые вы используете для отправки.</target>
@ -3708,6 +3888,10 @@ To connect, please ask your contact to create another connection link and check
<target>Вы вступите в группу, на которую ссылается эта ссылка, и соединитесь с её членами.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
<source>You will still receive calls and notifications from muted profiles when they are active.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve">
<source>You will stop receiving messages from this group. Chat history will be preserved.</source>
<target>Вы перестанете получать сообщения от этой группы. История чата будет сохранена.</target>
@ -3768,11 +3952,6 @@ To connect, please ask your contact to create another connection link and check
<target>Ваши профили чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Ваши профили чата хранятся локально, только на вашем устройстве.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Ваши чаты</target>
@ -4234,8 +4413,14 @@ SimpleX серверы не могут получить доступ к ваше
</trans-unit>
<trans-unit id="moderated" xml:space="preserve">
<source>moderated</source>
<target>удалено</target>
<note>moderated chat item</note>
</trans-unit>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>удалено %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="never" xml:space="preserve">
<source>never</source>
<target>никогда</target>
@ -4256,6 +4441,11 @@ SimpleX серверы не могут получить доступ к ваше
<target>нет e2e шифрования</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
<source>observer</source>
<target>читатель</target>
<note>member role</note>
</trans-unit>
<trans-unit id="off" xml:space="preserve">
<source>off</source>
<target>нет</target>
@ -4412,6 +4602,11 @@ SimpleX серверы не могут получить доступ к ваше
<target>вы приглашены в группу</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
<source>you are observer</source>
<target>только чтение сообщений</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>вы поменяли адрес</target>
@ -4466,7 +4661,7 @@ SimpleX серверы не могут получить доступ к ваше
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="ru" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleName" xml:space="preserve">
@ -4498,7 +4693,7 @@ SimpleX серверы не могут получить доступ к ваше
</file>
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="ru" datatype="plaintext">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.0" build-num="14A309"/>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="CFBundleDisplayName" xml:space="preserve">

View File

@ -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"
}

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