Compare commits
81 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 498ffe8a71 | |||
| 3dd5b5d835 | |||
| 9127b1bbc6 | |||
| 1657bcf97d | |||
| 428db2f8f4 | |||
| 4cc59d9fbd | |||
| c50306709b | |||
| 37d0bc2f14 | |||
| 2fda0454e3 | |||
| be19af62d9 | |||
| f915eb2a20 | |||
| 2bc1236a2c | |||
| 01acbb970a | |||
| 36cad35d46 | |||
| 41c9c84139 | |||
| 9e9ca521b0 | |||
| 1927862871 | |||
| c80eaf8550 | |||
| 9e6a35bac3 | |||
| 62ffcf94a6 | |||
| 2b77920dcd | |||
| 38b7e4d4a4 | |||
| 3e4d4f04ef | |||
| f6f3d17383 | |||
| d5f6b76ec5 | |||
| ae75be56ea | |||
| 50b90c4814 | |||
| 6eddb5f30f | |||
| cee8f3a4b6 | |||
| a2e5733be6 | |||
| 5075657c02 | |||
| 0450b1ace2 | |||
| 0ebf1da05d | |||
| 07ad3edbc2 | |||
| b40ed2a7f3 | |||
| 29b074607c | |||
| 258a157e44 | |||
| 92d9a1f9f2 | |||
| e5009a58df | |||
| 35a1ce4903 | |||
| 7c4c627ee9 | |||
| b7575ec01d | |||
| a0351d6f99 | |||
| 6f68840b3a | |||
| 2eef858db1 | |||
| 434315fb08 | |||
| 9b495e576c | |||
| 5405f44f54 | |||
| 53b05974c9 | |||
| 3530022152 | |||
| dc6bab7ae6 | |||
| c9b4ce457e | |||
| bd3325a889 | |||
| 9e347484eb | |||
| 894af0602d | |||
| aa6011a196 | |||
| f24035a99d | |||
| c006b8150f | |||
| 9e4499de6d | |||
| a018e4a581 | |||
| d29fd93ea7 | |||
| b30c7af3a3 | |||
| 2798671d22 | |||
| 0339b399f7 | |||
| d048962959 | |||
| 4af91c4cae | |||
| 8a445ece90 | |||
| 5082f5b4a4 | |||
| c8fae0ec43 | |||
| d9a8d333f7 | |||
| 73f8c543e3 | |||
| 14945a9296 | |||
| 155ffd16ec | |||
| 1eb1e52912 | |||
| af173ee5c4 | |||
| 06a2f7e4da | |||
| 958299784d | |||
| 49b6979ff0 | |||
| 3c493db613 | |||
| 86cc85b3a5 | |||
| 0427d2e578 |
@@ -91,6 +91,10 @@ jobs:
|
||||
echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local
|
||||
echo " flags: +openssl" >> cabal.project.local
|
||||
|
||||
- name: Install pkg-config for Mac
|
||||
if: matrix.os == 'macos-latest'
|
||||
run: brew install pkg-config
|
||||
|
||||
- name: Unix prepare cabal.project.local for Ubuntu
|
||||
if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-18.04'
|
||||
shell: bash
|
||||
|
||||
@@ -45,10 +45,12 @@ tests/tmp
|
||||
tests/tmp*
|
||||
logs/
|
||||
|
||||
|
||||
*.devcontainer
|
||||
# for website
|
||||
website/node_modules/
|
||||
website/src/blog/
|
||||
website/translations.json
|
||||
website/src/_data/supported_languages.json
|
||||
website/src/img/images/
|
||||
website/src/images/
|
||||
# Generated files
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/README.md) |
|
||||
|
||||
<img src="images/simplex-chat-logo.svg" alt="SimpleX logo" width="100%">
|
||||
|
||||
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
|
||||
@@ -22,7 +24,7 @@
|
||||
- 🔐 Double ratchet end-to-end encryption, with additional encryption layer.
|
||||
- 📱 Mobile apps for Android ([Google Play](https://play.google.com/store/apps/details?id=chat.simplex.app), [APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk)) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084).
|
||||
- 🚀 [TestFlight preview for iOS](https://testflight.apple.com/join/DWuT2LQu) with the new features 1-2 weeks earlier - **limited to 10,000 users**!
|
||||
- 🖥 Available as a terminal (console) app / CLI on Linux, MacOS, Windows.
|
||||
- 🖥 Available as a terminal (console) [app / CLI](#zap-quick-installation-of-a-terminal-app) on Linux, MacOS, Windows.
|
||||
|
||||
**NEW**: Security audit by [Trail of Bits](https://www.trailofbits.com/about), the [new website](https://simplex.chat) and v4.2 released! [See the announcement](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md)
|
||||
|
||||
@@ -76,16 +78,18 @@ You can use SimpleX with your own servers and still communicate with people usin
|
||||
|
||||
## Frequently asked questions
|
||||
|
||||
1. _How SimpleX can deliver messages without any user identifiers?_ See [v2 release annoucement](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) explaining how SimpleX works.
|
||||
1. _How SimpleX can deliver messages without any user identifiers?_ See [v2 release announcement](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) explaining how SimpleX works.
|
||||
|
||||
2. _Why should I not just use Signal?_ Signal is a centralised platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.
|
||||
2. _Why should I not just use Signal?_ Signal is a centralized platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.
|
||||
|
||||
3. _How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identites?_ Although these platforms do not require a _real identity_, they do rely on anonymous user identities to deliver messages – it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.
|
||||
3. _How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identities?_ Although these platforms do not require a _real identity_, they do rely on anonymous user identities to deliver messages – it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.
|
||||
|
||||
## News and updates
|
||||
|
||||
Recent updates:
|
||||
|
||||
[Feb 04, 2023. v4.5 released - with multiple user profiles, message draft, transport isolation and Italian interface](./blog/20230204-simplex-chat-v4-5-user-chat-profiles.md).
|
||||
|
||||
[Jan 03, 2023. v4.4 released - with disappearing messages, "live" messages, connection security verifications, GIFs and stickers and with French interface language](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md).
|
||||
|
||||
[Dec 06, 2022. November reviews and v4.3 released - with instant voice messages, irreversible deletion of sent messages and improved server configuration](./blog/20221206-simplex-chat-v4.3-voice-messages.md).
|
||||
@@ -94,8 +98,6 @@ Recent updates:
|
||||
|
||||
[Sep 28, 2022. v4.0: encrypted local chat database and many other changes](./blog/20220928-simplex-chat-v4-encrypted-database.md).
|
||||
|
||||
[Sep 1, 2022. v3.2: incognito mode, support .onion server hostnames, setting contact names, changing color scheme, etc. Implementation audit is arranged for October!](./blog/20220901-simplex-chat-v3.2-incognito-mode.md).
|
||||
|
||||
[All updates](./blog)
|
||||
|
||||
## Make a private connection
|
||||
@@ -138,7 +140,7 @@ SimpleX Chat is a work in progress – we are releasing improvements as they are
|
||||
|
||||
What is already implemented:
|
||||
|
||||
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notificaitons on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
|
||||
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notifications on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
|
||||
2. End-to-end encryption in each message queue using [NaCl cryptobox](https://nacl.cr.yp.to/box.html). This is added to allow redundancy in the future (passing each message via several servers), to avoid having the same ciphertext in different queues (that would only be visible to the attacker if TLS is compromised). The encryption keys used for this encryption are not rotated, instead we are planning to rotate the queues. Curve25519 keys are used for key negotiation.
|
||||
3. [Double ratchet](https://signal.org/docs/specifications/doubleratchet/) end-to-end encryption in each conversation between two users (or group members). This is the same algorithm that is used in Signal and many other messaging apps; it provides OTR messaging with forward secrecy (each message is encrypted by its own ephemeral key), break-in recovery (the keys are frequently re-negotiated as part of the message exchange). Two pairs of Curve448 keys are used for the initial key agreement, initiating party passes these keys via the connection link, accepting side - in the header of the confirmation message.
|
||||
4. Additional layer of encryption using NaCL cryptobox for the messages delivered from the server to the recipient. This layer avoids having any ciphertext in common between sent and received traffic of the server inside TLS (and there are no identifiers in common as well).
|
||||
@@ -148,10 +150,11 @@ What is already implemented:
|
||||
8. To protect against replay attacks SimpleX servers require [tlsunique channel binding](https://www.rfc-editor.org/rfc/rfc5929.html) as session ID in each client command signed with per-queue ephemeral key.
|
||||
9. To protect your IP address all SimpleX Chat clients support accessing messaging servers via Tor - see [v3.1 release announcement](./blog/20220808-simplex-chat-v3.1-chat-groups.md) for more details.
|
||||
10. Local database encryption with passphrase - your contacts, groups and all sent and received messages are stored encrypted. If you used SimpleX Chat before v4.0 you need to enable the encryption via the app settings.
|
||||
11. Transport isolation - different TCP connections and Tor circuits are used for traffic of different user profiles, optionally - for different contacts and group member connections.
|
||||
|
||||
We plan to add soon:
|
||||
|
||||
1. Message queue rotation. Currently the queues created between two users are used until the contact is deleted, providing a long-term pairwise identifiers of the conversation. We are planning to add queue rotation to make these identifiers temporary and rotate based on some schedule TBC (e.g., every X messages, or every X hours/days).
|
||||
1. Automatic message queue rotation. Currently the queues created between two users are used until the queue is manually changed by the user or contact is deleted. We are planning to add automatic queue rotation to make these identifiers temporary and rotate based on some schedule TBC (e.g., every X messages, or every X hours/days).
|
||||
2. Local files encryption. Currently the images and files you send and receive are stored in the app unencrypted, you can delete them via `Settings / Database passphrase & export`.
|
||||
3. Message "mixing" - adding latency to message delivery, to protect against traffic correlation by message time.
|
||||
|
||||
@@ -161,7 +164,7 @@ You can:
|
||||
|
||||
- use SimpleX Chat library to integrate chat functionality into your mobile apps.
|
||||
- create chat bots and services in Haskell - see [simple](./apps/simplex-bot/) and more [advanced chat bot example](./apps/simplex-bot-advanced/).
|
||||
- create chat bots and services in any language running SimpleX Chat terminal CLI as a local WebSocket server. See [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) and [JavaScipt chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js).
|
||||
- create chat bots and services in any language running SimpleX Chat terminal CLI as a local WebSocket server. See [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) and [JavaScript chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js).
|
||||
- run [simplex-chat terminal CLI](./docs/CLI.md) to execute individual chat commands, e.g. to send messages as part of shell script execution.
|
||||
|
||||
If you are considering developing with SimpleX platform please get in touch for any advice and support.
|
||||
@@ -196,16 +199,19 @@ If you are considering developing with SimpleX platform please get in touch for
|
||||
- ✅ Disappearing messages (with recipient opt-in per-contact).
|
||||
- ✅ "Live" messages.
|
||||
- ✅ Contact verification via a separate out-of-band channel.
|
||||
- 🏗 Multiple user profiles in the same chat database.
|
||||
- 🏗 Optionally avoid re-using the same TCP session for multiple connections.
|
||||
- ✅ Multiple user profiles in the same chat database.
|
||||
- ✅ Optionally avoid re-using the same TCP session for multiple connections.
|
||||
- ✅ Preserve message drafts.
|
||||
- 🏗 File server to optimize for efficient and private sending of large files.
|
||||
- 🏗 Improved audio & video calls.
|
||||
- 🏗 SMP queue redundancy and rotation (manual is supported).
|
||||
- 🏗 Reduced battery and traffic usage in large groups.
|
||||
- 🏗 Preserve message drafts.
|
||||
- 🏗 Support older Android OS and 32-bit CPUs.
|
||||
- Ephemeral/disappearing/OTR conversations with the existing contacts.
|
||||
- Access password/pin (with optional alternative access password).
|
||||
- Local app files encryption.
|
||||
- Video messages.
|
||||
- Improved navigation and search in the conversation (expand and scroll to quoted message, scroll to search results, etc.).
|
||||
- Message delivery confirmation (with sender opt-in or opt-out per contact, TBC).
|
||||
- Feeds/broadcasts.
|
||||
- Web widgets for custom interactivity in the chats.
|
||||
@@ -215,15 +221,13 @@ If you are considering developing with SimpleX platform please get in touch for
|
||||
- Privacy-preserving identity server for optional DNS-based contact/group addresses to simplify connection and discovery, but not used to deliver messages:
|
||||
- keep all your contacts and groups even if you lose the domain.
|
||||
- the server doesn't have information about your contacts and groups.
|
||||
- Channels server for large groups and broadcast channels.
|
||||
- Hosting server for large groups, communities and public channels.
|
||||
- Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic).
|
||||
- High capacity multi-node SMP relays.
|
||||
|
||||
## Join a user group
|
||||
|
||||
You can join a general English-speaking group: [#SimpleX-Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FcIS0gu1h0Y8pZpQkDaSz7HZGSHcKpMB9%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAKzzWAJYrVt1zdgRp4pD3FBst6eK7233DJeNElENLJRA%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%228mazMhefXoM5HxWBfZnvwQ%3D%3D%22%7D). Just bear in mind that it has ~300 members now, and that it is fully decentralized, so sending a message and connecting to all members in this group will take some time, only join it if you:
|
||||
- want to see how larger groups work.
|
||||
- traffic is not a concern (sending each message is ~5mb).
|
||||
|
||||
You can also join a new and smaller English-speaking group if you want to ask questions without too much traffic: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
|
||||
You can join an English-speaking group if you want to ask any questions: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
|
||||
|
||||
There are also several groups in languages other than English, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users. We do not always answer questions there, so please ask them in one of the English-speaking groups.
|
||||
|
||||
@@ -242,13 +246,13 @@ Thanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat
|
||||
|
||||
Current interface languages:
|
||||
|
||||
English (development language)
|
||||
German: [@mlanp](https://github.com/mlanp)
|
||||
French: link to be added
|
||||
Italian: [@unbranched](https://github.com/unbranched)
|
||||
Russian: project team
|
||||
- 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, Japanese, Dutch and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed – please suggest new languages and get in touch with us!
|
||||
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
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ android {
|
||||
applicationId "chat.simplex.app"
|
||||
minSdk 29
|
||||
targetSdk 32
|
||||
versionCode 98
|
||||
versionName "4.5"
|
||||
versionCode 103
|
||||
versionName "4.5.4"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
ndk {
|
||||
@@ -76,6 +76,11 @@ android {
|
||||
}
|
||||
jniLibs.useLegacyPackaging = compression_level != "0"
|
||||
}
|
||||
def isRelease = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("release") }) != null
|
||||
if (isRelease) {
|
||||
// Comma separated list of languages that will be included in the apk
|
||||
android.defaultConfig.resConfigs("en", "ru", "de", "fr", "it", "nl", "cs")
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -26,7 +26,8 @@ let answerTimeout = 30000;
|
||||
const processCommand = (function () {
|
||||
const defaultIceServers = [
|
||||
{ urls: ["stun:stun.simplex.im:443"] },
|
||||
{ urls: ["turn:turn.simplex.im:443"], username: "private", credential: "yleob6AVkiNI87hpR94Z" },
|
||||
{ urls: ["turn:turn.simplex.im:443?transport=udp"], username: "private", credential: "yleob6AVkiNI87hpR94Z" },
|
||||
{ urls: ["turn:turn.simplex.im:443?transport=tcp"], username: "private", credential: "yleob6AVkiNI87hpR94Z" },
|
||||
];
|
||||
function getCallConfig(encodedInsertableStreams, iceServers, relay) {
|
||||
return {
|
||||
|
||||
@@ -101,8 +101,19 @@ class SimplexApp: Application(), LifecycleEventObserver {
|
||||
isAppOnForeground = true
|
||||
if (chatModel.chatRunning.value == true) {
|
||||
kotlin.runCatching {
|
||||
val chats = chatController.apiGetChats()
|
||||
chatModel.updateChats(chats)
|
||||
val currentUserId = chatModel.currentUser.value?.userId
|
||||
val chats = ArrayList(chatController.apiGetChats())
|
||||
/** Active user can be changed in background while [ChatController.apiGetChats] is executing */
|
||||
if (chatModel.currentUser.value?.userId == currentUserId) {
|
||||
val currentChatId = chatModel.chatId.value
|
||||
val oldStats = if (currentChatId != null) chatModel.getChat(currentChatId)?.chatStats else null
|
||||
if (oldStats != null) {
|
||||
val indexOfCurrentChat = chats.indexOfFirst { it.id == currentChatId }
|
||||
/** Pass old chatStats because unreadCounter can be changed already while [ChatController.apiGetChats] is executing */
|
||||
if (indexOfCurrentChat >= 0) chats[indexOfCurrentChat] = chats[indexOfCurrentChat].copy(chatStats = oldStats)
|
||||
}
|
||||
chatModel.updateChats(chats)
|
||||
}
|
||||
}.onFailure { Log.e(TAG, it.stackTraceToString()) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -486,6 +486,24 @@ data class Chat (
|
||||
val chatItems: List<ChatItem>,
|
||||
val chatStats: ChatStats = ChatStats(),
|
||||
) {
|
||||
val userCanSend: Boolean
|
||||
get() = when (chatInfo) {
|
||||
is ChatInfo.Direct -> true
|
||||
is ChatInfo.Group -> {
|
||||
val m = chatInfo.groupInfo.membership
|
||||
m.memberActive && m.memberRole >= GroupMemberRole.Member
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
val userIsObserver: Boolean get() = when(chatInfo) {
|
||||
is ChatInfo.Group -> {
|
||||
val m = chatInfo.groupInfo.membership
|
||||
m.memberActive && m.memberRole == GroupMemberRole.Observer
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
val id: String get() = chatInfo.id
|
||||
|
||||
@Serializable
|
||||
@@ -932,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 }
|
||||
GroupMemberRole.values().filter { it <= userRole && it != GroupMemberRole.Observer }
|
||||
}
|
||||
|
||||
val memberIncognito = memberProfile.profileId != memberContactProfileId
|
||||
@@ -963,11 +981,13 @@ class GroupMemberRef(
|
||||
|
||||
@Serializable
|
||||
enum class GroupMemberRole(val memberRole: String) {
|
||||
@SerialName("member") Member("member"), // order matters in comparisons
|
||||
@SerialName("observer") Observer("observer"), // order matters in comparisons
|
||||
@SerialName("member") Member("member"),
|
||||
@SerialName("admin") Admin("admin"),
|
||||
@SerialName("owner") Owner("owner");
|
||||
|
||||
val text: String get() = when (this) {
|
||||
Observer -> generalGetString(R.string.group_member_role_observer)
|
||||
Member -> generalGetString(R.string.group_member_role_member)
|
||||
Admin -> generalGetString(R.string.group_member_role_admin)
|
||||
Owner -> generalGetString(R.string.group_member_role_owner)
|
||||
@@ -1257,6 +1277,8 @@ data class ChatItem (
|
||||
is CIContent.SndGroupFeature -> showNtfDir
|
||||
is CIContent.RcvChatFeatureRejected -> showNtfDir
|
||||
is CIContent.RcvGroupFeatureRejected -> showNtfDir
|
||||
is CIContent.SndModerated -> true
|
||||
is CIContent.RcvModerated -> true
|
||||
is CIContent.InvalidJSON -> false
|
||||
}
|
||||
|
||||
@@ -1271,14 +1293,14 @@ data class ChatItem (
|
||||
status: CIStatus = CIStatus.SndNew(),
|
||||
quotedItem: CIQuote? = null,
|
||||
file: CIFile? = null,
|
||||
itemDeleted: Boolean = false,
|
||||
itemDeleted: CIDeleted? = null,
|
||||
itemEdited: Boolean = false,
|
||||
itemTimed: CITimed? = null,
|
||||
editable: Boolean = true
|
||||
) =
|
||||
ChatItem(
|
||||
chatDir = dir,
|
||||
meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, null, editable),
|
||||
meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, itemTimed, editable),
|
||||
content = CIContent.SndMsgContent(msgContent = MsgContent.MCText(text)),
|
||||
quotedItem = quotedItem,
|
||||
file = file
|
||||
@@ -1293,7 +1315,7 @@ data class ChatItem (
|
||||
) =
|
||||
ChatItem(
|
||||
chatDir = CIDirection.DirectRcv(),
|
||||
meta = CIMeta.getSample(id, Clock.System.now(), text, CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
|
||||
meta = CIMeta.getSample(id, Clock.System.now(), text, CIStatus.RcvRead()),
|
||||
content = CIContent.RcvMsgContent(msgContent = MsgContent.MCFile(text)),
|
||||
quotedItem = null,
|
||||
file = CIFile.getSample(fileName = fileName, fileSize = fileSize, fileStatus = fileStatus)
|
||||
@@ -1308,7 +1330,7 @@ data class ChatItem (
|
||||
) =
|
||||
ChatItem(
|
||||
chatDir = dir,
|
||||
meta = CIMeta.getSample(id, ts, text, status, itemDeleted = false, itemEdited = false, editable = false),
|
||||
meta = CIMeta.getSample(id, ts, text, status),
|
||||
content = CIContent.RcvDeleted(deleteMode = CIDeleteMode.cidmBroadcast),
|
||||
quotedItem = null,
|
||||
file = null
|
||||
@@ -1317,7 +1339,7 @@ data class ChatItem (
|
||||
fun getGroupInvitationSample(status: CIGroupInvitationStatus = CIGroupInvitationStatus.Pending) =
|
||||
ChatItem(
|
||||
chatDir = CIDirection.DirectRcv(),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "received invitation to join group team as admin", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "received invitation to join group team as admin", CIStatus.RcvRead()),
|
||||
content = CIContent.RcvGroupInvitation(groupInvitation = CIGroupInvitation.getSample(status = status), memberRole = GroupMemberRole.Admin),
|
||||
quotedItem = null,
|
||||
file = null
|
||||
@@ -1326,7 +1348,7 @@ data class ChatItem (
|
||||
fun getGroupEventSample() =
|
||||
ChatItem(
|
||||
chatDir = CIDirection.DirectRcv(),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "group event text", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "group event text", CIStatus.RcvRead()),
|
||||
content = CIContent.RcvGroupEventContent(rcvGroupEvent = RcvGroupEvent.MemberAdded(groupMemberId = 1, profile = Profile.sampleData)),
|
||||
quotedItem = null,
|
||||
file = null
|
||||
@@ -1336,7 +1358,7 @@ data class ChatItem (
|
||||
val content = CIContent.RcvChatFeature(feature = feature, enabled = enabled, param = null)
|
||||
return ChatItem(
|
||||
chatDir = CIDirection.DirectRcv(),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), content.text, CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), content.text, CIStatus.RcvRead()),
|
||||
content = content,
|
||||
quotedItem = null,
|
||||
file = null
|
||||
@@ -1356,7 +1378,7 @@ data class ChatItem (
|
||||
itemStatus = CIStatus.RcvRead(),
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now(),
|
||||
itemDeleted = false,
|
||||
itemDeleted = null,
|
||||
itemEdited = false,
|
||||
itemTimed = null,
|
||||
itemLive = false,
|
||||
@@ -1376,7 +1398,7 @@ data class ChatItem (
|
||||
itemStatus = CIStatus.RcvRead(),
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now(),
|
||||
itemDeleted = false,
|
||||
itemDeleted = null,
|
||||
itemEdited = false,
|
||||
itemTimed = null,
|
||||
itemLive = true,
|
||||
@@ -1421,7 +1443,7 @@ data class CIMeta (
|
||||
val itemStatus: CIStatus,
|
||||
val createdAt: Instant,
|
||||
val updatedAt: Instant,
|
||||
val itemDeleted: Boolean,
|
||||
val itemDeleted: CIDeleted?,
|
||||
val itemEdited: Boolean,
|
||||
val itemTimed: CITimed?,
|
||||
val itemLive: Boolean?,
|
||||
@@ -1446,7 +1468,7 @@ data class CIMeta (
|
||||
companion object {
|
||||
fun getSample(
|
||||
id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(),
|
||||
itemDeleted: Boolean = false, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true
|
||||
itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true
|
||||
): CIMeta =
|
||||
CIMeta(
|
||||
itemId = id,
|
||||
@@ -1471,7 +1493,7 @@ data class CIMeta (
|
||||
itemStatus = CIStatus.SndNew(),
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now(),
|
||||
itemDeleted = false,
|
||||
itemDeleted = null,
|
||||
itemEdited = false,
|
||||
itemTimed = null,
|
||||
itemLive = false,
|
||||
@@ -1506,6 +1528,12 @@ sealed class CIStatus {
|
||||
@Serializable @SerialName("rcvRead") class RcvRead: CIStatus()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
sealed class CIDeleted {
|
||||
@Serializable @SerialName("deleted") class Deleted: CIDeleted()
|
||||
@Serializable @SerialName("moderated") class Moderated(val byGroupMember: GroupMember): CIDeleted()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class CIDeleteMode(val deleteMode: String) {
|
||||
@SerialName("internal") cidmInternal("internal"),
|
||||
@@ -1541,6 +1569,8 @@ sealed class CIContent: ItemContent {
|
||||
@Serializable @SerialName("sndGroupFeature") class SndGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null }
|
||||
@Serializable @SerialName("rcvChatFeatureRejected") class RcvChatFeatureRejected(val feature: ChatFeature): CIContent() { override val msgContent: MsgContent? get() = null }
|
||||
@Serializable @SerialName("rcvGroupFeatureRejected") class RcvGroupFeatureRejected(val groupFeature: GroupFeature): CIContent() { override val msgContent: MsgContent? get() = null }
|
||||
@Serializable @SerialName("sndModerated") object SndModerated: CIContent() { override val msgContent: MsgContent? get() = null }
|
||||
@Serializable @SerialName("rcvModerated") object RcvModerated: CIContent() { override val msgContent: MsgContent? get() = null }
|
||||
@Serializable @SerialName("invalidJSON") data class InvalidJSON(val json: String): CIContent() { override val msgContent: MsgContent? get() = null }
|
||||
|
||||
override val text: String get() = when (this) {
|
||||
@@ -1565,6 +1595,8 @@ sealed class CIContent: ItemContent {
|
||||
is SndGroupFeature -> featureText(groupFeature, preference.enable.text, param)
|
||||
is RcvChatFeatureRejected -> "${feature.text}: ${generalGetString(R.string.feature_received_prohibited)}"
|
||||
is RcvGroupFeatureRejected -> "${groupFeature.text}: ${generalGetString(R.string.feature_received_prohibited)}"
|
||||
is SndModerated -> generalGetString(R.string.moderated_description)
|
||||
is RcvModerated -> generalGetString(R.string.moderated_description)
|
||||
is InvalidJSON -> "invalid data"
|
||||
}
|
||||
|
||||
|
||||
@@ -44,11 +44,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
|
||||
private val msgNtfTimeoutMs = 30000L
|
||||
|
||||
init {
|
||||
manager.createNotificationChannel(NotificationChannel(MessageChannel, generalGetString(R.string.ntf_channel_messages), NotificationManager.IMPORTANCE_HIGH))
|
||||
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(R.string.ntf_channel_calls)))
|
||||
// Remove old channels since they can't be edited
|
||||
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
|
||||
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
|
||||
if (manager.areNotificationsEnabled()) createNtfChannelsMaybeShowAlert()
|
||||
}
|
||||
|
||||
enum class NotificationAction {
|
||||
@@ -156,7 +152,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
|
||||
.setGroup(MessageGroup)
|
||||
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN)
|
||||
.setGroupSummary(true)
|
||||
.setContentIntent(chatPendingIntent(ShowChatsAction, user.userId))
|
||||
.setContentIntent(chatPendingIntent(ShowChatsAction, null))
|
||||
.build()
|
||||
|
||||
with(NotificationManagerCompat.from(context)) {
|
||||
@@ -250,7 +246,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
|
||||
}
|
||||
}
|
||||
|
||||
private fun chatPendingIntent(intentAction: String, userId: Long, chatId: String? = null, broadcast: Boolean = false): PendingIntent {
|
||||
private fun chatPendingIntent(intentAction: String, userId: Long?, chatId: String? = null, broadcast: Boolean = false): PendingIntent {
|
||||
Log.d(TAG, "chatPendingIntent for $intentAction")
|
||||
val uniqueInt = (System.currentTimeMillis() and 0xfffffff).toInt()
|
||||
var intent = Intent(context, if (!broadcast) MainActivity::class.java else NtfActionReceiver::class.java)
|
||||
@@ -268,6 +264,21 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function creates notifications channels. On Android 13+ calling it for the first time will trigger system alert,
|
||||
* The alert asks a user to allow or disallow to show notifications for the app. That's why it should be called only when the user
|
||||
* already saw such alert or when you want to trigger showing the alert.
|
||||
* On the first app launch the channels will be created after user profile is created. Subsequent calls will create new channels and delete
|
||||
* old ones if needed
|
||||
* */
|
||||
fun createNtfChannelsMaybeShowAlert() {
|
||||
manager.createNotificationChannel(NotificationChannel(MessageChannel, generalGetString(R.string.ntf_channel_messages), NotificationManager.IMPORTANCE_HIGH))
|
||||
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(R.string.ntf_channel_calls)))
|
||||
// Remove old channels since they can't be edited
|
||||
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
|
||||
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes every action specified by [NotificationCompat.Builder.addAction] that comes with [NotificationAction]
|
||||
* and [ChatInfo.id] as [ChatIdKey] in extra
|
||||
|
||||
@@ -88,7 +88,6 @@ class AppPreferences(val context: Context) {
|
||||
val webrtcIceServers = mkStrPreference(SHARED_PREFS_WEBRTC_ICE_SERVERS, null)
|
||||
val privacyProtectScreen = mkBoolPreference(SHARED_PREFS_PRIVACY_PROTECT_SCREEN, true)
|
||||
val privacyAcceptImages = mkBoolPreference(SHARED_PREFS_PRIVACY_ACCEPT_IMAGES, true)
|
||||
val privacyTransferImagesInline = mkBoolPreference(SHARED_PREFS_PRIVACY_TRANSFER_IMAGES_INLINE, true)
|
||||
val privacyLinkPreviews = mkBoolPreference(SHARED_PREFS_PRIVACY_LINK_PREVIEWS, true)
|
||||
private val _simplexLinkMode = mkStrPreference(SHARED_PREFS_PRIVACY_SIMPLEX_LINK_MODE, SimplexLinkMode.default.name)
|
||||
val simplexLinkMode: SharedPreference<SimplexLinkMode> = SharedPreference(
|
||||
@@ -550,7 +549,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
|
||||
suspend fun testSMPServer(smpServer: String): SMPTestFailure? {
|
||||
val userId = chatModel.currentUser.value?.userId ?: run { throw Exception("testSMPServer: no current user") }
|
||||
val r = sendCmd(CC.TestSMPServer(userId, smpServer))
|
||||
val r = sendCmd(CC.APITestSMPServer(userId, smpServer))
|
||||
return when (r) {
|
||||
is CR.SmpTestResult -> r.smpTestFailure
|
||||
else -> {
|
||||
@@ -935,7 +934,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
return false
|
||||
}
|
||||
|
||||
suspend fun apiReceiveFile(fileId: Long, inline: Boolean): AChatItem? {
|
||||
suspend fun apiReceiveFile(fileId: Long, inline: Boolean? = null): AChatItem? {
|
||||
val r = sendCmd(CC.ReceiveFile(fileId, inline))
|
||||
return when (r) {
|
||||
is CR.RcvFileAccepted -> r.chatItem
|
||||
@@ -1061,9 +1060,9 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun apiCreateGroupLink(groupId: Long): String? {
|
||||
return when (val r = sendCmd(CC.APICreateGroupLink(groupId))) {
|
||||
is CR.GroupLinkCreated -> r.connReqContact
|
||||
suspend fun apiCreateGroupLink(groupId: Long, memberRole: GroupMemberRole = GroupMemberRole.Member): Pair<String, GroupMemberRole>? {
|
||||
return when (val r = sendCmd(CC.APICreateGroupLink(groupId, memberRole))) {
|
||||
is CR.GroupLinkCreated -> r.connReqContact to r.memberRole
|
||||
else -> {
|
||||
if (!(networkErrorAlert(r))) {
|
||||
apiErrorAlert("apiCreateGroupLink", generalGetString(R.string.error_creating_link_for_group), r)
|
||||
@@ -1073,6 +1072,18 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun apiGroupLinkMemberRole(groupId: Long, memberRole: GroupMemberRole = GroupMemberRole.Member): Pair<String, GroupMemberRole>? {
|
||||
return when (val r = sendCmd(CC.APIGroupLinkMemberRole(groupId, memberRole))) {
|
||||
is CR.GroupLink -> r.connReqContact to r.memberRole
|
||||
else -> {
|
||||
if (!(networkErrorAlert(r))) {
|
||||
apiErrorAlert("apiGroupLinkMemberRole", generalGetString(R.string.error_updating_link_for_group), r)
|
||||
}
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun apiDeleteGroupLink(groupId: Long): Boolean {
|
||||
return when (val r = sendCmd(CC.APIDeleteGroupLink(groupId))) {
|
||||
is CR.GroupLinkDeleted -> true
|
||||
@@ -1085,9 +1096,9 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun apiGetGroupLink(groupId: Long): String? {
|
||||
suspend fun apiGetGroupLink(groupId: Long): Pair<String, GroupMemberRole>? {
|
||||
return when (val r = sendCmd(CC.APIGetGroupLink(groupId))) {
|
||||
is CR.GroupLink -> r.connReqContact
|
||||
is CR.GroupLink -> r.connReqContact to r.memberRole
|
||||
else -> {
|
||||
Log.e(TAG, "apiGetGroupLink bad response: ${r.responseType} ${r.details}")
|
||||
null
|
||||
@@ -1344,6 +1355,10 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
if (active(r.user)) {
|
||||
chatModel.updateGroup(r.toGroup)
|
||||
}
|
||||
is CR.MemberRole ->
|
||||
if (active(r.user)) {
|
||||
chatModel.updateGroup(r.groupInfo)
|
||||
}
|
||||
is CR.RcvFileStart ->
|
||||
chatItemSimpleUpdate(r.user, r.chatItem)
|
||||
is CR.RcvFileComplete ->
|
||||
@@ -1424,8 +1439,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
}
|
||||
|
||||
suspend fun receiveFile(user: User, fileId: Long) {
|
||||
val inline = appPrefs.privacyTransferImagesInline.get()
|
||||
val chatItem = apiReceiveFile(fileId, inline)
|
||||
val chatItem = apiReceiveFile(fileId)
|
||||
if (chatItem != null) {
|
||||
chatItemSimpleUpdate(user, chatItem)
|
||||
}
|
||||
@@ -1754,12 +1768,13 @@ sealed class CC {
|
||||
class ApiLeaveGroup(val groupId: Long): CC()
|
||||
class ApiListMembers(val groupId: Long): CC()
|
||||
class ApiUpdateGroupProfile(val groupId: Long, val groupProfile: GroupProfile): CC()
|
||||
class APICreateGroupLink(val groupId: Long): CC()
|
||||
class APICreateGroupLink(val groupId: Long, val memberRole: GroupMemberRole): CC()
|
||||
class APIGroupLinkMemberRole(val groupId: Long, val memberRole: GroupMemberRole): CC()
|
||||
class APIDeleteGroupLink(val groupId: Long): CC()
|
||||
class APIGetGroupLink(val groupId: Long): CC()
|
||||
class APIGetUserSMPServers(val userId: Long): CC()
|
||||
class APISetUserSMPServers(val userId: Long, val smpServers: List<ServerCfg>): CC()
|
||||
class TestSMPServer(val userId: Long, val smpServer: String): CC()
|
||||
class APITestSMPServer(val userId: Long, val smpServer: String): CC()
|
||||
class APISetChatItemTTL(val userId: Long, val seconds: Long?): CC()
|
||||
class APIGetChatItemTTL(val userId: Long): CC()
|
||||
class APISetNetworkConfig(val networkConfig: NetCfg): CC()
|
||||
@@ -1798,7 +1813,7 @@ sealed class CC {
|
||||
class ApiRejectContact(val contactReqId: Long): CC()
|
||||
class ApiChatRead(val type: ChatType, val id: Long, val range: ItemRange): CC()
|
||||
class ApiChatUnread(val type: ChatType, val id: Long, val unreadChat: Boolean): CC()
|
||||
class ReceiveFile(val fileId: Long, val inline: Boolean): CC()
|
||||
class ReceiveFile(val fileId: Long, val inline: Boolean?): CC()
|
||||
class ShowVersion(): CC()
|
||||
|
||||
val cmdString: String get() = when (this) {
|
||||
@@ -1829,12 +1844,13 @@ sealed class CC {
|
||||
is ApiLeaveGroup -> "/_leave #$groupId"
|
||||
is ApiListMembers -> "/_members #$groupId"
|
||||
is ApiUpdateGroupProfile -> "/_group_profile #$groupId ${json.encodeToString(groupProfile)}"
|
||||
is APICreateGroupLink -> "/_create link #$groupId"
|
||||
is APICreateGroupLink -> "/_create link #$groupId ${memberRole.name.lowercase()}"
|
||||
is APIGroupLinkMemberRole -> "/_set link role #$groupId ${memberRole.name.lowercase()}"
|
||||
is APIDeleteGroupLink -> "/_delete link #$groupId"
|
||||
is APIGetGroupLink -> "/_get link #$groupId"
|
||||
is APIGetUserSMPServers -> "/_smp $userId"
|
||||
is APISetUserSMPServers -> "/_smp $userId ${smpServersStr(smpServers)}"
|
||||
is TestSMPServer -> "/smp test $userId $smpServer"
|
||||
is APITestSMPServer -> "/_smp test $userId $smpServer"
|
||||
is APISetChatItemTTL -> "/_ttl $userId ${chatItemTTLStr(seconds)}"
|
||||
is APIGetChatItemTTL -> "/_ttl $userId"
|
||||
is APISetNetworkConfig -> "/_network ${json.encodeToString(networkConfig)}"
|
||||
@@ -1873,7 +1889,7 @@ sealed class CC {
|
||||
is ApiCallStatus -> "/_call status @${contact.apiId} ${callStatus.value}"
|
||||
is ApiChatRead -> "/_read chat ${chatRef(type, id)} from=${range.from} to=${range.to}"
|
||||
is ApiChatUnread -> "/_unread chat ${chatRef(type, id)} ${onOff(unreadChat)}"
|
||||
is ReceiveFile -> "/freceive $fileId inline=${onOff(inline)}"
|
||||
is ReceiveFile -> if (inline == null) "/freceive $fileId" else "/freceive $fileId inline=${onOff(inline)}"
|
||||
is ShowVersion -> "/version"
|
||||
}
|
||||
|
||||
@@ -1906,11 +1922,12 @@ sealed class CC {
|
||||
is ApiListMembers -> "apiListMembers"
|
||||
is ApiUpdateGroupProfile -> "apiUpdateGroupProfile"
|
||||
is APICreateGroupLink -> "apiCreateGroupLink"
|
||||
is APIGroupLinkMemberRole -> "apiGroupLinkMemberRole"
|
||||
is APIDeleteGroupLink -> "apiDeleteGroupLink"
|
||||
is APIGetGroupLink -> "apiGetGroupLink"
|
||||
is APIGetUserSMPServers -> "apiGetUserSMPServers"
|
||||
is APISetUserSMPServers -> "apiSetUserSMPServers"
|
||||
is TestSMPServer -> "testSMPServer"
|
||||
is APITestSMPServer -> "testSMPServer"
|
||||
is APISetChatItemTTL -> "apiSetChatItemTTL"
|
||||
is APIGetChatItemTTL -> "apiGetChatItemTTL"
|
||||
is APISetNetworkConfig -> "/apiSetNetworkConfig"
|
||||
@@ -2927,8 +2944,8 @@ sealed class CR {
|
||||
@Serializable @SerialName("connectedToGroupMember") class ConnectedToGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||
@Serializable @SerialName("groupRemoved") class GroupRemoved(val user: User, val groupInfo: GroupInfo): CR() // unused
|
||||
@Serializable @SerialName("groupUpdated") class GroupUpdated(val user: User, val toGroup: GroupInfo): CR()
|
||||
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: User, val groupInfo: GroupInfo, val connReqContact: String): CR()
|
||||
@Serializable @SerialName("groupLink") class GroupLink(val user: User, val groupInfo: GroupInfo, val connReqContact: String): CR()
|
||||
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
||||
@Serializable @SerialName("groupLink") class GroupLink(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
||||
@Serializable @SerialName("groupLinkDeleted") class GroupLinkDeleted(val user: User, val groupInfo: GroupInfo): CR()
|
||||
// receiving file events
|
||||
@Serializable @SerialName("rcvFileAccepted") class RcvFileAccepted(val user: User, val chatItem: AChatItem): CR()
|
||||
@@ -3131,8 +3148,8 @@ sealed class CR {
|
||||
is ConnectedToGroupMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member")
|
||||
is GroupRemoved -> withUser(user, json.encodeToString(groupInfo))
|
||||
is GroupUpdated -> withUser(user, json.encodeToString(toGroup))
|
||||
is GroupLinkCreated -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact")
|
||||
is GroupLink -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact")
|
||||
is GroupLinkCreated -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact\nmemberRole: $memberRole")
|
||||
is GroupLink -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact\nmemberRole: $memberRole")
|
||||
is GroupLinkDeleted -> withUser(user, json.encodeToString(groupInfo))
|
||||
is RcvFileAcceptedSndCancelled -> withUser(user, noDetails())
|
||||
is RcvFileAccepted -> withUser(user, json.encodeToString(chatItem))
|
||||
|
||||
@@ -17,6 +17,7 @@ enum class DefaultTheme {
|
||||
val DEFAULT_PADDING = 16.dp
|
||||
val DEFAULT_SPACE_AFTER_ICON = 4.dp
|
||||
val DEFAULT_PADDING_HALF = DEFAULT_PADDING / 2
|
||||
val DEFAULT_BOTTOM_PADDING = 48.dp
|
||||
|
||||
val DarkColorPalette = darkColors(
|
||||
primary = SimplexBlue, // If this value changes also need to update #0088ff in string resource files
|
||||
|
||||
@@ -83,6 +83,8 @@ fun TerminalLayout(
|
||||
liveMessageAlertShown = SharedPreference(get = { false }, set = {}),
|
||||
needToAllowVoiceToContact = false,
|
||||
allowedVoiceByPrefs = false,
|
||||
userIsObserver = false,
|
||||
userCanSend = true,
|
||||
allowVoiceToContact = {},
|
||||
sendMessage = sendCommand,
|
||||
sendLiveMessage = null,
|
||||
|
||||
@@ -21,8 +21,8 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.input.KeyboardCapitalization
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import chat.simplex.app.*
|
||||
import chat.simplex.app.R
|
||||
import chat.simplex.app.SimplexService
|
||||
import chat.simplex.app.model.ChatModel
|
||||
import chat.simplex.app.model.Profile
|
||||
import chat.simplex.app.ui.theme.*
|
||||
@@ -116,6 +116,7 @@ fun createProfile(chatModel: ChatModel, displayName: String, fullName: String, c
|
||||
if (chatModel.users.isEmpty()) {
|
||||
chatModel.controller.startChat(user)
|
||||
chatModel.onboardingStage.value = OnboardingStage.Step3_SetNotificationsMode
|
||||
SimplexApp.context.chatModel.controller.ntfManager.createNtfChannelsMaybeShowAlert()
|
||||
} else {
|
||||
val users = chatModel.controller.listUsers()
|
||||
chatModel.users.clear()
|
||||
|
||||
@@ -37,6 +37,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.views.helpers.ProfileImage
|
||||
import chat.simplex.app.views.helpers.withApi
|
||||
@@ -240,7 +241,7 @@ private fun ActiveCallOverlayLayout(
|
||||
CallInfoView(call, alignment = Alignment.CenterHorizontally)
|
||||
}
|
||||
Spacer(Modifier.fillMaxHeight().weight(1f))
|
||||
Box(Modifier.fillMaxWidth().padding(bottom = 48.dp), contentAlignment = Alignment.CenterStart) {
|
||||
Box(Modifier.fillMaxWidth().padding(bottom = DEFAULT_BOTTOM_PADDING), contentAlignment = Alignment.CenterStart) {
|
||||
Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
|
||||
IconButton(onClick = dismiss) {
|
||||
Icon(Icons.Filled.CallEnd, stringResource(R.string.icon_descr_hang_up), tint = Color.Red, modifier = Modifier.size(64.dp))
|
||||
@@ -297,10 +298,10 @@ fun CallInfoView(call: Call, alignment: Alignment.Horizontal) {
|
||||
InfoText(call.contact.chatViewName, style = MaterialTheme.typography.h2)
|
||||
InfoText(call.callState.text)
|
||||
|
||||
val connInfo =
|
||||
if (call.connectionInfo == null) ""
|
||||
else " (${call.connectionInfo.text})"
|
||||
InfoText(call.encryptionStatus + connInfo)
|
||||
val connInfo = call.connectionInfo
|
||||
// val connInfoText = if (connInfo == null) "" else " (${connInfo.text}, ${connInfo.protocolText})"
|
||||
val connInfoText = if (connInfo == null) "" else " (${connInfo.text})"
|
||||
InfoText(call.encryptionStatus + connInfoText)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -480,7 +481,10 @@ fun PreviewActiveCallOverlayVideo() {
|
||||
callState = CallState.Negotiated,
|
||||
localMedia = CallMediaType.Video,
|
||||
peerMedia = CallMediaType.Video,
|
||||
connectionInfo = ConnectionInfo(RTCIceCandidate(RTCIceCandidateType.Host), RTCIceCandidate(RTCIceCandidateType.Host))
|
||||
connectionInfo = ConnectionInfo(
|
||||
RTCIceCandidate(RTCIceCandidateType.Host, "tcp", null),
|
||||
RTCIceCandidate(RTCIceCandidateType.Host, "tcp", null)
|
||||
)
|
||||
),
|
||||
dismiss = {},
|
||||
toggleAudio = {},
|
||||
@@ -501,7 +505,10 @@ fun PreviewActiveCallOverlayAudio() {
|
||||
callState = CallState.Negotiated,
|
||||
localMedia = CallMediaType.Audio,
|
||||
peerMedia = CallMediaType.Audio,
|
||||
connectionInfo = ConnectionInfo(RTCIceCandidate(RTCIceCandidateType.Host), RTCIceCandidate(RTCIceCandidateType.Host))
|
||||
connectionInfo = ConnectionInfo(
|
||||
RTCIceCandidate(RTCIceCandidateType.Host, "udp", null),
|
||||
RTCIceCandidate(RTCIceCandidateType.Host, "udp", null)
|
||||
)
|
||||
),
|
||||
dismiss = {},
|
||||
toggleAudio = {},
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package chat.simplex.app.views.call
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import chat.simplex.app.R
|
||||
import chat.simplex.app.SimplexApp
|
||||
import androidx.compose.ui.text.toUpperCase
|
||||
import chat.simplex.app.*
|
||||
import chat.simplex.app.model.Contact
|
||||
import chat.simplex.app.model.User
|
||||
import chat.simplex.app.views.helpers.generalGetString
|
||||
@@ -11,6 +12,8 @@ import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import java.net.URI
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
data class Call(
|
||||
val contact: Contact,
|
||||
@@ -106,17 +109,30 @@ sealed class WCallResponse {
|
||||
}
|
||||
@Serializable data class CallCapabilities(val encryption: Boolean)
|
||||
@Serializable data class ConnectionInfo(private val localCandidate: RTCIceCandidate?, private val remoteCandidate: RTCIceCandidate?) {
|
||||
val text: String @Composable get() = when {
|
||||
localCandidate?.candidateType == RTCIceCandidateType.Host && remoteCandidate?.candidateType == RTCIceCandidateType.Host ->
|
||||
stringResource(R.string.call_connection_peer_to_peer)
|
||||
localCandidate?.candidateType == RTCIceCandidateType.Relay && remoteCandidate?.candidateType == RTCIceCandidateType.Relay ->
|
||||
stringResource(R.string.call_connection_via_relay)
|
||||
else ->
|
||||
"${localCandidate?.candidateType?.value ?: "unknown"} / ${remoteCandidate?.candidateType?.value ?: "unknown"}"
|
||||
val text: String @Composable get() {
|
||||
val local = localCandidate?.candidateType
|
||||
val remote = remoteCandidate?.candidateType
|
||||
return when {
|
||||
local == RTCIceCandidateType.Host && remote == RTCIceCandidateType.Host ->
|
||||
stringResource(R.string.call_connection_peer_to_peer)
|
||||
local == RTCIceCandidateType.Relay && remote == RTCIceCandidateType.Relay ->
|
||||
stringResource(R.string.call_connection_via_relay)
|
||||
else ->
|
||||
"${local?.value ?: "unknown"} / ${remote?.value ?: "unknown"}"
|
||||
}
|
||||
}
|
||||
|
||||
val protocolText: String get() {
|
||||
val local = localCandidate?.protocol?.uppercase(Locale.ROOT) ?: "unknown"
|
||||
val localRelay = localCandidate?.relayProtocol?.uppercase(Locale.ROOT) ?: "unknown"
|
||||
val remote = remoteCandidate?.protocol?.uppercase(Locale.ROOT) ?: "unknown"
|
||||
val localText = if (localRelay == local || localCandidate?.relayProtocol == null) local else "$local ($localRelay)"
|
||||
return if (local == remote) localText else "$localText / $remote"
|
||||
}
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate
|
||||
@Serializable data class RTCIceCandidate(val candidateType: RTCIceCandidateType?)
|
||||
@Serializable data class RTCIceCandidate(val candidateType: RTCIceCandidateType?, val protocol: String?, val relayProtocol: String?)
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer
|
||||
@Serializable data class RTCIceServer(val urls: List<String>, val username: String? = null, val credential: String? = null)
|
||||
|
||||
@@ -159,20 +175,22 @@ data class ConnectionState(
|
||||
)
|
||||
|
||||
// the servers are expected in this format:
|
||||
// stun:stun.simplex.im:443
|
||||
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443
|
||||
// stun:stun.simplex.im:443?transport=tcp
|
||||
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp
|
||||
fun parseRTCIceServer(str: String): RTCIceServer? {
|
||||
var s = replaceScheme(str, "stun:")
|
||||
s = replaceScheme(s, "turn:")
|
||||
s = replaceScheme(s, "turns:")
|
||||
val u = runCatching { URI(s) }.getOrNull()
|
||||
if (u != null) {
|
||||
val scheme = u.scheme
|
||||
val host = u.host
|
||||
val port = u.port
|
||||
if (u.path == "" && (scheme == "stun" || scheme == "turn")) {
|
||||
if (u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns")) {
|
||||
val userInfo = u.userInfo?.split(":")
|
||||
val query = if (u.query == null || u.query == "") "" else "?${u.query}"
|
||||
return RTCIceServer(
|
||||
urls = listOf("$scheme:$host:$port"),
|
||||
urls = listOf("$scheme:$host:$port$query"),
|
||||
username = userInfo?.getOrNull(0),
|
||||
credential = userInfo?.getOrNull(1)
|
||||
)
|
||||
|
||||
@@ -152,9 +152,14 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: () -> Unit) {
|
||||
}
|
||||
} else if (chat.chatInfo is ChatInfo.Group) {
|
||||
setGroupMembers(chat.chatInfo.groupInfo, chatModel)
|
||||
var groupLink = chatModel.controller.apiGetGroupLink(chat.chatInfo.groupInfo.groupId)
|
||||
val link = chatModel.controller.apiGetGroupLink(chat.chatInfo.groupInfo.groupId)
|
||||
var groupLink = link?.first
|
||||
var groupLinkMemberRole = link?.second
|
||||
ModalManager.shared.showModalCloseable(true) { close ->
|
||||
GroupChatInfoView(chatModel, groupLink, { groupLink = it }, close)
|
||||
GroupChatInfoView(chatModel, groupLink, groupLinkMemberRole, {
|
||||
groupLink = it.first;
|
||||
groupLinkMemberRole = it.second
|
||||
}, close)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -674,10 +679,18 @@ private fun ScrollToBottom(chatId: ChatId, listState: LazyListState, chatItems:
|
||||
.distinctUntilChanged()
|
||||
.filter { listState.layoutInfo.visibleItemsInfo.firstOrNull()?.key != it }
|
||||
.collect {
|
||||
if (listState.firstVisibleItemIndex == 0) {
|
||||
listState.animateScrollToItem(0)
|
||||
} else {
|
||||
listState.animateScrollBy(scrollDistance)
|
||||
try {
|
||||
if (listState.firstVisibleItemIndex == 0) {
|
||||
listState.animateScrollToItem(0)
|
||||
} else {
|
||||
listState.animateScrollBy(scrollDistance)
|
||||
}
|
||||
} catch (e: CancellationException) {
|
||||
/**
|
||||
* When you tap and hold a finger on a lazy column with chatItems, and then you receive a message,
|
||||
* this coroutine will be canceled with the message "Current mutation had a higher priority" because of animatedScroll.
|
||||
* Which breaks auto-scrolling to bottom. So just ignoring the exception
|
||||
* */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.*
|
||||
@@ -32,6 +33,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontStyle
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.ContextCompat
|
||||
import chat.simplex.app.*
|
||||
@@ -645,6 +647,9 @@ fun ComposeView(
|
||||
chatModel.sharedContent.value = null
|
||||
}
|
||||
|
||||
val userCanSend = rememberUpdatedState(chat.userCanSend)
|
||||
val userIsObserver = rememberUpdatedState(chat.userIsObserver)
|
||||
|
||||
Column {
|
||||
contextItemView()
|
||||
when {
|
||||
@@ -656,11 +661,11 @@ fun ComposeView(
|
||||
modifier = Modifier.padding(end = 8.dp),
|
||||
verticalAlignment = Alignment.Bottom,
|
||||
) {
|
||||
IconButton(showChooseAttachment, enabled = !composeState.value.attachmentDisabled) {
|
||||
IconButton(showChooseAttachment, enabled = !composeState.value.attachmentDisabled && rememberUpdatedState(chat.userCanSend).value) {
|
||||
Icon(
|
||||
Icons.Filled.AttachFile,
|
||||
contentDescription = stringResource(R.string.attach),
|
||||
tint = if (!composeState.value.attachmentDisabled) MaterialTheme.colors.primary else HighOrLowlight,
|
||||
tint = if (!composeState.value.attachmentDisabled && userCanSend.value) MaterialTheme.colors.primary else HighOrLowlight,
|
||||
modifier = Modifier
|
||||
.size(28.dp)
|
||||
.clip(CircleShape)
|
||||
@@ -698,6 +703,13 @@ fun ComposeView(
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(rememberUpdatedState(chat.userCanSend).value) {
|
||||
if (!chat.userCanSend) {
|
||||
clearCurrentDraft()
|
||||
clearState()
|
||||
}
|
||||
}
|
||||
|
||||
val activity = LocalContext.current as Activity
|
||||
DisposableEffect(Unit) {
|
||||
val orientation = activity.resources.configuration.orientation
|
||||
@@ -733,6 +745,8 @@ fun ComposeView(
|
||||
needToAllowVoiceToContact,
|
||||
allowedVoiceByPrefs,
|
||||
allowVoiceToContact = ::allowVoiceToContact,
|
||||
userIsObserver = userIsObserver.value,
|
||||
userCanSend = userCanSend.value,
|
||||
sendMessage = {
|
||||
sendMessage()
|
||||
resetLinkPreview()
|
||||
|
||||
@@ -60,6 +60,8 @@ fun SendMsgView(
|
||||
liveMessageAlertShown: SharedPreference<Boolean>,
|
||||
needToAllowVoiceToContact: Boolean,
|
||||
allowedVoiceByPrefs: Boolean,
|
||||
userIsObserver: Boolean,
|
||||
userCanSend: Boolean,
|
||||
allowVoiceToContact: () -> Unit,
|
||||
sendMessage: () -> Unit,
|
||||
sendLiveMessage: (suspend () -> Unit)? = null,
|
||||
@@ -74,10 +76,18 @@ fun SendMsgView(
|
||||
val showVoiceButton = cs.message.isEmpty() && showVoiceRecordIcon && !composeState.value.editing &&
|
||||
cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started)
|
||||
val showDeleteTextButton = rememberSaveable { mutableStateOf(false) }
|
||||
NativeKeyboard(composeState, textStyle, showDeleteTextButton, onMessageChange)
|
||||
NativeKeyboard(composeState, textStyle, showDeleteTextButton, userIsObserver, onMessageChange)
|
||||
// Disable clicks on text field
|
||||
if (cs.preview is ComposePreview.VoicePreview) {
|
||||
Box(Modifier.matchParentSize().clickable(enabled = false, onClick = { }))
|
||||
if (cs.preview is ComposePreview.VoicePreview || !userCanSend) {
|
||||
Box(Modifier
|
||||
.matchParentSize()
|
||||
.clickable(enabled = !userCanSend, indication = null, interactionSource = remember { MutableInteractionSource() }, onClick = {
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = generalGetString(R.string.observer_cant_send_message_title),
|
||||
text = generalGetString(R.string.observer_cant_send_message_desc)
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
if (showDeleteTextButton.value) {
|
||||
DeleteTextButton(composeState)
|
||||
@@ -99,11 +109,11 @@ fun SendMsgView(
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
val stopRecOnNextClick = remember { mutableStateOf(false) }
|
||||
when {
|
||||
needToAllowVoiceToContact || !allowedVoiceByPrefs -> {
|
||||
DisallowedVoiceButton {
|
||||
needToAllowVoiceToContact || !allowedVoiceByPrefs || !userCanSend -> {
|
||||
DisallowedVoiceButton(userCanSend) {
|
||||
if (needToAllowVoiceToContact) {
|
||||
showNeedToAllowVoiceAlert(allowVoiceToContact)
|
||||
} else {
|
||||
} else if (!allowedVoiceByPrefs) {
|
||||
showDisabledVoiceAlert(isDirectChat)
|
||||
}
|
||||
}
|
||||
@@ -118,7 +128,7 @@ fun SendMsgView(
|
||||
&& (cs.preview !is ComposePreview.VoicePreview || !stopRecOnNextClick.value)
|
||||
&& cs.contextItem is ComposeContextItem.NoContextItem) {
|
||||
Spacer(Modifier.width(10.dp))
|
||||
StartLiveMessageButton {
|
||||
StartLiveMessageButton(userCanSend) {
|
||||
if (composeState.value.preview is ComposePreview.NoPreview) {
|
||||
startLiveMessage(scope, sendLiveMessage, updateLiveMessage, sendButtonSize, sendButtonAlpha, composeState, liveMessageAlertShown)
|
||||
}
|
||||
@@ -173,6 +183,7 @@ private fun NativeKeyboard(
|
||||
composeState: MutableState<ComposeState>,
|
||||
textStyle: MutableState<TextStyle>,
|
||||
showDeleteTextButton: MutableState<Boolean>,
|
||||
userIsObserver: Boolean,
|
||||
onMessageChange: (String) -> Unit
|
||||
) {
|
||||
val cs = composeState.value
|
||||
@@ -253,15 +264,22 @@ private fun NativeKeyboard(
|
||||
showDeleteTextButton.value = it.lineCount >= 4
|
||||
}
|
||||
if (composeState.value.preview is ComposePreview.VoicePreview) {
|
||||
Text(
|
||||
generalGetString(R.string.voice_message_send_text),
|
||||
Modifier.padding(padding),
|
||||
color = HighOrLowlight,
|
||||
style = textStyle.value.copy(fontStyle = FontStyle.Italic)
|
||||
)
|
||||
ComposeOverlay(R.string.voice_message_send_text, textStyle, padding)
|
||||
} else if (userIsObserver) {
|
||||
ComposeOverlay(R.string.you_are_observer, textStyle, padding)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ComposeOverlay(textId: Int, textStyle: MutableState<TextStyle>, padding: PaddingValues) {
|
||||
Text(
|
||||
generalGetString(textId),
|
||||
Modifier.padding(padding),
|
||||
color = HighOrLowlight,
|
||||
style = textStyle.value.copy(fontStyle = FontStyle.Italic)
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun BoxScope.DeleteTextButton(composeState: MutableState<ComposeState>) {
|
||||
IconButton(
|
||||
@@ -322,8 +340,8 @@ private fun RecordVoiceView(recState: MutableState<RecordingState>, stopRecOnNex
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun DisallowedVoiceButton(onClick: () -> Unit) {
|
||||
IconButton(onClick, Modifier.size(36.dp)) {
|
||||
private fun DisallowedVoiceButton(enabled: Boolean, onClick: () -> Unit) {
|
||||
IconButton(onClick, Modifier.size(36.dp), enabled = enabled) {
|
||||
Icon(
|
||||
Icons.Outlined.KeyboardVoice,
|
||||
stringResource(R.string.icon_descr_record_voice_message),
|
||||
@@ -454,13 +472,13 @@ private fun SendMsgButton(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun StartLiveMessageButton(onClick: () -> Unit) {
|
||||
private fun StartLiveMessageButton(enabled: Boolean, onClick: () -> Unit) {
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
Box(
|
||||
modifier = Modifier.requiredSize(36.dp)
|
||||
.clickable(
|
||||
onClick = onClick,
|
||||
enabled = true,
|
||||
enabled = enabled,
|
||||
role = Role.Button,
|
||||
interactionSource = interactionSource,
|
||||
indication = rememberRipple(bounded = false, radius = 24.dp)
|
||||
@@ -470,7 +488,7 @@ private fun StartLiveMessageButton(onClick: () -> Unit) {
|
||||
Icon(
|
||||
Icons.Filled.Bolt,
|
||||
stringResource(R.string.icon_descr_send_message),
|
||||
tint = MaterialTheme.colors.primary,
|
||||
tint = if (enabled) MaterialTheme.colors.primary else HighOrLowlight,
|
||||
modifier = Modifier
|
||||
.size(36.dp)
|
||||
.padding(4.dp)
|
||||
@@ -571,6 +589,8 @@ fun PreviewSendMsgView() {
|
||||
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
||||
needToAllowVoiceToContact = false,
|
||||
allowedVoiceByPrefs = true,
|
||||
userIsObserver = false,
|
||||
userCanSend = true,
|
||||
allowVoiceToContact = {},
|
||||
sendMessage = {},
|
||||
onMessageChange = { _ -> },
|
||||
@@ -599,6 +619,8 @@ fun PreviewSendMsgViewEditing() {
|
||||
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
||||
needToAllowVoiceToContact = false,
|
||||
allowedVoiceByPrefs = true,
|
||||
userIsObserver = false,
|
||||
userCanSend = true,
|
||||
allowVoiceToContact = {},
|
||||
sendMessage = {},
|
||||
onMessageChange = { _ -> },
|
||||
@@ -627,6 +649,8 @@ fun PreviewSendMsgViewInProgress() {
|
||||
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
||||
needToAllowVoiceToContact = false,
|
||||
allowedVoiceByPrefs = true,
|
||||
userIsObserver = false,
|
||||
userCanSend = true,
|
||||
allowVoiceToContact = {},
|
||||
sendMessage = {},
|
||||
onMessageChange = { _ -> },
|
||||
|
||||
@@ -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 }.map { it to it.text }
|
||||
val values = GroupMemberRole.values().filter { it <= groupInfo.membership.memberRole && it != GroupMemberRole.Observer }.map { it to it.text }
|
||||
ExposedDropDownSettingRow(
|
||||
generalGetString(R.string.new_member_role),
|
||||
values,
|
||||
|
||||
@@ -34,7 +34,7 @@ import chat.simplex.app.views.helpers.*
|
||||
import chat.simplex.app.views.usersettings.*
|
||||
|
||||
@Composable
|
||||
fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, onGroupLinkUpdated: (String?) -> Unit, close: () -> Unit) {
|
||||
fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, groupLinkMemberRole: GroupMemberRole?, onGroupLinkUpdated: (Pair<String?, GroupMemberRole?>) -> Unit, close: () -> Unit) {
|
||||
BackHandler(onBack = close)
|
||||
val chat = chatModel.chats.firstOrNull { it.id == chatModel.chatId.value }
|
||||
val developerTools = chatModel.controller.appPrefs.developerTools.get()
|
||||
@@ -95,9 +95,7 @@ fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, onGroupLinkUpdat
|
||||
clearChat = { clearChatDialog(chat.chatInfo, chatModel, close) },
|
||||
leaveGroup = { leaveGroupDialog(groupInfo, chatModel, close) },
|
||||
manageGroupLink = {
|
||||
withApi {
|
||||
ModalManager.shared.showModal { GroupLinkView(chatModel, groupInfo, groupLink, onGroupLinkUpdated) }
|
||||
}
|
||||
ModalManager.shared.showModal { GroupLinkView(chatModel, groupInfo, groupLink, groupLinkMemberRole, onGroupLinkUpdated) }
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -300,6 +298,7 @@ private fun MemberRow(member: GroupMember, user: Boolean = false) {
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Row(
|
||||
Modifier.weight(1f).padding(end = DEFAULT_PADDING),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(4.dp)
|
||||
) {
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package chat.simplex.app.views.chat.group
|
||||
|
||||
import SectionItemView
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.CircularProgressIndicator
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -15,22 +18,26 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import chat.simplex.app.R
|
||||
import chat.simplex.app.model.ChatModel
|
||||
import chat.simplex.app.model.GroupInfo
|
||||
import chat.simplex.app.model.*
|
||||
import chat.simplex.app.ui.theme.*
|
||||
import chat.simplex.app.views.helpers.*
|
||||
import chat.simplex.app.views.newchat.QRCode
|
||||
|
||||
@Composable
|
||||
fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: String?, onGroupLinkUpdated: (String?) -> Unit) {
|
||||
fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: String?, memberRole: GroupMemberRole?, onGroupLinkUpdated: (Pair<String?, GroupMemberRole?>) -> Unit) {
|
||||
var groupLink by rememberSaveable { mutableStateOf(connReqContact) }
|
||||
val groupLinkMemberRole = rememberSaveable { mutableStateOf(memberRole) }
|
||||
var creatingLink by rememberSaveable { mutableStateOf(false) }
|
||||
val cxt = LocalContext.current
|
||||
fun createLink() {
|
||||
creatingLink = true
|
||||
withApi {
|
||||
groupLink = chatModel.controller.apiCreateGroupLink(groupInfo.groupId)
|
||||
onGroupLinkUpdated(groupLink)
|
||||
val link = chatModel.controller.apiCreateGroupLink(groupInfo.groupId)
|
||||
if (link != null) {
|
||||
groupLink = link.first
|
||||
groupLinkMemberRole.value = link.second
|
||||
onGroupLinkUpdated(groupLink to groupLinkMemberRole.value)
|
||||
}
|
||||
creatingLink = false
|
||||
}
|
||||
}
|
||||
@@ -41,9 +48,24 @@ fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: St
|
||||
}
|
||||
GroupLinkLayout(
|
||||
groupLink = groupLink,
|
||||
groupInfo,
|
||||
groupLinkMemberRole,
|
||||
creatingLink,
|
||||
createLink = ::createLink,
|
||||
share = { shareText(cxt, groupLink ?: return@GroupLinkLayout) },
|
||||
updateLink = {
|
||||
val role = groupLinkMemberRole.value
|
||||
if (role != null) {
|
||||
withBGApi {
|
||||
val link = chatModel.controller.apiGroupLinkMemberRole(groupInfo.groupId, role)
|
||||
if (link != null) {
|
||||
groupLink = link.first
|
||||
groupLinkMemberRole.value = link.second
|
||||
onGroupLinkUpdated(groupLink to groupLinkMemberRole.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
deleteLink = {
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = generalGetString(R.string.delete_link_question),
|
||||
@@ -54,7 +76,7 @@ fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: St
|
||||
val r = chatModel.controller.apiDeleteGroupLink(groupInfo.groupId)
|
||||
if (r) {
|
||||
groupLink = null
|
||||
onGroupLinkUpdated(null)
|
||||
onGroupLinkUpdated(null to null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -69,13 +91,18 @@ fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: St
|
||||
@Composable
|
||||
fun GroupLinkLayout(
|
||||
groupLink: String?,
|
||||
groupInfo: GroupInfo,
|
||||
groupLinkMemberRole: MutableState<GroupMemberRole?>,
|
||||
creatingLink: Boolean,
|
||||
createLink: () -> Unit,
|
||||
share: () -> Unit,
|
||||
updateLink: () -> Unit,
|
||||
deleteLink: () -> Unit
|
||||
) {
|
||||
Column(
|
||||
Modifier.padding(horizontal = DEFAULT_PADDING),
|
||||
Modifier
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(start = DEFAULT_PADDING, bottom = DEFAULT_BOTTOM_PADDING, end = DEFAULT_PADDING),
|
||||
horizontalAlignment = Alignment.Start,
|
||||
verticalArrangement = Arrangement.Top
|
||||
) {
|
||||
@@ -93,7 +120,17 @@ fun GroupLinkLayout(
|
||||
if (groupLink == null) {
|
||||
SimpleButton(stringResource(R.string.button_create_group_link), icon = Icons.Outlined.AddLink, disabled = creatingLink, click = createLink)
|
||||
} else {
|
||||
QRCode(groupLink, Modifier.weight(1f, fill = false).aspectRatio(1f))
|
||||
// SectionItemView(padding = PaddingValues(bottom = DEFAULT_PADDING)) {
|
||||
// RoleSelectionRow(groupInfo, groupLinkMemberRole)
|
||||
// }
|
||||
var initialLaunch by remember { mutableStateOf(true) }
|
||||
LaunchedEffect(groupLinkMemberRole.value) {
|
||||
if (!initialLaunch) {
|
||||
updateLink()
|
||||
}
|
||||
initialLaunch = false
|
||||
}
|
||||
QRCode(groupLink, Modifier.aspectRatio(1f))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.spacedBy(10.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
@@ -116,6 +153,25 @@ fun GroupLinkLayout(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun RoleSelectionRow(groupInfo: GroupInfo, selectedRole: MutableState<GroupMemberRole?>, enabled: Boolean = true) {
|
||||
Row(
|
||||
Modifier.fillMaxWidth(),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.SpaceBetween
|
||||
) {
|
||||
val values = listOf(GroupMemberRole.Member, GroupMemberRole.Observer).map { it to it.text }
|
||||
ExposedDropDownSettingRow(
|
||||
generalGetString(R.string.initial_member_role),
|
||||
values,
|
||||
selectedRole,
|
||||
icon = null,
|
||||
enabled = rememberUpdatedState(enabled),
|
||||
onSelected = { selectedRole.value = it }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProgressIndicator() {
|
||||
Box(
|
||||
|
||||
@@ -174,14 +174,14 @@ fun CIFileView(
|
||||
class ChatItemProvider: PreviewParameterProvider<ChatItem> {
|
||||
private val sentFile = ChatItem(
|
||||
chatDir = CIDirection.DirectSnd(),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.SndSent(), itemDeleted = false, itemEdited = true, editable = false),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.SndSent(), itemEdited = true),
|
||||
content = CIContent.SndMsgContent(msgContent = MsgContent.MCFile("")),
|
||||
quotedItem = null,
|
||||
file = CIFile.getSample(fileStatus = CIFileStatus.SndComplete)
|
||||
)
|
||||
private val fileChatItemWtFile = ChatItem(
|
||||
chatDir = CIDirection.DirectRcv(),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
|
||||
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.RcvRead(), ),
|
||||
content = CIContent.RcvMsgContent(msgContent = MsgContent.MCFile("")),
|
||||
quotedItem = null,
|
||||
file = null
|
||||
|
||||
@@ -98,7 +98,7 @@ fun ChatItemView(
|
||||
onDismissRequest = { showMenu.value = false },
|
||||
Modifier.width(220.dp)
|
||||
) {
|
||||
if (!cItem.meta.itemDeleted && !live) {
|
||||
if (cItem.meta.itemDeleted == null && !live) {
|
||||
ItemAction(stringResource(R.string.reply_verb), Icons.Outlined.Reply, onClick = {
|
||||
if (composeState.value.editing) {
|
||||
composeState.value = ComposeState(contextItem = ComposeContextItem.QuotedItem(cItem), useLinkPreviews = useLinkPreviews)
|
||||
@@ -140,7 +140,7 @@ fun ChatItemView(
|
||||
showMenu.value = false
|
||||
})
|
||||
}
|
||||
if (cItem.meta.itemDeleted && revealed.value) {
|
||||
if (cItem.meta.itemDeleted != null && revealed.value) {
|
||||
ItemAction(
|
||||
stringResource(R.string.hide_verb),
|
||||
Icons.Outlined.VisibilityOff,
|
||||
@@ -178,10 +178,10 @@ fun ChatItemView(
|
||||
@Composable
|
||||
fun ContentItem() {
|
||||
val mc = cItem.content.msgContent
|
||||
if (cItem.meta.itemDeleted && !revealed.value) {
|
||||
if (cItem.meta.itemDeleted != null && !revealed.value) {
|
||||
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, showMember = showMember)
|
||||
MarkedDeletedItemDropdownMenu()
|
||||
} else if (cItem.quotedItem == null && !cItem.meta.itemDeleted && !cItem.meta.isLive) {
|
||||
} else if (cItem.quotedItem == null && cItem.meta.itemDeleted == null && !cItem.meta.isLive) {
|
||||
if (mc is MsgContent.MCText && isShortEmoji(cItem.content.text)) {
|
||||
EmojiItemView(cItem, cInfo.timedMessagesTTL)
|
||||
MsgContentItemDropdownMenu()
|
||||
@@ -238,6 +238,8 @@ fun ChatItemView(
|
||||
is CIContent.SndGroupFeature -> CIChatFeatureView(cItem, c.groupFeature, c.preference.enable.iconColor)
|
||||
is CIContent.RcvChatFeatureRejected -> CIChatFeatureView(cItem, c.feature, Color.Red)
|
||||
is CIContent.RcvGroupFeatureRejected -> CIChatFeatureView(cItem, c.groupFeature, Color.Red)
|
||||
is CIContent.SndModerated -> DeletedItem()
|
||||
is CIContent.RcvModerated -> DeletedItem()
|
||||
is CIContent.InvalidJSON -> CIInvalidJSONView(c.json)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package chat.simplex.app.views.chat.item
|
||||
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.*
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -19,9 +18,10 @@ import chat.simplex.app.ui.theme.SimpleXTheme
|
||||
|
||||
@Composable
|
||||
fun DeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Boolean = false) {
|
||||
val sent = ci.chatDir.sent
|
||||
Surface(
|
||||
shape = RoundedCornerShape(18.dp),
|
||||
color = ReceivedColorLight,
|
||||
color = if (sent) SentColorLight else ReceivedColorLight,
|
||||
) {
|
||||
Row(
|
||||
Modifier.padding(horizontal = 12.dp, vertical = 6.dp),
|
||||
|
||||
@@ -165,7 +165,7 @@ fun FramedItemView(
|
||||
Box(contentAlignment = Alignment.BottomEnd) {
|
||||
Column(Modifier.width(IntrinsicSize.Max)) {
|
||||
PriorityLayout(Modifier, CHAT_IMAGE_LAYOUT_ID) {
|
||||
if (ci.meta.itemDeleted) {
|
||||
if (ci.meta.itemDeleted != null) {
|
||||
FramedItemHeader(stringResource(R.string.marked_deleted_description), true, Icons.Outlined.Delete)
|
||||
} else if (ci.meta.isLive) {
|
||||
FramedItemHeader(stringResource(R.string.live), false)
|
||||
@@ -242,7 +242,12 @@ fun CIMarkdownText(
|
||||
}
|
||||
|
||||
const val CHAT_IMAGE_LAYOUT_ID = "chatImage"
|
||||
const val MAX_SAFE_WIDTH_HEIGHT = 100_000
|
||||
/**
|
||||
* Equal to [androidx.compose.ui.unit.Constraints.MaxFocusMask], which is 0x3FFFF - 1
|
||||
* Other values make a crash `java.lang.IllegalArgumentException: Can't represent a width of 123456 and height of 9909 in Constraints`
|
||||
* See [androidx.compose.ui.unit.Constraints.createConstraints]
|
||||
* */
|
||||
const val MAX_SAFE_WIDTH = 0x3FFFF - 1
|
||||
|
||||
@Composable
|
||||
fun PriorityLayout(
|
||||
@@ -250,6 +255,17 @@ fun PriorityLayout(
|
||||
priorityLayoutId: String,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
/**
|
||||
* Limiting max value for height + width in order to not crash the app, see [androidx.compose.ui.unit.Constraints.createConstraints]
|
||||
* */
|
||||
fun maxSafeHeight(width: Int) = when { // width bits + height bits should be <= 31
|
||||
width < 0x1FFF /*MaxNonFocusMask*/ -> 0x3FFFF - 1 /* MaxFocusMask */ // 13 bits width + 18 bits height
|
||||
width < 0x7FFF /*MinNonFocusMask*/ -> 0xFFFF - 1 /* MinFocusMask */ // 15 bits width + 16 bits height
|
||||
width < 0xFFFF /*MinFocusMask*/ -> 0x7FFF - 1 /* MinFocusMask */ // 16 bits width + 15 bits height
|
||||
width < 0x3FFFF /*MaxFocusMask*/ -> 0x1FFF - 1 /* MaxNonFocusMask */ // 18 bits width + 13 bits height
|
||||
else -> 0x1FFF // shouldn't happen since width is limited already
|
||||
}
|
||||
|
||||
Layout(
|
||||
content = content,
|
||||
modifier = modifier
|
||||
@@ -261,15 +277,11 @@ fun PriorityLayout(
|
||||
if (it.layoutId == priorityLayoutId)
|
||||
imagePlaceable!!
|
||||
else
|
||||
it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: min(MAX_SAFE_WIDTH_HEIGHT, constraints.maxWidth))) }
|
||||
/**
|
||||
* Limit width for every other element to width of important element and height for a sum of all elements.
|
||||
*
|
||||
* min(MAX_SAFE_WIDTH_HEIGHT, ...) is here because of exception (related to width of long text):
|
||||
* java.lang.IllegalArgumentException: Can't represent a size of 324314 in Constraints
|
||||
* at androidx.compose.ui.unit.Constraints$Companion.bitsNeedForSize(Constraints.kt:403)
|
||||
* */
|
||||
layout(imagePlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH_HEIGHT, placeables.maxOf { it.width }), min(MAX_SAFE_WIDTH_HEIGHT, placeables.sumOf { it.height })) {
|
||||
it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: min(MAX_SAFE_WIDTH, constraints.maxWidth))) }
|
||||
// Limit width for every other element to width of important element and height for a sum of all elements.
|
||||
val width = imagePlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH, placeables.maxOf { it.width })
|
||||
val height = minOf(maxSafeHeight(width), placeables.sumOf { it.height })
|
||||
layout(width, height) {
|
||||
var y = 0
|
||||
placeables.forEach {
|
||||
it.place(0, y)
|
||||
|
||||
@@ -14,6 +14,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import chat.simplex.app.R
|
||||
import chat.simplex.app.model.CIDeleted
|
||||
import chat.simplex.app.model.ChatItem
|
||||
import chat.simplex.app.ui.theme.HighOrLowlight
|
||||
import chat.simplex.app.ui.theme.SimpleXTheme
|
||||
@@ -51,7 +52,7 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Bool
|
||||
fun PreviewMarkedDeletedItemView() {
|
||||
SimpleXTheme {
|
||||
DeletedItemView(
|
||||
ChatItem.getSampleData(itemDeleted = true),
|
||||
ChatItem.getSampleData(itemDeleted = CIDeleted.Deleted()),
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
@@ -145,12 +145,12 @@ fun ChatPreviewView(
|
||||
if (ci != null) {
|
||||
val (text: CharSequence, inlineTextContent) = when {
|
||||
chatModelDraftChatId == chat.id && chatModelDraft != null -> remember(chatModelDraft) { messageDraft(chatModelDraft) }
|
||||
!ci.meta.itemDeleted -> ci.text to null
|
||||
ci.meta.itemDeleted == null -> ci.text to null
|
||||
else -> generalGetString(R.string.marked_deleted_description) to null
|
||||
}
|
||||
val formattedText = when {
|
||||
chatModelDraftChatId == chat.id && chatModelDraft != null -> null
|
||||
!ci.meta.itemDeleted -> ci.formattedText
|
||||
ci.meta.itemDeleted == null -> ci.formattedText
|
||||
else -> null
|
||||
}
|
||||
MarkdownText(
|
||||
|
||||
@@ -154,7 +154,7 @@ fun DatabaseLayout(
|
||||
val operationsDisabled = !stopped || progressIndicator
|
||||
|
||||
Column(
|
||||
Modifier.fillMaxWidth().verticalScroll(rememberScrollState()).padding(bottom = 48.dp),
|
||||
Modifier.fillMaxWidth().verticalScroll(rememberScrollState()).padding(bottom = DEFAULT_BOTTOM_PADDING),
|
||||
horizontalAlignment = Alignment.Start,
|
||||
) {
|
||||
AppBarTitle(stringResource(R.string.your_chat_database))
|
||||
@@ -190,7 +190,7 @@ fun DatabaseLayout(
|
||||
disabled = operationsDisabled
|
||||
)
|
||||
SectionDivider()
|
||||
SettingsPreferenceItem(Icons.Outlined.Backup, stringResource(R.string.full_backup), privacyFullBackup)
|
||||
AppDataBackupPreference(privacyFullBackup, initialRandomDBPassphrase)
|
||||
SectionDivider()
|
||||
SettingsActionItem(
|
||||
Icons.Outlined.IosShare,
|
||||
@@ -270,6 +270,36 @@ fun DatabaseLayout(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun AppDataBackupPreference(privacyFullBackup: SharedPreference<Boolean>, initialRandomDBPassphrase: SharedPreference<Boolean>) {
|
||||
SectionItemView {
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Icon(Icons.Outlined.Backup, stringResource(R.string.full_backup), tint = HighOrLowlight)
|
||||
Spacer(Modifier.padding(horizontal = 4.dp))
|
||||
val prefState = remember { mutableStateOf(privacyFullBackup.get()) }
|
||||
Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
|
||||
Text(stringResource(R.string.full_backup), Modifier.padding(end = 24.dp))
|
||||
Spacer(Modifier.fillMaxWidth().weight(1f))
|
||||
Switch(
|
||||
checked = prefState.value,
|
||||
onCheckedChange = {
|
||||
if (initialRandomDBPassphrase.get()) {
|
||||
exportProhibitedAlert()
|
||||
} else {
|
||||
privacyFullBackup.set(it)
|
||||
prefState.value = it
|
||||
}
|
||||
},
|
||||
colors = SwitchDefaults.colors(
|
||||
checkedThumbColor = MaterialTheme.colors.primary,
|
||||
uncheckedThumbColor = HighOrLowlight
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setChatItemTTLAlert(
|
||||
m: ChatModel, selectedChatItemTTL: MutableState<ChatItemTTL>,
|
||||
progressIndicator: MutableState<Boolean>,
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.*
|
||||
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.*
|
||||
import android.graphics.ImageDecoder.DecodeException
|
||||
import android.net.Uri
|
||||
import android.provider.MediaStore
|
||||
import android.util.Base64
|
||||
@@ -205,21 +206,22 @@ fun GetImageBottomSheet(
|
||||
val processPickedImage = { uri: Uri? ->
|
||||
if (uri != null) {
|
||||
val source = ImageDecoder.createSource(context.contentResolver, uri)
|
||||
val bitmap = ImageDecoder.decodeBitmap(source)
|
||||
imageBitmap.value = uri
|
||||
onImageChange(bitmap)
|
||||
}
|
||||
}
|
||||
val galleryLauncher = rememberLauncherForActivityResult(contract = PickFromGallery()) { processPickedImage(it) }
|
||||
val galleryLauncherFallback = rememberGetContentLauncher { processPickedImage(it) }
|
||||
val cameraLauncher = rememberCameraLauncher { uri: Uri? ->
|
||||
if (uri != null) {
|
||||
imageBitmap.value = uri
|
||||
val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri)
|
||||
val bitmap = ImageDecoder.decodeBitmap(source)
|
||||
onImageChange(bitmap)
|
||||
try {
|
||||
val bitmap = ImageDecoder.decodeBitmap(source)
|
||||
imageBitmap.value = uri
|
||||
onImageChange(bitmap)
|
||||
} catch (e: DecodeException) {
|
||||
Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}")
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = generalGetString(R.string.image_decoding_exception_title),
|
||||
text = generalGetString(R.string.image_decoding_exception_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
val galleryLauncher = rememberLauncherForActivityResult(contract = PickFromGallery(), processPickedImage)
|
||||
val galleryLauncherFallback = rememberGetContentLauncher(processPickedImage)
|
||||
val cameraLauncher = rememberCameraLauncher(processPickedImage)
|
||||
val permissionLauncher = rememberPermissionLauncher { isGranted: Boolean ->
|
||||
if (isGranted) {
|
||||
cameraLauncher.launchWithFallback()
|
||||
|
||||
@@ -85,13 +85,14 @@ fun SectionItemView(
|
||||
click: (() -> Unit)? = null,
|
||||
minHeight: Dp = 46.dp,
|
||||
disabled: Boolean = false,
|
||||
padding: PaddingValues = PaddingValues(horizontal = DEFAULT_PADDING),
|
||||
content: (@Composable RowScope.() -> Unit)
|
||||
) {
|
||||
val modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.sizeIn(minHeight = minHeight)
|
||||
Row(
|
||||
if (click == null || disabled) modifier.padding(horizontal = DEFAULT_PADDING) else modifier.clickable(onClick = click).padding(horizontal = DEFAULT_PADDING),
|
||||
if (click == null || disabled) modifier.padding(padding) else modifier.clickable(onClick = click).padding(padding),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
content()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package chat.simplex.app.views.helpers
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.graphics.*
|
||||
@@ -374,6 +375,24 @@ fun saveAnimImage(context: Context, uri: Uri): String? {
|
||||
}
|
||||
}
|
||||
|
||||
fun saveTempImageUncompressed(image: Bitmap, asPng: Boolean): File? {
|
||||
return try {
|
||||
val ext = if (asPng) "png" else "jpg"
|
||||
val tmpDir = SimplexApp.context.getDir("temp", Application.MODE_PRIVATE)
|
||||
return File(tmpDir.absolutePath + File.separator + generateNewFileName(SimplexApp.context, "IMG", ext)).apply {
|
||||
outputStream().use { out ->
|
||||
image.compress(if (asPng) Bitmap.CompressFormat.PNG else Bitmap.CompressFormat.JPEG, 85, out)
|
||||
out.flush()
|
||||
}
|
||||
deleteOnExit()
|
||||
SimplexApp.context.chatModel.filesToDelete.add(this)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Util.kt saveTempImageUncompressed error: ${e.message}")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun saveFileFromUri(context: Context, uri: Uri): String? {
|
||||
return try {
|
||||
val inputStream = context.contentResolver.openInputStream(uri)
|
||||
|
||||
@@ -1,32 +1,100 @@
|
||||
package chat.simplex.app.views.newchat
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.graphics.*
|
||||
import androidx.compose.ui.platform.*
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import boofcv.alg.fiducial.qrcode.QrCodeEncoder
|
||||
import boofcv.alg.fiducial.qrcode.QrCodeGeneratorImage
|
||||
import androidx.core.graphics.*
|
||||
import androidx.core.graphics.drawable.toBitmap
|
||||
import boofcv.alg.drawing.FiducialImageEngine
|
||||
import boofcv.alg.fiducial.qrcode.*
|
||||
import boofcv.android.ConvertBitmap
|
||||
import chat.simplex.app.R
|
||||
import chat.simplex.app.SimplexApp
|
||||
import chat.simplex.app.ui.theme.SimpleXTheme
|
||||
import chat.simplex.app.views.helpers.*
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
fun QRCode(connReq: String, modifier: Modifier = Modifier) {
|
||||
Image(
|
||||
bitmap = qrCodeBitmap(connReq, 1024).asImageBitmap(),
|
||||
contentDescription = stringResource(R.string.image_descr_qr_code),
|
||||
modifier = modifier
|
||||
)
|
||||
fun QRCode(
|
||||
connReq: String,
|
||||
modifier: Modifier = Modifier,
|
||||
tintColor: Color = Color(0xff062d56),
|
||||
withLogo: Boolean = true
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val scope = rememberCoroutineScope()
|
||||
|
||||
BoxWithConstraints {
|
||||
val maxWidthInPx = with(LocalDensity.current) { maxWidth.roundToPx() }
|
||||
val qr = remember(maxWidthInPx, connReq, tintColor, withLogo) {
|
||||
qrCodeBitmap(connReq, maxWidthInPx).replaceColor(Color.Black.toArgb(), tintColor.toArgb())
|
||||
.let { if (withLogo) it.addLogo() else it }
|
||||
.asImageBitmap()
|
||||
}
|
||||
Image(
|
||||
bitmap = qr,
|
||||
contentDescription = stringResource(R.string.image_descr_qr_code),
|
||||
modifier
|
||||
.clickable {
|
||||
scope.launch {
|
||||
val image = qrCodeBitmap(connReq, 1024).replaceColor(Color.Black.toArgb(), tintColor.toArgb())
|
||||
.let { if (withLogo) it.addLogo() else it }
|
||||
val file = saveTempImageUncompressed(image, false)
|
||||
if (file != null) {
|
||||
shareFile(context, "", file.absolutePath)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun qrCodeBitmap(content: String, size: Int): Bitmap {
|
||||
val qrCode = QrCodeEncoder().addAutomatic(content).fixate()
|
||||
val renderer = QrCodeGeneratorImage(5)
|
||||
fun qrCodeBitmap(content: String, size: Int = 1024): Bitmap {
|
||||
val qrCode = QrCodeEncoder().addAutomatic(content).setError(QrCode.ErrorLevel.L).fixate()
|
||||
/** See [QrCodeGeneratorImage.initialize] and [FiducialImageEngine.configure] for size calculation */
|
||||
val numModules = QrCode.totalModules(qrCode.version)
|
||||
val borderModule = 1
|
||||
// val calculatedFinalWidth = (pixelsPerModule * numModules) + 2 * (borderModule * pixelsPerModule)
|
||||
// size = (x * numModules) + 2 * (borderModule * x)
|
||||
// size / x = numModules + 2 * borderModule
|
||||
// x = size / (numModules + 2 * borderModule)
|
||||
val pixelsPerModule = size / (numModules + 2 * borderModule)
|
||||
// + 1 to make it with better quality
|
||||
val renderer = QrCodeGeneratorImage(pixelsPerModule + 1)
|
||||
renderer.borderModule = borderModule
|
||||
renderer.render(qrCode)
|
||||
return ConvertBitmap.grayToBitmap(renderer.gray, Bitmap.Config.RGB_565)
|
||||
return ConvertBitmap.grayToBitmap(renderer.gray, Bitmap.Config.RGB_565).scale(size, size)
|
||||
}
|
||||
|
||||
fun Bitmap.replaceColor(from: Int, to: Int): Bitmap {
|
||||
val pixels = IntArray(width * height)
|
||||
getPixels(pixels, 0, width, 0, 0, width, height)
|
||||
var i = 0
|
||||
while (i < pixels.size) {
|
||||
if (pixels[i] == from) {
|
||||
pixels[i] = to
|
||||
}
|
||||
i++
|
||||
}
|
||||
setPixels(pixels, 0, width, 0, 0, width, height)
|
||||
return this
|
||||
}
|
||||
|
||||
fun Bitmap.addLogo(): Bitmap = applyCanvas {
|
||||
val radius = (width * 0.16f) / 2
|
||||
val paint = android.graphics.Paint()
|
||||
paint.color = android.graphics.Color.WHITE
|
||||
drawCircle(width / 2f, height / 2f, radius, paint)
|
||||
val logo = SimplexApp.context.resources.getDrawable(R.mipmap.icon_foreground, null).toBitmap()
|
||||
val logoSize = (width * 0.24).toInt()
|
||||
translate((width - logoSize) / 2f, (height - logoSize) / 2f)
|
||||
drawBitmap(logo, null, android.graphics.Rect(0, 0, logoSize, logoSize), null)
|
||||
}
|
||||
|
||||
@Preview
|
||||
|
||||
@@ -18,8 +18,7 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.compose.ui.unit.*
|
||||
import chat.simplex.app.R
|
||||
import chat.simplex.app.model.ChatModel
|
||||
import chat.simplex.app.model.User
|
||||
@@ -47,15 +46,15 @@ fun SimpleXInfoLayout(
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(horizontal = DEFAULT_PADDING),
|
||||
) {
|
||||
Box(Modifier.fillMaxWidth().padding(top = 24.dp, bottom = 8.dp), contentAlignment = Alignment.Center) {
|
||||
Box(Modifier.fillMaxWidth().padding(top = 8.dp), contentAlignment = Alignment.Center) {
|
||||
SimpleXLogo()
|
||||
}
|
||||
|
||||
Text(stringResource(R.string.next_generation_of_private_messaging), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = 24.dp), textAlign = TextAlign.Center)
|
||||
Text(stringResource(R.string.next_generation_of_private_messaging), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = 36.dp).padding(horizontal = 48.dp), textAlign = TextAlign.Center)
|
||||
|
||||
InfoRow(painterResource(R.drawable.privacy), R.string.privacy_redefined, R.string.first_platform_without_user_ids)
|
||||
InfoRow(painterResource(R.drawable.privacy), R.string.privacy_redefined, R.string.first_platform_without_user_ids, width = 80.dp)
|
||||
InfoRow(painterResource(R.drawable.shield), R.string.immune_to_spam_and_abuse, R.string.people_can_connect_only_via_links_you_share)
|
||||
InfoRow(painterResource(R.drawable.decentralized), R.string.decentralized, R.string.opensource_protocol_and_code_anybody_can_run_servers)
|
||||
InfoRow(painterResource(if (isInDarkTheme()) R.drawable.decentralized_light else R.drawable.decentralized), R.string.decentralized, R.string.opensource_protocol_and_code_anybody_can_run_servers)
|
||||
|
||||
Spacer(Modifier.fillMaxHeight().weight(1f))
|
||||
|
||||
@@ -89,14 +88,14 @@ fun SimpleXLogo() {
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun InfoRow(icon: Painter, @StringRes titleId: Int, @StringRes textId: Int) {
|
||||
Row(Modifier.padding(bottom = 20.dp), verticalAlignment = Alignment.Top) {
|
||||
private fun InfoRow(icon: Painter, @StringRes titleId: Int, @StringRes textId: Int, width: Dp = 76.dp) {
|
||||
Row(Modifier.padding(bottom = 27.dp), verticalAlignment = Alignment.Top) {
|
||||
Image(icon, contentDescription = null, modifier = Modifier
|
||||
.width(60.dp)
|
||||
.padding(top = 8.dp, end = 16.dp))
|
||||
.width(width)
|
||||
.padding(top = 8.dp, start = 8.dp, end = 24.dp))
|
||||
Column(horizontalAlignment = Alignment.Start) {
|
||||
Text(stringResource(titleId), fontWeight = FontWeight.Bold, style = MaterialTheme.typography.h3, lineHeight = 24.sp)
|
||||
Text(stringResource(textId), lineHeight = 24.sp, style = MaterialTheme.typography.caption)
|
||||
Text(stringResource(textId), lineHeight = 24.sp, style = MaterialTheme.typography.body1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import chat.simplex.app.R
|
||||
@@ -51,8 +50,6 @@ fun PrivacySettingsView(
|
||||
SectionView(stringResource(R.string.settings_section_title_chats)) {
|
||||
SettingsPreferenceItem(Icons.Outlined.Image, stringResource(R.string.auto_accept_images), chatModel.controller.appPrefs.privacyAcceptImages)
|
||||
SectionDivider()
|
||||
SettingsPreferenceItem(Icons.Outlined.ImageAspectRatio, stringResource(R.string.transfer_images_faster), chatModel.controller.appPrefs.privacyTransferImagesInline)
|
||||
SectionDivider()
|
||||
SettingsPreferenceItem(Icons.Outlined.TravelExplore, stringResource(R.string.send_link_previews), chatModel.controller.appPrefs.privacyLinkPreviews)
|
||||
SectionDivider()
|
||||
SectionItemView { SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = {
|
||||
|
||||
@@ -24,6 +24,7 @@ fun VersionInfoView(info: CoreVersionInfo) {
|
||||
Text(String.format(stringResource(R.string.app_version_code), BuildConfig.VERSION_CODE))
|
||||
Text(String.format(stringResource(R.string.core_version), info.version))
|
||||
Text(String.format(stringResource(R.string.core_build_timestamp), info.buildTimestamp))
|
||||
Text(String.format(stringResource(R.string.core_simplexmq_version), info.simplexmqVersion, info.simplexmqCommit.substring(startIndex = 0, endIndex = 7)))
|
||||
val simplexmqCommit = if (info.simplexmqCommit.length >= 7) info.simplexmqCommit.substring(startIndex = 0, endIndex = 7) else info.simplexmqCommit
|
||||
Text(String.format(stringResource(R.string.core_simplexmq_version), info.simplexmqVersion, simplexmqCommit))
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -559,7 +559,6 @@
|
||||
<string name="your_privacy">Meine Privatsphäre</string>
|
||||
<string name="protect_app_screen">App-Bildschirm schützen</string>
|
||||
<string name="auto_accept_images">Bilder automatisch akzeptieren</string>
|
||||
<string name="transfer_images_faster">Bilder schneller übertragen</string>
|
||||
<string name="send_link_previews">Link-Vorschau senden</string>
|
||||
<string name="full_backup">App-Datensicherung</string>
|
||||
<!-- Settings sections -->
|
||||
@@ -1041,4 +1040,5 @@
|
||||
<string name="v4_5_italian_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
|
||||
<string name="v4_4_french_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
|
||||
<string name="v4_5_private_filenames_descr">Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen.</string>
|
||||
<string name="moderated_description">Moderiert</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,87 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="auth_unavailable">Autenticación no disponible</string>
|
||||
<string name="accept_contact_button">Aceptar</string>
|
||||
<string name="network_settings">Configuración de red avanzada</string>
|
||||
<string name="onboarding_notifications_mode_off_desc"><b>Mejor para la batería</b>. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, NO se utilizará el servicio en segundo plano.</string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><b>Bueno para la batería</b>. El servicio en segundo plano comprueba si hay mensajes nuevos cada 10 minutos. Puedes perderte llamadas y mensajes urgentes.</string>
|
||||
<string name="accept_call_on_lock_screen">Aceptar</string>
|
||||
<string name="full_backup">Copia de seguridad de los datos de la aplicación</string>
|
||||
<string name="chat_item_ttl_day">un dia</string>
|
||||
<string name="chat_item_ttl_month">un mes</string>
|
||||
<string name="chat_item_ttl_week">una semana</string>
|
||||
<string name="allow_disappearing_messages_only_if">Permitir que desaparezcan los mensajes sólo si su contacto lo permite.</string>
|
||||
<string name="v4_3_improved_server_configuration_desc">Añadir servidores escaneando códigos QR.</string>
|
||||
<string name="smp_servers_preset_add">Añadir servidores predefinidos</string>
|
||||
<string name="all_group_members_will_remain_connected">Todos los miembros del grupo permanecerán conectados.</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">Permitir 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_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="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="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_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="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>.
|
||||
\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="bold">negrita</string>
|
||||
<string name="callstatus_accepted">llamada aceptada</string>
|
||||
<string name="accept">Aceptar</string>
|
||||
<string name="audio_call_no_encryption">llamada de audio (sin cifrado e2e)</string>
|
||||
<string name="icon_descr_audio_call">llamada de audio</string>
|
||||
<string name="settings_audio_video_calls">Llamadas de audio y vídeo</string>
|
||||
<string name="icon_descr_audio_off">Audio desactivado</string>
|
||||
<string name="icon_descr_audio_on">Audio activado</string>
|
||||
<string name="integrity_msg_bad_id">ID de mensaje erróneo</string>
|
||||
<string name="auto_accept_images">Aceptar automáticamente imágenes</string>
|
||||
<string name="users_delete_all_chats_deleted">Se borrarán todos los chats y mensajes - ¡esto no se puede deshacer!</string>
|
||||
<string name="accept_feature">Aceptar</string>
|
||||
<string name="allow_to_send_disappearing">Permitir enviar mensajes que desaparecen.</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_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_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="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="allow_voice_messages_question">¿Permitir mensajes de voz\?</string>
|
||||
<string name="back">Atrás</string>
|
||||
<string name="about_simplex_chat">Sobre <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
|
||||
<string name="smp_servers_add_to_another_device">Añadir a otro dispositivo</string>
|
||||
<string name="app_version_name">Versión de la aplicación: v%s</string>
|
||||
<string name="accept_requests">Aceptar solicitudes</string>
|
||||
<string name="accept_automatically">Automáticamente</string>
|
||||
<string name="icon_descr_asked_to_receive">Solicita recibir la imagen</string>
|
||||
<string name="impossible_to_recover_passphrase"><b>Ten en cuenta</b>: NO podrás recuperar o cambiar la contraseña si la pierdes.</string>
|
||||
<string name="both_you_and_your_contact_can_send_voice">Tanto tú como tu contacto podéis enviar mensajes de voz.</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><b>¡Usa más batería!</b> El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles.</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">Tanto tú como tu contacto podéis 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="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>
|
||||
</resources>
|
||||
@@ -623,7 +623,6 @@
|
||||
<string name="privacy_and_security">Vie privée et sécurité</string>
|
||||
<string name="protect_app_screen">Protéger l\'écran de l\'app</string>
|
||||
<string name="auto_accept_images">Images auto-acceptées</string>
|
||||
<string name="transfer_images_faster">Transfert d\'images plus rapide</string>
|
||||
<string name="full_backup">Sauvegarde des données de l\'app</string>
|
||||
<string name="settings_section_title_you">VOUS</string>
|
||||
<string name="settings_section_title_help">AIDE</string>
|
||||
@@ -953,4 +952,19 @@
|
||||
<string name="failed_to_create_user_title">Erreur lors de la création du profil !</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">Vous avez déjà un profil de chat avec ce même nom affiché. Veuillez choisir un autre nom.</string>
|
||||
<string name="failed_to_create_user_duplicate_title">Nom d\'affichage en double !</string>
|
||||
<string name="v4_4_french_interface">Interface en français</string>
|
||||
<string name="v4_5_transport_isolation_descr">Par profil de chat (par défaut) ou par connexion (BETA).</string>
|
||||
<string name="v4_5_italian_interface">Interface en italien</string>
|
||||
<string name="v4_5_message_draft">Brouillon de message</string>
|
||||
<string name="v4_5_reduced_battery_usage_descr">Plus d\'améliorations à venir !</string>
|
||||
<string name="v4_5_multiple_chat_profiles">Différents profils de chat</string>
|
||||
<string name="v4_5_message_draft_descr">Conserver le brouillon du dernier message, avec les pièces jointes.</string>
|
||||
<string name="v4_5_reduced_battery_usage">Réduction de la consommation de batterie</string>
|
||||
<string name="v4_5_private_filenames">Noms de fichiers privés</string>
|
||||
<string name="v4_5_italian_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string>
|
||||
<string name="v4_4_french_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string>
|
||||
<string name="v4_5_private_filenames_descr">Pour préserver le fuseau horaire, les fichiers image/voix utilisent le système UTC.</string>
|
||||
<string name="v4_5_transport_isolation">Isolation du transport</string>
|
||||
<string name="v4_5_multiple_chat_profiles_descr">Différents noms, avatars et mode d\'isolation de transport.</string>
|
||||
<string name="moderated_description">modéré</string>
|
||||
</resources>
|
||||
@@ -97,7 +97,7 @@
|
||||
<string name="invite_to_group_button">समूह में आमंत्रित करें</string>
|
||||
<string name="message_deletion_prohibited_in_chat">इस समूह में अपरिवर्तनीय संदेश हटाना प्रतिबंधित है।</string>
|
||||
<string name="italic">तिरछा</string>
|
||||
<string name="join_group_button">जोड़ना</string>
|
||||
<string name="join_group_button">प्रवेश लेना</string>
|
||||
<string name="join_group_incognito_button">गुप्त में शामिल हों</string>
|
||||
<string name="joining_group">समूह में शामिल होना</string>
|
||||
<string name="join_group_question">समूह में शामिल हों\?</string>
|
||||
@@ -107,7 +107,7 @@
|
||||
<string name="leave_group_question">समूह छोड़ दें</string>
|
||||
<string name="rcv_group_event_member_left">बाएं</string>
|
||||
<string name="group_member_status_left">बाएं</string>
|
||||
<string name="theme_light">रोशनी</string>
|
||||
<string name="theme_light">प्रकाश</string>
|
||||
<string name="info_row_local_name">स्थानीय नाम</string>
|
||||
<string name="users_delete_data_only">केवल स्थानीय प्रोफ़ाइल डेटा</string>
|
||||
<string name="auth_log_in_using_credential">अपने क्रेडेंशियल का उपयोग करके लॉग इन करें</string>
|
||||
@@ -121,7 +121,7 @@
|
||||
<string name="network_status">नेटवर्क की स्थिति</string>
|
||||
<string name="notification_new_contact_request">नया संपर्क अनुरोध</string>
|
||||
<string name="delete_files_and_media_all">सभी फाइलों को मिटा दें</string>
|
||||
<string name="delete_archive">संग्रह हटाएं</string>
|
||||
<string name="delete_archive">संग्रह हटा देना</string>
|
||||
<string name="new_database_archive">नया डेटाबेस संग्रह</string>
|
||||
<string name="new_member_role">नए सदस्य की भूमिका</string>
|
||||
<string name="settings_notifications_mode_title">अधिसूचना सेवा</string>
|
||||
@@ -133,7 +133,7 @@
|
||||
<string name="settings_notification_preview_title">अधिसूचना पूर्वावलोकन</string>
|
||||
<string name="notifications">सूचनाएं</string>
|
||||
<string name="full_deletion">सभी के लिए हटाएं</string>
|
||||
<string name="delete_chat_archive_question">चैट संग्रह मिटाएं\?</string>
|
||||
<string name="delete_chat_archive_question">लिखचीत संग्रह हटा दे\?</string>
|
||||
<string name="delete_chat_profile_question">चैट प्रोफ़ाइल हटाएं\?</string>
|
||||
<string name="users_delete_question">चैट प्रोफ़ाइल हटाएं\?</string>
|
||||
<string name="users_delete_profile_for">के लिए चैट प्रोफ़ाइल हटाएं</string>
|
||||
@@ -144,4 +144,40 @@
|
||||
<string name="delete_image">छवि हटाएं</string>
|
||||
<string name="button_delete_group">समूह हटाएं</string>
|
||||
<string name="for_me_only">मेरे लिए हटाएं</string>
|
||||
</resources>
|
||||
<string name="hide_verb">छिपाना</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">आप और आपका संपर्क दोनों भेजे गए संदेशों को अपरिवर्तनीय रूप से हटा सकते हैं।</string>
|
||||
<string name="message_deletion_prohibited">इस चैट में अपरिवर्तनीय संदेश हटाना प्रतिबंधित है।</string>
|
||||
<string name="chat_with_the_founder">प्रश्न और विचार भेजें</string>
|
||||
<string name="send_us_an_email">हमें ईमेल भेजें</string>
|
||||
<string name="display_name">प्रदर्शित होने वाला नाम</string>
|
||||
<string name="confirm_verb">पुष्टि करना</string>
|
||||
<string name="you_accepted_connection">आपने कनेक्शन स्वीकार किया</string>
|
||||
<string name="contribute">योगदान देना</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">आप और आपका संपर्क दोनों गायब होने वाले संदेश भेज सकते हैं।</string>
|
||||
<string name="allow_to_send_disappearing">गायब होने वाले संदेश भेजने की अनुमति दें।</string>
|
||||
<string name="prohibit_sending_disappearing">गायब होने वाले संदेश भेजने पर रोक लगाएं।</string>
|
||||
<string name="how_to_use_simplex_chat">इसका उपयोग कैसे करना है</string>
|
||||
<string name="group_member_status_group_deleted">समूह हटाया गया</string>
|
||||
<string name="delete_message_cannot_be_undone_warning">संदेश हटा दिया जाएगा - इसे पूर्ववत नहीं किया जा सकता!</string>
|
||||
<string name="message_delivery_error_title">संदेश वितरण त्रुटि</string>
|
||||
<string name="group_display_name_field">समूह प्रदर्शन नाम:</string>
|
||||
<string name="group_full_name_field">समूह का पूरा नाम:</string>
|
||||
<string name="group_invitation_expired">समूह आमंत्रण समाप्त हो गया</string>
|
||||
<string name="v4_3_irreversible_message_deletion_desc">आपके संपर्क पूर्ण संदेश को हटाने की अनुमति दे सकते हैं।</string>
|
||||
<string name="new_in_version">%s में नया</string>
|
||||
<string name="icon_descr_group_inactive">समूह निष्क्रिय</string>
|
||||
<string name="delete_group_menu_action">मिटाना</string>
|
||||
<string name="delete_contact_menu_action">मिटाना</string>
|
||||
<string name="create_your_profile">अपना प्रोफ़ाइल बनाए</string>
|
||||
<string name="set_contact_name">संपर्क नाम सेट करें</string>
|
||||
<string name="icon_descr_email">ईमेल</string>
|
||||
<string name="callstate_received_answer">जवाब मिला…</string>
|
||||
<string name="use_chat">चैट का प्रयोग करें</string>
|
||||
<string name="error_with_info">गलती: %s</string>
|
||||
<string name="delete_messages_after">संदेशों को बाद में हटाएं</string>
|
||||
<string name="image_descr">छवि</string>
|
||||
<string name="icon_descr_server_status_error">गलती</string>
|
||||
<string name="restore_database_alert_confirm">वापस लौटाना</string>
|
||||
<string name="a_plus_b">ए + बी</string>
|
||||
<string name="incognito_random_profile">आपका यादृच्छिक प्रोफ़ाइल</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -613,7 +613,7 @@
|
||||
<string name="your_contact_address">Il tuo indirizzo di contatto</string>
|
||||
<string name="smp_servers_your_server">Il tuo server</string>
|
||||
<string name="smp_servers_your_server_address">L\'indirizzo del tuo server</string>
|
||||
<string name="your_simplex_contact_address">Il tuo indirizzo di contatto di <xliff:g id="appName">SimpleX</xliff:g>.</string>
|
||||
<string name="your_simplex_contact_address">Il tuo indirizzo di contatto di <xliff:g id="appName">SimpleX</xliff:g></string>
|
||||
<string name="network_disable_socks_info">Se confermi, i server di messaggistica saranno in grado di vedere il tuo indirizzo IP e il tuo fornitore, a quali server ti stai connettendo.</string>
|
||||
<string name="install_simplex_chat_for_terminal">Installa <xliff:g id="appNameFull">SimpleX Chat</xliff:g> per terminale</string>
|
||||
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Assicurati che gli indirizzi dei server WebRTC ICE siano nel formato corretto, uno per riga e non doppi.</string>
|
||||
@@ -742,7 +742,6 @@
|
||||
<string name="settings_section_title_support">SUPPORTA SIMPLEX CHAT</string>
|
||||
<string name="settings_section_title_themes">TEMI</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">Questa azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile.</string>
|
||||
<string name="transfer_images_faster">Trasferisci immagini più velocemente</string>
|
||||
<string name="settings_section_title_you">TU</string>
|
||||
<string name="your_chat_database">Il tuo database della chat</string>
|
||||
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Il tuo attuale database di chat verrà ELIMINATO e SOSTITUITO con quello importato.
|
||||
@@ -967,4 +966,5 @@
|
||||
<string name="v4_5_transport_isolation">Isolamento del trasporto</string>
|
||||
<string name="v4_5_private_filenames_descr">Per proteggere il fuso orario, i file immagine/vocali usano UTC.</string>
|
||||
<string name="v4_5_multiple_chat_profiles_descr">Nomi e avatar diversi, isolamento del trasporto.</string>
|
||||
<string name="moderated_description">moderato</string>
|
||||
</resources>
|
||||
@@ -24,4 +24,941 @@
|
||||
<string name="smp_servers_add">サーバを追加…</string>
|
||||
<string name="network_enable_socks_info">SOCKSプロキシ(ポート9050)経由で接続しますか?(※設定する前にプロキシ起動が必要※)</string>
|
||||
<string name="users_delete_all_chats_deleted">全チャットとメッセージが削除されます(※元に戻せません※)!</string>
|
||||
</resources>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">送信相手からの音声メッセージを許可する。</string>
|
||||
<string name="both_you_and_your_contact_can_send_voice">あなたと連絡相手が音声メッセージを送信できます。</string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><b>電池省エネに良い</b>:バックグラウンド機能で10分毎に新着メッセージを確認します。通話と緊急メッセージを見逃す可能性があります。</string>
|
||||
<string name="icon_descr_audio_off">音声オフ</string>
|
||||
<string name="attach">添付する</string>
|
||||
<string name="app_version_code">アプリ・ビルド番号: %s</string>
|
||||
<string name="all_your_contacts_will_remain_connected">あなたの連絡先が繋がったまま継続します。</string>
|
||||
<string name="accept_requests">リクエストを承諾</string>
|
||||
<string name="accept_automatically">自動的に</string>
|
||||
<string name="icon_descr_audio_on">音声オン</string>
|
||||
<string name="integrity_msg_bad_hash">メッセージのハッシュ値問題</string>
|
||||
<string name="integrity_msg_bad_id">メッセージIDの問題</string>
|
||||
<string name="allow_verb">許可</string>
|
||||
<string name="allow_voice_messages_question">音声メッセージを許可しますか?</string>
|
||||
<string name="back">戻る</string>
|
||||
<string name="appearance_settings">見た目</string>
|
||||
<string name="app_version_title">アプリのバージョン</string>
|
||||
<string name="app_version_name">アプリのバージョン: v%s</string>
|
||||
<string name="network_session_mode_user_description"><b>アプリ内の各チャットプロフィールに、</b>.連絡先毎にそれぞれのTCP接続(とSOCKS資格情報)が使われます。</string>
|
||||
<string name="network_session_mode_entity_description"><b>各連絡先とグループに、</b>それぞれのTCP接続(とSOCKS資格情報)が使われます。
|
||||
\n<b>※注意※</b> 接続が多かったら、電池とデータの使用量が増えて、切断する可能性もあります。</string>
|
||||
<string name="bold">太文字</string>
|
||||
<string name="icon_descr_audio_call">音声通話</string>
|
||||
<string name="settings_audio_video_calls">音声とビデオ通話</string>
|
||||
<string name="impossible_to_recover_passphrase"><b>※注意※</b>:喪失したら、パスフレーズの回復・変更ができません。</string>
|
||||
<string name="all_group_members_will_remain_connected">グループ全員の接続が継続します。</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">送信相手が消えるメッセージを送るのを許可する。</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">送信相手が永久メッセージ削除するのを許可する。</string>
|
||||
<string name="allow_voice_messages_only_if">送信相手も音声メッセージを許可する時のみに許可する。</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">あなたと連絡相手が消えるメッセージを送信できます。</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">連絡先を自動的に承諾</string>
|
||||
<string name="chat_preferences_always">常に</string>
|
||||
<string name="notifications_mode_service">常にオン</string>
|
||||
<string name="clear_chat_warning">全てのメッセージが削除されます(※注意:元に戻せません!※)。削除されるのは片方あなたのメッセージのみ</string>
|
||||
<string name="allow_disappearing_messages_only_if">送信相手も消えるメッセージ機能を許可する時のみに許可する。</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">送信相手も永久メッセージ削除を許可する時のみに許可する。</string>
|
||||
<string name="allow_to_delete_messages">送信済みメッセージの永久削除を許可</string>
|
||||
<string name="allow_to_send_disappearing">消えるメッセージの送信を許可</string>
|
||||
<string name="allow_direct_messages">メンバーへのダイレクトメッセージを許可</string>
|
||||
<string name="allow_to_send_voice">音声メッセージの送信を許可</string>
|
||||
<string name="notifications_mode_off_desc">アクティブの時のみに通知が出ます。バックグラウンド通知サービスは起動されません。</string>
|
||||
<string name="keychain_is_storing_securely">Androidキーストアはパスフレーズの保管に使われます。通知機能に必要です。</string>
|
||||
<string name="keychain_allows_to_receive_ntfs">再起動時とパスフレーズ変更時にAndroidキーストアがパスフレーズの保管に使われます。通知機能に必要です。</string>
|
||||
<string name="answer_call">通話に応答</string>
|
||||
<string name="settings_section_title_icon">アプリのアイコン</string>
|
||||
<string name="full_backup">アプリデータのバックアップ</string>
|
||||
<string name="incognito_random_profile_from_contact_description">このリンクの送信元にランダムなプロフィール(ダミー)が送られます。</string>
|
||||
<string name="incognito_random_profile_description">連絡先にランダムなプロフィール(ダミー)が送られます。</string>
|
||||
<string name="audio_call_no_encryption">音声通話 (エンドツーエンド暗号化なし)</string>
|
||||
<string name="icon_descr_asked_to_receive">画像受信を依頼しました。</string>
|
||||
<string name="auth_unavailable">認証不可能</string>
|
||||
<string name="auto_accept_images">画像を自動的に受信</string>
|
||||
<string name="notifications_mode_service_desc">バックグラウンド機能が常にオンで、メッセージが到着次第に通知が出ます。</string>
|
||||
<string name="add_new_contact_to_create_one_time_QR_code"><b>新しい連絡先を追加</b>:使い捨てのQRコードを発行</string>
|
||||
<string name="turning_off_service_and_periodic">電池省エネをオンに、バックグラウンド機能と定期的な受信依頼をオフにします。設定メニューにて変更できます。</string>
|
||||
<string name="onboarding_notifications_mode_off_desc"><b>電池消費が最少</b>:アプリがアクティブ時のみに通知が出ます。</string>
|
||||
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>設定メニューにてオフにできます。</b> アプリがアクティブ時に通知が出ます。</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">あなたと連絡相手が送信済みメッセージを永久削除できます。</string>
|
||||
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>QRコードを読み込み</b>:連絡相手のQRコードをスキャンすると繋がります。</string>
|
||||
<string name="chat_archive_section">チャットのアーカイブ</string>
|
||||
<string name="delete_chat_archive_question">チャットのアーカイブを削除しますか?</string>
|
||||
<string name="join_group_incognito_button">シークレットモードで参加</string>
|
||||
<string name="group_member_status_intro_invitation">接続待ち (招待)</string>
|
||||
<string name="group_member_status_accepted">接続待ち (承諾済み)</string>
|
||||
<string name="group_member_status_creator">作成者</string>
|
||||
<string name="no_contacts_selected">連絡先が選択されてません</string>
|
||||
<string name="delete_link_question">リンクを削除しますか?</string>
|
||||
<string name="section_title_for_console">コンソール</string>
|
||||
<string name="info_row_local_name">ローカルネーム</string>
|
||||
<string name="member_info_section_title_member">メンバー</string>
|
||||
<string name="network_options_reset_to_defaults">既定に戻す</string>
|
||||
<string name="network_option_ping_count">PING回数</string>
|
||||
<string name="users_delete_profile_for">チャットのプロフィールを削除</string>
|
||||
<string name="reset_color">既定色に戻す</string>
|
||||
<string name="group_preferences">グループの設定</string>
|
||||
<string name="feature_off">オフ</string>
|
||||
<string name="prohibit_sending_voice_messages">音声メッセージを使用禁止にする。</string>
|
||||
<string name="only_you_can_send_voice">音声メッセージを送れるのはあなただけです。</string>
|
||||
<string name="delete_after">次の期間が経ったら削除:</string>
|
||||
<string name="ttl_sec">%d 秒</string>
|
||||
<string name="ttl_m">%d分</string>
|
||||
<string name="v4_2_group_links">グループのリンク</string>
|
||||
<string name="thousand_abbreviation">k</string>
|
||||
<string name="connect_via_link_verb">接続</string>
|
||||
<string name="server_connected">接続中</string>
|
||||
<string name="server_error">エラー</string>
|
||||
<string name="server_connecting">接続待ち</string>
|
||||
<string name="invalid_data">無効なデータ</string>
|
||||
<string name="invalid_chat">無効なチャット</string>
|
||||
<string name="live">ライブ (リアルタイム)</string>
|
||||
<string name="marked_deleted_description">削除済みとマークされました。</string>
|
||||
<string name="receiving_files_not_yet_supported">ファイルの受信機能はまだ対応されてません。</string>
|
||||
<string name="display_name_invited_to_connect">招待済み</string>
|
||||
<string name="failed_to_parse_chat_title">チャット読み込みに失敗</string>
|
||||
<string name="failed_to_parse_chats_title">チャット読み込みに失敗</string>
|
||||
<string name="contact_developers">アプリを更新し、開発者にご連絡ください。</string>
|
||||
<string name="service_notifications">即時通知!</string>
|
||||
<string name="service_notifications_disabled">即時通知が無効になってます!</string>
|
||||
<string name="enter_passphrase_notification_title">暗証フレーズが必要</string>
|
||||
<string name="notification_preview_mode_hidden">プライベート</string>
|
||||
<string name="notification_preview_mode_contact">連絡先の名前</string>
|
||||
<string name="notification_preview_somebody">連絡先が非表示:</string>
|
||||
<string name="auth_open_chat_console">チャットのコンソールを開く</string>
|
||||
<string name="delete_verb">削除する</string>
|
||||
<string name="file_saved">ファイルを保存しました</string>
|
||||
<string name="delete_contact_question">連絡先を削除しますか?</string>
|
||||
<string name="connect_via_link_or_qr">リンク・QRコード経由で繋がる</string>
|
||||
<string name="mark_code_verified">検証済みにマーク</string>
|
||||
<string name="how_to">使い方</string>
|
||||
<string name="network_use_onion_hosts_required">必須</string>
|
||||
<string name="incoming_video_call">ビデオ通話着信</string>
|
||||
<string name="paste_the_link_you_received">頂いたリンクを貼り付ける</string>
|
||||
<string name="icon_descr_hang_up">通話を切る</string>
|
||||
<string name="messages_section_title">メッセージ</string>
|
||||
<string name="rcv_group_event_invited_via_your_group_link">グループリンク経由で招待された</string>
|
||||
<string name="message_deletion_prohibited">このチャットではメッセージの完全削除が使用禁止です。</string>
|
||||
<string name="incognito_info_allows">一つのチャットプロフィールで複数の匿名な接続を立ち上げ、それぞれのデータを別々に共通を防ぐことができます。</string>
|
||||
<string name="onboarding_notifications_mode_subtitle">後でも設定で変えられます。</string>
|
||||
<string name="error_changing_address">アドレス変更にエラー発生</string>
|
||||
<string name="error_creating_link_for_group">グループリンク発行にエラー発生</string>
|
||||
<string name="error_changing_role">役割変更にエラー発生</string>
|
||||
<string name="error_exporting_chat_database">チャットデータベースのエキスポートにエラー発生</string>
|
||||
<string name="error_saving_smp_servers">SMPサーバ保存にエラー発生</string>
|
||||
<string name="error_saving_ICE_servers">ICEサーバ保存にエラー発生</string>
|
||||
<string name="error_setting_network_config">ネットワーク設定の更新にエラー発生</string>
|
||||
<string name="icon_descr_file">ファイル</string>
|
||||
<string name="simplex_link_mode_full">フルリンク</string>
|
||||
<string name="group_full_name_field">グループのフルネーム:</string>
|
||||
<string name="group_invitation_expired">グループ招待が期限切れ</string>
|
||||
<string name="icon_descr_group_inactive">非アクティブなグループ</string>
|
||||
<string name="group_members_can_send_voice">グループのメンバーが音声メッセージを送信できます。</string>
|
||||
<string name="group_members_can_delete">グループのメンバーがメッセージを完全削除することができます。</string>
|
||||
<string name="group_profile_is_stored_on_members_devices">グループのプロフィールはサーバではなく、メンバーの端末に保存されます。</string>
|
||||
<string name="snd_group_event_group_profile_updated">グループのプロフィールが更新されました。</string>
|
||||
<string name="notification_display_mode_hidden_desc">連絡先とメッセージ内容をプライベートにする。</string>
|
||||
<string name="icon_descr_instant_notifications">即時通知</string>
|
||||
<string name="ensure_smp_server_address_are_correct_format_and_unique">SMPサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。</string>
|
||||
<string name="ensure_ICE_server_address_are_correct_format_and_unique">WebRTC ICEサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。</string>
|
||||
<string name="many_people_asked_how_can_it_deliver">よく聞かれるのは、 <i>if <xliff:g id="appName">SimpleX</xliff:g> にユーザIDがなければ、メッセージをどうやって届けるのでしょうかと。</i></string>
|
||||
<string name="how_simplex_works"><xliff:g id="appName">SimpleX</xliff:g> の仕様</string>
|
||||
<string name="icon_descr_call_progress">通話中</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><b>電池消費がより高い</b>!非アクティブ時でもバックグラウンドのサービスが常に稼働します(着信次第に通知がすぐに出ます)。</string>
|
||||
<string name="callstatus_calling">発信中</string>
|
||||
<string name="callstatus_ended">通話終了 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
|
||||
<string name="icon_descr_call_ended">通話が終了しました。</string>
|
||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">直接会えない時は、 <b>ビデオ通話中にQRコードを見せてもらうか</b>、招待リンクを送ってもらえば相手に繋がります。</string>
|
||||
<string name="member_will_be_removed_from_group_cannot_be_undone">メンバーをグループから除名する (※元に戻せません※)!</string>
|
||||
<string name="message_delivery_error_title">メッセージ送信エラー</string>
|
||||
<string name="call_on_lock_screen">通話をロック画面に表示</string>
|
||||
<string name="icon_descr_cancel_link_preview">リンクのプレビューを中止</string>
|
||||
<string name="icon_descr_cancel_live_message">ライブメッセージを中止</string>
|
||||
<string name="change_member_role_question">グループの役割を変えますか?</string>
|
||||
<string name="cannot_receive_file">ファイル受信ができません。</string>
|
||||
<string name="invite_prohibited">連絡先を招待できません!</string>
|
||||
<string name="change_verb">変更</string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">直接会えない時は、 <b>ビデオ通話にてQRコードを見せるか</b>、招待リンクを送って、相手に繋がります。</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_completed">あなたのアドレスを変えました。</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing">アドレスを変更しています…</string>
|
||||
<string name="chat_database_section">チャットのデータベース</string>
|
||||
<string name="chat_is_stopped_indication">チャットが停止してます。</string>
|
||||
<string name="network_disable_socks_info">承諾すると、メッセージのサーバがIPアドレス、ISP、接続サーバを特定できます。</string>
|
||||
<string name="chat_preferences">チャット設定</string>
|
||||
<string name="clear_chat_button">消す</string>
|
||||
<string name="icon_descr_close_button">閉じるボタン</string>
|
||||
<string name="clear_verification">検証を消す</string>
|
||||
<string name="image_saved">画像をギャラリーに保存しました。</string>
|
||||
<string name="choose_file">ファイルを選ぶ</string>
|
||||
<string name="clear_chat_menu_action">消す</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">連絡先がオンラインになったら受信されます。しばらくお待ちください。</string>
|
||||
<string name="v4_4_verify_connection_security_desc">連絡先とセキュリティコードを確認</string>
|
||||
<string name="install_simplex_chat_for_terminal">ターミナル版の <xliff:g id="appNameFull">SimpleX Chat</xliff:g> をインストール</string>
|
||||
<string name="v4_3_improved_server_configuration">サーバ設定の向上</string>
|
||||
<string name="v4_3_improved_privacy_and_security">プライバシーとセキュリティ強化</string>
|
||||
<string name="settings_section_title_incognito">シークレットモード</string>
|
||||
<string name="group_unsupported_incognito_main_profile_sent">ここではシークレットモードが無効です。メインのプロフィールがグループのメンバーに送られます。</string>
|
||||
<string name="new_in_version">%s バージョンアップで新しい</string>
|
||||
<string name="new_passphrase">新しい暗証フレーズ</string>
|
||||
<string name="chat_item_ttl_none">一度も</string>
|
||||
<string name="notification_preview_new_message">新しいメッセージ</string>
|
||||
<string name="network_use_onion_hosts_no">いいえ</string>
|
||||
<string name="notifications">通知</string>
|
||||
<string name="chat_preferences_off">オフ</string>
|
||||
<string name="callstate_connecting">接続待ち…</string>
|
||||
<string name="notification_contact_connected">接続中</string>
|
||||
<string name="contact_connection_pending">接続待ち…</string>
|
||||
<string name="display_name_connection_established">接続済み</string>
|
||||
<string name="connect_via_link">リンク経由で繋がる。</string>
|
||||
<string name="connection_error">接続エラー</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">接続にオニオンのホストが必要となります。</string>
|
||||
<string name="group_member_status_introduced">接続待ち (紹介済み)</string>
|
||||
<string name="connection_error_auth">接続エラー (AUTH)</string>
|
||||
<string name="connection_timeout">接続タイムアウト</string>
|
||||
<string name="connection_request_sent">接続リクエストを送信しました!</string>
|
||||
<string name="connection_local_display_name">接続 <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
|
||||
<string name="connect_via_contact_link">連絡先リンク経由で繋がりますか?</string>
|
||||
<string name="connect_via_group_link">グループリンク経由で繋がりますか?</string>
|
||||
<string name="connect_via_invitation_link">招待リンク経由で繋がりますか?</string>
|
||||
<string name="status_contact_has_e2e_encryption">連絡先はエンドツーエンド暗号化があります。</string>
|
||||
<string name="description_via_group_link_incognito">グループリンク経由でシークレットモード</string>
|
||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">連絡先と全メッセージが削除されます (※元に戻せません※)!</string>
|
||||
<string name="contact_preferences">連絡先の設定</string>
|
||||
<string name="status_contact_has_no_e2e_encryption">連絡先はエンドツーエンド暗号化がありません。</string>
|
||||
<string name="alert_title_contact_connection_pending">連絡先がまだ繋がってません!</string>
|
||||
<string name="contact_requests">連絡先のリクエスト</string>
|
||||
<string name="icon_descr_context">追加情報アイコン</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">オニオンのホストが利用可能時に使われます。</string>
|
||||
<string name="network_use_onion_hosts_no_desc">オニオンのホストが使われません。</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">オニオンのホストが利用可能時に使われます。</string>
|
||||
<string name="images_limit_desc">画像を1回で最大10枚を送信できます。</string>
|
||||
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages"><b>2層エンドツーエンド暗号化</b>で送信されたプロフィール、連絡先、グループ、メッセージは、クライント端末にしか保存されません。</string>
|
||||
<string name="only_group_owners_can_change_prefs">グループ設定を変えられるのはグループのオーナーだけです。</string>
|
||||
<string name="only_group_owners_can_enable_voice">音声メッセージを利用可能に設定できるのはグループのオーナーだけです。</string>
|
||||
<string name="create_profile">プロフィールを作成する</string>
|
||||
<string name="only_you_can_delete_messages">メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。</string>
|
||||
<string name="create_your_profile">プロフィールを作成する</string>
|
||||
<string name="only_your_contact_can_delete">メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。</string>
|
||||
<string name="open_chat">チャットを開く</string>
|
||||
<string name="only_your_contact_can_send_voice">音声メッセージを送れるのはあなたの連絡相手だけです。</string>
|
||||
<string name="database_encryption_will_be_updated">データベース暗号化の暗号フレーズが更新され、キーストア (暗証キー保管庫)に保存されます。</string>
|
||||
<string name="database_error">データベースエラー</string>
|
||||
<string name="set_password_to_export_desc">データベースはランダムな暗証フレーズで暗号化済みです。エキスポートする前に更新してください。</string>
|
||||
<string name="passphrase_is_different">データベース暗証フレーズはキーストア (暗証キー保管庫) に保存された暗証フレーズと異なります。</string>
|
||||
<string name="ttl_d">%d日</string>
|
||||
<string name="ttl_day">%d 日</string>
|
||||
<string name="delete_group_menu_action">削除</string>
|
||||
<string name="incoming_audio_call">音声通話着信</string>
|
||||
<string name="button_delete_contact">連絡先を削除</string>
|
||||
<string name="open_simplex_chat_to_accept_call">通話を受けるには <xliff:g id="appNameFull">SimpleX Chat</xliff:g> を開きます。</string>
|
||||
<string name="deleted_description">削除完了</string>
|
||||
<string name="delete_files_and_media_for_all_users">全チャットプロフィールのファイルを削除</string>
|
||||
<string name="full_deletion">全員分を削除</string>
|
||||
<string name="for_me_only">自分側で削除</string>
|
||||
<string name="delete_image">画像を削除</string>
|
||||
<string name="group_invitation_item_description">グループへの招待 <xliff:g id="group_name">%1$s</xliff:g></string>
|
||||
<string name="invalid_connection_link">無効な繋がりリンク</string>
|
||||
<string name="smp_servers_invalid_address">無効なサーバアドレス</string>
|
||||
<string name="invalid_message_format">無効なメッセージのフォーマット</string>
|
||||
<string name="simplex_link_mode_description">説明</string>
|
||||
<string name="alert_title_group_invitation_expired">招待が期限切れました!</string>
|
||||
<string name="smp_servers_delete_server">サーバを削除</string>
|
||||
<string name="auth_device_authentication_is_disabled_turning_off">端末認証がオフです。SimpleXロックを解除します。</string>
|
||||
<string name="direct_messages_are_prohibited_in_chat">このグループではメンバー間のダイレクトメッセージが使用禁止です。</string>
|
||||
<string name="disappearing_messages_are_prohibited">このグループでは消えるメッセージが使用禁止です。</string>
|
||||
<string name="ttl_min">%d 分</string>
|
||||
<string name="ttl_weeks">%d 週</string>
|
||||
<string name="network_option_enable_tcp_keep_alive">TCP keep-aliveを有効にする</string>
|
||||
<string name="icon_descr_email">メール</string>
|
||||
<string name="allow_accepting_calls_from_lock_screen">設定メニューでロック画面からの通話を有効にできます。</string>
|
||||
<string name="people_can_connect_only_via_links_you_share">あなたと繋がることができるのは、あなたからリンクを頂いた方のみです。</string>
|
||||
<string name="icon_descr_profile_image_placeholder">仮のプロフィール画像</string>
|
||||
<string name="image_descr_qr_code">QRコード</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">リンクが正しいかどうかご確認ください。または、連絡相手にもう一度リンクをお求めください。</string>
|
||||
<string name="network_error_desc"><xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> との接続を確認し、もう一度お試しください。</string>
|
||||
<string name="enter_correct_current_passphrase">現在の正しい暗証フレーズを入力してください。</string>
|
||||
<string name="smp_servers_preset_server">プレセットサーバ</string>
|
||||
<string name="smp_servers_preset_address">プレセットサーバのアドレス</string>
|
||||
<string name="display_name_connecting">接続待ち…</string>
|
||||
<string name="description_via_contact_address_link_incognito">連絡先リンク経由でシークレットモード</string>
|
||||
<string name="description_via_one_time_link_incognito">使い捨てリンク経由でシークレットモード</string>
|
||||
<string name="moderated_description">モデレーターによって介入済み</string>
|
||||
<string name="simplex_link_mode_browser_warning">ブラウザでリンクを開くと接続のプライバシーとセキュリティが下がる可能性があります。信頼されないSimpleXリンクは読み込まれません。</string>
|
||||
<string name="error_joining_group">グループ参加にエラー発生</string>
|
||||
<string name="error_sending_message">メッセージ送信にエラー発生</string>
|
||||
<string name="error_accepting_contact_request">連絡先リクエストの承諾にエラー発生</string>
|
||||
<string name="error_receiving_file">ファイル受信にエラー発生</string>
|
||||
<string name="error_deleting_contact">連絡先の削除にエラー発生</string>
|
||||
<string name="error_deleting_group">グループ削除にエラー発生</string>
|
||||
<string name="error_deleting_pending_contact_connection">接続待ちの連絡先削除にエラー発生</string>
|
||||
<string name="error_smp_test_certificate">サーバアドレスの証明証IDが正しくないかもしれません。</string>
|
||||
<string name="smp_server_test_connect">接続</string>
|
||||
<string name="error_deleting_user">ユーザのプロフィール削除にエラー発生</string>
|
||||
<string name="periodic_notifications">定期的な通知</string>
|
||||
<string name="periodic_notifications_disabled">定期的な通知が無効となってます!</string>
|
||||
<string name="auth_disable_simplex_lock">SimpleXロックを無効にする</string>
|
||||
<string name="auth_enable_simplex_lock">SimpleXロックを有効にする</string>
|
||||
<string name="auth_log_in_using_credential">ログイン情報でアクセス</string>
|
||||
<string name="auth_confirm_credential">アクセス情報を確認</string>
|
||||
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">端末認証が起動してません。起動したら、設定でSimpleXロックをオンにできます。</string>
|
||||
<string name="message_delivery_error_desc">恐らくこの連絡先があなたとの接続を削除されました。</string>
|
||||
<string name="for_everybody">全員用</string>
|
||||
<string name="error_saving_file">ファイル保存にエラー発生</string>
|
||||
<string name="icon_descr_server_status_connected">接続中</string>
|
||||
<string name="icon_descr_server_status_pending">確認待ち</string>
|
||||
<string name="cancel_verb">中止</string>
|
||||
<string name="add_contact">使い捨ての招待リンク</string>
|
||||
<string name="icon_descr_record_voice_message">音声メッセージを録音</string>
|
||||
<string name="from_gallery_button">ギャラリーから</string>
|
||||
<string name="delete_contact_menu_action">削除</string>
|
||||
<string name="icon_descr_help">ヘルプ</string>
|
||||
<string name="invalid_contact_link">無効なリンク!</string>
|
||||
<string name="invalid_QR_code">無効なQRコード</string>
|
||||
<string name="icon_descr_more_button">つづき</string>
|
||||
<string name="paste_connection_link_below_to_connect">連絡相手から頂いたリンクを以下の入力欄に貼り付けて繋がります。</string>
|
||||
<string name="incorrect_code">誤ったセキュリティコード!</string>
|
||||
<string name="paste_button">貼り付け</string>
|
||||
<string name="chat_console">チャットのコンソール</string>
|
||||
<string name="configure_ICE_servers">ICEサーバを設定</string>
|
||||
<string name="how_to_use_your_servers">自分のサーバの使い方</string>
|
||||
<string name="enter_one_ICE_server_per_line">ICEサーバ (1行に1サーバ)</string>
|
||||
<string name="network_and_servers">ネットワークとサーバ</string>
|
||||
<string name="network_settings_title">ネットワーク設定</string>
|
||||
<string name="network_use_onion_hosts_no_desc_in_alert">オニオンのホストが使われません。</string>
|
||||
<string name="delete_address">アドレスを削除</string>
|
||||
<string name="exit_without_saving">保存せずに閉じる</string>
|
||||
<string name="display_name_cannot_contain_whitespace">表示の名前には空白が使用できません。</string>
|
||||
<string name="how_to_use_markdown">マークダウン (書式) の使い方</string>
|
||||
<string name="italic">イタリック文字</string>
|
||||
<string name="callstatus_rejected">拒否した通話</string>
|
||||
<string name="callstatus_error">通話エラー</string>
|
||||
<string name="callstatus_in_progress">通話中</string>
|
||||
<string name="callstate_connected">接続中</string>
|
||||
<string name="callstatus_connecting">発信中…</string>
|
||||
<string name="callstate_ended">終了</string>
|
||||
<string name="opensource_protocol_and_code_anybody_can_run_servers">プロトコル技術とコードはオープンソースで、どなたでもご自分のサーバを運用できます。</string>
|
||||
<string name="privacy_redefined">プライバシーの基準を新境地に</string>
|
||||
<string name="how_it_works">技術の説明</string>
|
||||
<string name="make_private_connection">プライベートな接続をする</string>
|
||||
<string name="onboarding_notifications_mode_title">プライベートな通知</string>
|
||||
<string name="read_more_in_github_with_link"><font color="#0088ff">GitHubリポジトリ</font>で詳細をご確認ください。</string>
|
||||
<string name="read_more_in_github">GitHubリポジトリで詳細をご確認ください。</string>
|
||||
<string name="encrypted_video_call">エンドツーエンド暗号化済みビデオ通話</string>
|
||||
<string name="no_call_on_lock_screen">無効にする</string>
|
||||
<string name="status_no_e2e_encryption">エンドツーエンド暗号化がありません</string>
|
||||
<string name="open_verb">開く</string>
|
||||
<string name="icon_descr_call_connecting">発信中</string>
|
||||
<string name="icon_descr_flip_camera">カメラ切り替え</string>
|
||||
<string name="icon_descr_call_missed">不在着信</string>
|
||||
<string name="icon_descr_call_rejected">拒否した通話</string>
|
||||
<string name="settings_section_title_develop">開発</string>
|
||||
<string name="integrity_msg_duplicate">重複メッセージ</string>
|
||||
<string name="settings_section_title_help">ヘルプ</string>
|
||||
<string name="protect_app_screen">アプリ画面を守る</string>
|
||||
<string name="settings_section_title_chats">チャット</string>
|
||||
<string name="settings_developer_tools">開発ツール</string>
|
||||
<string name="settings_experimental_features">β機能</string>
|
||||
<string name="settings_section_title_messages">メッセージ</string>
|
||||
<string name="settings_section_title_calls">通話</string>
|
||||
<string name="chat_is_running">チャットは稼働中</string>
|
||||
<string name="chat_is_stopped">チャットが停止してます。</string>
|
||||
<string name="database_passphrase">データベース暗証フレーズ</string>
|
||||
<string name="export_database">データベースをエキスポート</string>
|
||||
<string name="delete_database">データベースを削除</string>
|
||||
<string name="import_database">データベースを読み込みますか?</string>
|
||||
<string name="new_database_archive">新しいデータベースのアーカイブ</string>
|
||||
<string name="old_database_archive">過去のデータベースアーカイブ</string>
|
||||
<string name="delete_files_and_media_all">ファイルを全て削除</string>
|
||||
<string name="delete_files_and_media_question">ファイルとメディアを削除しますか?</string>
|
||||
<string name="total_files_count_and_size">%d ファイル|合計: %s</string>
|
||||
<string name="encrypt_database">暗号化する</string>
|
||||
<string name="remove_passphrase">削除</string>
|
||||
<string name="current_passphrase">現在の暗証フレーズ</string>
|
||||
<string name="encrypted_with_random_passphrase">データベースはランダムな暗証フレーズで暗号化済みで、変更可能です。</string>
|
||||
<string name="change_database_passphrase_question">データベースの暗証フレーズを更新しますか?</string>
|
||||
<string name="database_will_be_encrypted">データベースが暗号化されます。</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored">データベースが暗号化され、暗証フレーズがキーストア (暗証キー保管庫) にほぞんされます。</string>
|
||||
<string name="cannot_access_keychain">キーストア (暗証キーの保管庫) にアクセスできないため、データベースのパスワードが保存できません。</string>
|
||||
<string name="database_passphrase_will_be_updated">データベース暗号化の暗号フレーズが更新されます。</string>
|
||||
<string name="database_passphrase_is_required">チャットを開くにはデータベース暗証フレーズが必要です。</string>
|
||||
<string name="file_with_path">ファイル: %s</string>
|
||||
<string name="archive_created_on_ts">作成日時 \u0020<xliff:g id="archive_ts">%1$s</xliff:g></string>
|
||||
<string name="delete_archive">アーカイブを削除</string>
|
||||
<string name="join_group_button">参加</string>
|
||||
<string name="join_group_question">グループに参加しますか?</string>
|
||||
<string name="joining_group">グループに参加</string>
|
||||
<string name="leave_group_button">脱退</string>
|
||||
<string name="leave_group_question">グループを脱退しますか?</string>
|
||||
<string name="alert_message_group_invitation_expired">グループ招待が無効となり、送信元によって取り消されました。</string>
|
||||
<string name="alert_title_no_group">グループが見つかりません!</string>
|
||||
<string name="alert_title_cant_invite_contacts">連絡先を招待できません!</string>
|
||||
<string name="rcv_group_event_group_deleted">削除されたグループ</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_changing">アドレスを変更しています…</string>
|
||||
<string name="clear_contacts_selection_button">選択を取り消す</string>
|
||||
<string name="group_member_status_complete">完了</string>
|
||||
<string name="group_member_status_connected">接続中</string>
|
||||
<string name="group_member_status_announced">接続待ち (アナウンス済み)</string>
|
||||
<string name="icon_descr_contact_checked">連絡先が確認済み</string>
|
||||
<string name="delete_group_question">グループを削除をしますか?</string>
|
||||
<string name="delete_link">リンクを削除</string>
|
||||
<string name="group_member_status_group_deleted">グループ削除済み</string>
|
||||
<string name="delete_group_for_all_members_cannot_undo_warning">全員にとってグループが削除されます (※元に戻せません※)!</string>
|
||||
<string name="group_member_status_invited">招待済み</string>
|
||||
<string name="button_add_members">メンバーを招待する</string>
|
||||
<string name="group_member_status_left">脱退しました。</string>
|
||||
<string name="group_member_role_member">メンバー</string>
|
||||
<string name="group_member_status_removed">除名されました</string>
|
||||
<string name="button_remove_member">メンバーを除名する</string>
|
||||
<string name="change_role">役割変更</string>
|
||||
<string name="info_row_connection">接続</string>
|
||||
<string name="conn_level_desc_direct">ダイレクト</string>
|
||||
<string name="receiving_via">経由で受信</string>
|
||||
<string name="create_secret_group_title">シークレットグループを作成する</string>
|
||||
<string name="group_display_name_field">グループの表示名前</string>
|
||||
<string name="network_status">ネットワーク状況</string>
|
||||
<string name="network_option_ping_interval">PING間合い</string>
|
||||
<string name="network_option_protocol_timeout">プロトコル・タイムアウト</string>
|
||||
<string name="theme_dark">ダークモード</string>
|
||||
<string name="chat_preferences_contact_allows">連絡先の任意で</string>
|
||||
<string name="feature_enabled_for_contact">連絡先に有効</string>
|
||||
<string name="feature_enabled_for_you">あなたに有効</string>
|
||||
<string name="only_your_contact_can_send_disappearing">消えるメッセージを送れるのはあなたの連絡相手だけです。</string>
|
||||
<string name="group_members_can_send_dms">グループのメンバーがダイレクトメッセージを送信できます。</string>
|
||||
<string name="message_deletion_prohibited_in_chat">このグループではメッセージの完全削除が使用禁止です。</string>
|
||||
<string name="ttl_days">%d 日</string>
|
||||
<string name="ttl_month">%d 月</string>
|
||||
<string name="ttl_w">%d週</string>
|
||||
<string name="ttl_week">%d 週</string>
|
||||
<string name="v4_4_live_messages_desc">あなたが入力しながら、送信先が更新に気づきます。</string>
|
||||
<string name="v4_5_italian_interface">イタリア語UI</string>
|
||||
<string name="contact_already_exists">連絡先が既に存在します。</string>
|
||||
<string name="error_creating_address">アドレス作成にエラー発生</string>
|
||||
<string name="error_deleting_contact_request">連絡先リクエスト削除にエラー発生</string>
|
||||
<string name="hide_notification">プライベートにする</string>
|
||||
<string name="settings_notifications_mode_title">通知サービス</string>
|
||||
<string name="notifications_mode_periodic_desc">10分毎に新しいメッセージを1分間確認する。</string>
|
||||
<string name="icon_descr_edited">編集済み</string>
|
||||
<string name="icon_descr_cancel_image_preview">画像のプレビューを中止</string>
|
||||
<string name="chat_with_developers">開発者とチャット</string>
|
||||
<string name="image_decoding_exception_title">デコードエラー</string>
|
||||
<string name="image_descr">画像</string>
|
||||
<string name="icon_descr_server_status_disconnected">切断されました。</string>
|
||||
<string name="icon_descr_server_status_error">エラー</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="toast_permission_denied">許可がありません!</string>
|
||||
<string name="clear_verb">消す</string>
|
||||
<string name="image_descr_link_preview">リンクプレビュー画像</string>
|
||||
<string name="image_descr_profile_image">プロフィール画像</string>
|
||||
<string name="markdown_in_messages">メッセージのマークダウン (書式編集)</string>
|
||||
<string name="smp_servers_check_address">サーバのアドレスを確認してから再度試してください。</string>
|
||||
<string name="contribute">貢献する</string>
|
||||
<string name="rate_the_app">アプリを評価</string>
|
||||
<string name="network_session_mode_user">チャットのプロフィール</string>
|
||||
<string name="network_session_mode_entity">接続</string>
|
||||
<string name="core_version">コアのバージョン: v%s</string>
|
||||
<string name="edit_image">画像を編集</string>
|
||||
<string name="callstatus_missed">不在着信</string>
|
||||
<string name="connect_calls_via_relay">リレー経由で繋がる。</string>
|
||||
<string name="status_e2e_encrypted">エンドツーエンド暗号化済み</string>
|
||||
<string name="chat_database_deleted">チャットのデータベースが削除されました。</string>
|
||||
<string name="delete_messages_after">次の期間が経ったら、メッセージを削除:</string>
|
||||
<string name="enable_automatic_deletion_question">自動メッセージ削除を有効にしますか?</string>
|
||||
<string name="remove_passphrase_from_keychain">キーストア (暗証キー保管庫) を削除しますか?</string>
|
||||
<string name="database_encrypted">データベースは暗号化済み!</string>
|
||||
<string name="error_encrypting_database">データベース暗号化ににエラー発生</string>
|
||||
<string name="confirm_new_passphrase">新しい暗証フレーズを確認…</string>
|
||||
<string name="encrypt_database_question">データベースを暗号化しますか?</string>
|
||||
<string name="store_passphrase_securely_without_recover">暗証フレーズを失くさないように保管してください。失くすとチャットにアクセスできなくなります。</string>
|
||||
<string name="enter_correct_passphrase">正しい暗証フレーズを入力</string>
|
||||
<string name="enter_passphrase">暗証フレーズを入力</string>
|
||||
<string name="restore_passphrase_not_found_desc">キーストア (暗証キー保管庫) に暗証フレーズが見つかりません。入力してください。アプリのデータをバックアップのツールで復元させると暗証フレーズが見つかりかねます。そうではない場合は開発者にご連絡ください。</string>
|
||||
<string name="button_create_group_link">リンクを発行する</string>
|
||||
<string name="info_row_group">グループ</string>
|
||||
<string name="error_saving_group_profile">グループのプロフィール保存にエラー発生</string>
|
||||
<string name="feature_enabled">有効</string>
|
||||
<string name="group_members_can_send_disappearing">グループのメンバーが消えるメッセージを送信できます。</string>
|
||||
<string name="ttl_mth">%d月</string>
|
||||
<string name="v4_3_irreversible_message_deletion">メッセージの完全削除</string>
|
||||
<string name="v4_3_voice_messages_desc">最大40秒、即受信。</string>
|
||||
<string name="v4_3_improved_privacy_and_security_desc">起動中アプリリストに出ないようにする。</string>
|
||||
<string name="v4_4_live_messages">ライブメッセージ</string>
|
||||
<string name="remove_member_confirmation">除名</string>
|
||||
<string name="rcv_group_event_member_deleted">除名されました: <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<string name="reply_verb">返信する</string>
|
||||
<string name="failed_to_create_user_duplicate_title">表示の名前が重複してます!</string>
|
||||
<string name="failed_to_create_user_title">プロフィール作成にエラー発生</string>
|
||||
<string name="failed_to_active_user_title">プロフィール切り替えにエラー発生</string>
|
||||
<string name="error_adding_members">メンバー追加にエラー発生</string>
|
||||
<string name="smp_server_test_create_queue">サーバの待ち行列を作成する</string>
|
||||
<string name="smp_server_test_delete_queue">待ち行列を削除</string>
|
||||
<string name="smp_server_test_disconnect">切断</string>
|
||||
<string name="turn_off_battery_optimization">利用するには次の画面にてSimpleXに対する <b>電気省電力の設定をオフ</b> for <xliff:g id="appName">SimpleX</xliff:g> してください。そうしないと通知が無効になります。</string>
|
||||
<string name="database_initialization_error_title">データベースを起動できません。</string>
|
||||
<string name="settings_notification_preview_title">通知のプレビュー</string>
|
||||
<string name="simplex_service_notification_text">メッセージ受信中…</string>
|
||||
<string name="notification_preview_mode_message">メッセージ内容</string>
|
||||
<string name="notification_new_contact_request">新しい繋がりのリクエスト</string>
|
||||
<string name="copy_verb">コピー</string>
|
||||
<string name="delete_message__question">メッセージを削除しますか?</string>
|
||||
<string name="edit_verb">編集する</string>
|
||||
<string name="hide_verb">プライベートにする</string>
|
||||
<string name="delete_message_cannot_be_undone_warning">メッセージが削除されます (※元に戻せません※)!</string>
|
||||
<string name="delete_message_mark_deleted_warning">メッセージが削除対象となります。宛先にはメッセージの解読ができます。</string>
|
||||
<string name="icon_descr_cancel_file_preview">ファイルのプレビューを中止</string>
|
||||
<string name="group_connection_pending">接続待ち…</string>
|
||||
<string name="group_preview_join_as">%s として参加</string>
|
||||
<string name="icon_descr_image_snd_complete">画像送信済み</string>
|
||||
<string name="maximum_supported_file_size">現在、ファイルサイズの最上限は <xliff:g id="maxFileSize">%1$s</xliff:g>。</string>
|
||||
<string name="large_file">大型ファイル!</string>
|
||||
<string name="file_not_found">ファイルが見つかりません</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">連絡先がオンラインになったら受信されます。しばらくお待ちください。</string>
|
||||
<string name="live_message">ライブメッセージ!</string>
|
||||
<string name="ask_your_contact_to_enable_voice">音声メッセージを有効にするように連絡相手に要求してください。</string>
|
||||
<string name="confirm_verb">確認</string>
|
||||
<string name="no_details">詳細がありません</string>
|
||||
<string name="reset_verb">戻す</string>
|
||||
<string name="copied">クリップボードにコピー完了</string>
|
||||
<string name="share_one_time_link">使い捨てリンクを発行する</string>
|
||||
<string name="create_group">シークレットグループを作成する</string>
|
||||
<string name="only_stored_on_members_devices">(グループのメンバーのみに保存されてます)</string>
|
||||
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 デスクトップ: <b>「QRコードを読み取る」</b>経由でアプリに表示されるQRコードを読み取る</string>
|
||||
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser"><xliff:g id="appName">SimpleX Chat</xliff:g> の招待リンクをもらったら、ブラウザで開けます:</string>
|
||||
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 携帯: <b>「アプリで開く」</b>をタップし、 アプリ内で<b>「接続」</b>をタップする。</string>
|
||||
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">拒否しても、相手には知らされません。</string>
|
||||
<string name="reject_contact_button">拒否</string>
|
||||
<string name="clear_chat_question">チャットを消しますか?</string>
|
||||
<string name="mark_read">既読にする</string>
|
||||
<string name="mark_unread">未読にする</string>
|
||||
<string name="mute_chat">ミュート</string>
|
||||
<string name="delete_pending_connection__question">接続待ちの繋がりを削除しますか?</string>
|
||||
<string name="connect_button">接続</string>
|
||||
<string name="create_one_time_link">使い捨てリンクを発行する</string>
|
||||
<string name="one_time_link">使い捨ての招待リンク</string>
|
||||
<string name="database_passphrase_and_export">データベース暗証フレーズとエキスポート</string>
|
||||
<string name="how_to_use_simplex_chat">使い方</string>
|
||||
<string name="markdown_help">マークダウン (書式編集) ガイド</string>
|
||||
<string name="smp_servers_enter_manually">サーバを手動で入力</string>
|
||||
<string name="network_use_onion_hosts_required_desc">接続にオニオンのホストが必要となります。</string>
|
||||
<string name="core_build_timestamp">コアのビルド@: %s</string>
|
||||
<string name="create_address">アドレスを作成</string>
|
||||
<string name="delete_address__question">アドレスを削除しますか?</string>
|
||||
<string name="display_name__field">表示の名前:</string>
|
||||
<string name="full_name__field">フルネーム:</string>
|
||||
<string name="create_profile_button">作成</string>
|
||||
<string name="display_name">表示の名前</string>
|
||||
<string name="full_name_optional__prompt">フルネーム (任意):</string>
|
||||
<string name="colored">色付き</string>
|
||||
<string name="callstate_received_answer">応答</string>
|
||||
<string name="decentralized">分散型</string>
|
||||
<string name="immune_to_spam_and_abuse">スパムや悪質送信を完全防止</string>
|
||||
<string name="onboarding_notifications_mode_service">即時</string>
|
||||
<string name="onboarding_notifications_mode_periodic">定期的</string>
|
||||
<string name="call_already_ended">通話は既に終了してます!</string>
|
||||
<string name="encrypted_audio_call">エンドツーエンド暗号化済みの音声通話</string>
|
||||
<string name="ignore">無視</string>
|
||||
<string name="reject">拒否</string>
|
||||
<string name="call_connection_peer_to_peer">P2P</string>
|
||||
<string name="privacy_and_security">プライバシーとセキュリティ</string>
|
||||
<string name="alert_text_skipped_messages_it_can_happen_when">次の場合に起こりうる:
|
||||
\n① メッセージが受信せずにサーバに溜まって30日が経つ場合
|
||||
\n② 連絡相手からメッセージが送信中に、ご利用の受信サーバが更新・再起動する場合
|
||||
\n③ 接続が不安定の場合
|
||||
\nサーバの更新情報をご希望でしたら、設定にて開発者とお繋ぎください。
|
||||
\nメッセージの喪失を防ぐために、サーバ冗長性を向上してまいります。</string>
|
||||
<string name="settings_section_title_device">端末</string>
|
||||
<string name="no_received_app_files">送受信済みのファイルがありません</string>
|
||||
<string name="delete_messages">メッセージを削除</string>
|
||||
<string name="chat_archive_header">チャットのアーカイブ</string>
|
||||
<string name="rcv_group_event_member_connected">接続中</string>
|
||||
<string name="rcv_group_event_user_deleted">あなたを除名しました。</string>
|
||||
<string name="group_link">グループのリンク</string>
|
||||
<string name="info_row_database_id">データベースID</string>
|
||||
<string name="error_deleting_link_for_group">グループリンク削除にエラー発生</string>
|
||||
<string name="users_delete_question">チャットのプロフィールを削除しますか?</string>
|
||||
<string name="users_delete_data_only">ローカルなプロフィールデータのみ</string>
|
||||
<string name="users_delete_with_connections">プロフィールとサーバ接続</string>
|
||||
<string name="theme_light">ライトテーマ</string>
|
||||
<string name="chat_preferences_default">デフォルト (%s)</string>
|
||||
<string name="prohibit_sending_disappearing_messages">消えるメッセージを使用禁止にする。</string>
|
||||
<string name="contacts_can_mark_messages_for_deletion">連絡先はメッセージを削除対象とすることができます。あなたには閲覧可能です。</string>
|
||||
<string name="only_you_can_send_disappearing">消えるメッセージを送れるのはあなただけです。</string>
|
||||
<string name="prohibit_message_deletion">メッセージの完全削除を使用禁止にする。</string>
|
||||
<string name="prohibit_sending_voice">音声メッセージを使用禁止にする。</string>
|
||||
<string name="feature_cancelled_item">中止されました %s</string>
|
||||
<string name="v4_4_disappearing_messages">消えるメッセージ</string>
|
||||
<string name="v4_5_transport_isolation_descr">チャットのプロフィール (既存設定)、または接続 (β機能設定) による</string>
|
||||
<string name="v4_5_multiple_chat_profiles_descr">異なった名前、アバター、トランスポート隔離。</string>
|
||||
<string name="v4_4_french_interface">フランス語UI</string>
|
||||
<string name="v4_5_message_draft">メッセージの下書き</string>
|
||||
<string name="v4_5_reduced_battery_usage_descr">まだまだ改善してまいります!</string>
|
||||
<string name="v4_5_multiple_chat_profiles">複数チャットのプロフィール</string>
|
||||
<string name="v4_5_message_draft_descr">添付を含めて、下書きを保存する。</string>
|
||||
<string name="v4_5_private_filenames">プライベートなファイル名</string>
|
||||
<string name="v4_5_reduced_battery_usage">電池使用量低減</string>
|
||||
<string name="error_removing_member">メンバー除名にエラー発生</string>
|
||||
<string name="conn_level_desc_indirect">関節 (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
|
||||
<string name="incognito">シークレットモード</string>
|
||||
<string name="incognito_info_protects">シークレットモードとは、メインのプロフィールとプロフィール画像を守るために、新しい連絡先を追加する時に、その連絡先に対してランダムなプロフィールが作成されるという対策です。</string>
|
||||
<string name="chat_preferences_no">いいえ</string>
|
||||
<string name="chat_preferences_on">オン</string>
|
||||
<string name="direct_messages">ダイレクトメッセージ</string>
|
||||
<string name="timed_messages">消えるメッセージ</string>
|
||||
<string name="disappearing_prohibited_in_this_chat">このチャットでは消えるメッセージが使用禁止です。</string>
|
||||
<string name="prohibit_direct_messages">メンバー間のダイレクトメッセージを使用禁止にする。</string>
|
||||
<string name="prohibit_sending_disappearing">消えるメッセージを使用禁止にする。</string>
|
||||
<string name="ttl_s">%d秒</string>
|
||||
<string name="ttl_months">%d 月</string>
|
||||
<string name="ttl_hour">%d 時</string>
|
||||
<string name="ttl_hours">%d 時</string>
|
||||
<string name="ttl_h">%d時</string>
|
||||
<string name="error_starting_chat">チャット開始にエラー発生</string>
|
||||
<string name="error_stopping_chat">チャット停止にエラー発生</string>
|
||||
<string name="import_database_question">チャットのデータベースを読み込みますか?</string>
|
||||
<string name="chat_database_imported">チャットのデータベースが読み込まれました。</string>
|
||||
<string name="error_deleting_database">チャットデータベース削除にエラー発生</string>
|
||||
<string name="error_importing_database">チャットデータベースの読み込みにエラー発生</string>
|
||||
<string name="import_database_confirmation">読み込む</string>
|
||||
<string name="restart_the_app_to_use_imported_chat_database">読み込んだデータベースを利用するにはアプリを再起動する必要があります。</string>
|
||||
<string name="delete_chat_profile_question">チャットのプロフィールを削除しますか?</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">再起動して新しいチャットプロフィールを作る。</string>
|
||||
<string name="files_and_media_section">ファイルとメディア</string>
|
||||
<string name="error_changing_message_deletion">設定変更にエラー発生</string>
|
||||
<string name="notifications_will_be_hidden">アプリが起動中のみに通知が出ます!</string>
|
||||
<string name="encrypted_database">暗号化済みデータベース</string>
|
||||
<string name="keychain_error">キーチェーンのエラー</string>
|
||||
<string name="store_passphrase_securely">暗証フレーズを失くさないように保管してください。失くすと変更できなくなります。</string>
|
||||
<string name="error_with_info">エラー: %s</string>
|
||||
<string name="restore_database_alert_desc">データベースのバックアップで復旧する際に前の暗証フレーズを入力してください。行われたら元に戻せません。</string>
|
||||
<string name="icon_descr_add_members">メンバーを招待する</string>
|
||||
<string name="rcv_group_event_member_left">脱退しました。</string>
|
||||
<string name="rcv_group_event_changed_member_role">%s の役割を %s に変えました。</string>
|
||||
<string name="rcv_group_event_changed_your_role">役割を %s に変えました。</string>
|
||||
<string name="rcv_group_event_member_added">招待された <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing_for_member">アドレスを変更いたします: %s</string>
|
||||
<string name="group_member_role_owner">オーナー</string>
|
||||
<string name="group_member_status_connecting">接続待ち</string>
|
||||
<string name="icon_descr_expand_role">役割の選択を拡大</string>
|
||||
<string name="invite_to_group_button">グループに招待する</string>
|
||||
<string name="new_member_role">新しいメンバー役割</string>
|
||||
<string name="no_contacts_to_add">追加できる連絡先がありません</string>
|
||||
<string name="button_delete_group">グループを削除</string>
|
||||
<string name="create_group_link">グループのリンクを発行する</string>
|
||||
<string name="button_edit_group_profile">グループのプロフィールを編集</string>
|
||||
<string name="delete_group_for_self_cannot_undo_warning">あなたにとってグループが削除されます (※元に戻せません※)!</string>
|
||||
<string name="button_leave_group">グループを脱退</string>
|
||||
<string name="database_restore_error">データベース復元エラー</string>
|
||||
<string name="rcv_group_event_updated_group_profile">グループプロフィールを更新しました</string>
|
||||
<string name="snd_group_event_user_left">脱退しました。</string>
|
||||
<string name="invite_prohibited_description">あなたのメインプロフィールで参加してるグループにシークレットモードのプロフィールで繋がってる連絡先を招待しようとしてます。</string>
|
||||
<string name="group_info_member_you">あなた: <xliff:g id="group_info_you">%1$s</xliff:g></string>
|
||||
<string name="role_in_group">役割</string>
|
||||
<string name="sending_via">経由で送信</string>
|
||||
<string name="theme_system">システム</string>
|
||||
<string name="incognito_info_share">連絡相手にシークレットモードのプロフィールを共有すると、その連絡相手に招待されたグループでも同じプロフィールが使われます。</string>
|
||||
<string name="theme">テーマ</string>
|
||||
<string name="voice_messages">音声メッセージ</string>
|
||||
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
|
||||
<string name="you_will_join_group">このリンクのグループに参加し、そのメンバーに繋がります。</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">この連絡先から受信するメッセージのサーバに既に接続してます。</string>
|
||||
<string name="sending_files_not_yet_supported">ファイル送信機能がまだ実装されてません</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">このコンタクトから受信するメッセージのサーバに接続しようとしてます。</string>
|
||||
<string name="unknown_message_format">不明なメッセージ形式</string>
|
||||
<string name="sender_you_pronoun">あなた</string>
|
||||
<string name="description_via_group_link">グループリンク経由</string>
|
||||
<string name="notification_preview_mode_contact_desc">連絡先のみ表示</string>
|
||||
<string name="auth_stop_chat">チャットを閉じる</string>
|
||||
<string name="icon_descr_received_msg_status_unread">未読</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">送信失敗</string>
|
||||
<string name="personal_welcome">ようこそ <xliff:g>%1$s</xliff:g>!</string>
|
||||
<string name="voice_message">音声メッセージ</string>
|
||||
<string name="view_security_code">セキュリティコードを確認</string>
|
||||
<string name="send_live_message">ライブメッセージを送信</string>
|
||||
<string name="scan_QR_code">QRコードを読み込む</string>
|
||||
<string name="to_connect_via_link_title">リンク経由で接続</string>
|
||||
<string name="security_code">セキュリティコード</string>
|
||||
<string name="is_verified">%s は認証済み</string>
|
||||
<string name="smp_servers">SMPサーバ</string>
|
||||
<string name="save_servers_button">保存</string>
|
||||
<string name="update_network_session_mode_question">トランスポート隔離モードを更新しますか?</string>
|
||||
<string name="save_preferences_question">この設定でよろしいですか?</string>
|
||||
<string name="icon_descr_video_off">ビデオオフ</string>
|
||||
<string name="call_connection_via_relay">リレー経由</string>
|
||||
<string name="icon_descr_video_on">ビデオオン</string>
|
||||
<string name="icon_descr_speaker_off">スピーカーオフ</string>
|
||||
<string name="your_chat_database">あなたのチャットデータベース</string>
|
||||
<string name="stop_chat_confirmation">停止</string>
|
||||
<string name="stop_chat_to_enable_database_actions">データベース操作をするにはチャットを閉じてからです。</string>
|
||||
<string name="simplex_link_contact">SimpleX連絡先アドレス</string>
|
||||
<string name="simplex_link_invitation">SimpleX使い捨て招待リンク</string>
|
||||
<string name="description_via_contact_address_link">連絡先アドレスリンク経由</string>
|
||||
<string name="description_via_one_time_link">使い捨てリンク経由</string>
|
||||
<string name="description_you_shared_one_time_link_incognito">シークレットモードで使い捨てリンクを送りました</string>
|
||||
<string name="simplex_link_group">SimpleXグループリンク</string>
|
||||
<string name="simplex_link_mode_browser">ブラウザ経由</string>
|
||||
<string name="sender_cancelled_file_transfer">ファイル送信が中止されました。</string>
|
||||
<string name="sender_may_have_deleted_the_connection_request">送信元が繋がりリクエストを削除したかもしれません。</string>
|
||||
<string name="error_smp_test_server_auth">このサーバで待ち行列を作るには認証が必要です。パスワードをご確認ください。</string>
|
||||
<string name="periodic_notifications_desc">アプリが定期的に新しいメッセージを受信します。一日の電池使用量が約3%で、プッシュ通知に頼らずに、あなたの端末のデータをサーバに送ることはありません。</string>
|
||||
<string name="la_notice_title_simplex_lock">SimpleXロック</string>
|
||||
<string name="enter_passphrase_notification_desc">通知を受けるには、データベースの暗証フレーズを入力してください。</string>
|
||||
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> サービス</string>
|
||||
<string name="auth_simplex_lock_turned_on">SimpleXロック:オン</string>
|
||||
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">起動時、または非アクティブ状態で30秒が経った後に戻ると、認証する必要となります。</string>
|
||||
<string name="share_verb">共有する</string>
|
||||
<string name="icon_descr_sent_msg_status_unauthorized_send">非認証の送信</string>
|
||||
<string name="this_text_is_available_in_settings">このテキストは設定にあります。</string>
|
||||
<string name="images_limit_title">画像数の上限を超えてます!</string>
|
||||
<string name="welcome">ようこそ!</string>
|
||||
<string name="group_preview_you_are_invited">グループ招待が届きました</string>
|
||||
<string name="your_chats">あなたのチャット</string>
|
||||
<string name="text_field_set_contact_placeholder">連絡先を設定…</string>
|
||||
<string name="waiting_for_file">ファイル待ち</string>
|
||||
<string name="switch_receiving_address_question">受信アドレスを変えますか?</string>
|
||||
<string name="send_verb">送信する</string>
|
||||
<string name="send_live_message_desc">ライブメッセージを送信 (入力しながら宛先の画面で更新される)</string>
|
||||
<string name="to_share_with_your_contact">(連絡先に共有)</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(クリップボードから読み込むか、貼り付ける)</string>
|
||||
<string name="thank_you_for_installing_simplex"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>をご利用いただきありがとうございます!</string>
|
||||
<string name="use_camera_button">カメラ起動</string>
|
||||
<string name="you_accepted_connection">繋がりを承認しました</string>
|
||||
<string name="you_invited_your_contact">連絡先に招待を送りました</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">承認ずみの接続がキャンセルされます!</string>
|
||||
<string name="contact_you_shared_link_with_wont_be_able_to_connect">あなたからリンクを受けた連絡先が接続できなくなります!</string>
|
||||
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g>アドレス</string>
|
||||
<string name="show_QR_code">QRコードを表示</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">このリンクは有効な接続リンクではありません!</string>
|
||||
<string name="this_QR_code_is_not_a_link">このQRコードはリンクではありません!</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">グループのホスト端末がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。</string>
|
||||
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">連絡相手がアプリからQRコードを読み込めます。</string>
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">連絡先がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。</string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">あなたのチャットプロフィールが
|
||||
\n連絡相手に送られます。</string>
|
||||
<string name="share_invitation_link">招待リンクを送る</string>
|
||||
<string name="your_profile_will_be_sent">あなたのチャットプロフィールが連絡相手に送られます。</string>
|
||||
<string name="scan_code">コードを読み込む</string>
|
||||
<string name="scan_code_from_contacts_app">連絡相手のアプリからセキュリティコードを読み込む</string>
|
||||
<string name="chat_lock">SimpleXロック</string>
|
||||
<string name="is_not_verified">%s は未認証</string>
|
||||
<string name="your_contact_address">あなたのチャットアドレス</string>
|
||||
<string name="your_settings">あなたの設定</string>
|
||||
<string name="smp_servers_test_server">テストサーバ</string>
|
||||
<string name="smp_servers_save">サーバを保存</string>
|
||||
<string name="smp_servers_test_failed">サーバテスト失敗!</string>
|
||||
<string name="smp_servers_use_server">サーバを使う</string>
|
||||
<string name="smp_servers_your_server">あなたのサーバ</string>
|
||||
<string name="smp_servers_your_server_address">あなたのサーバアドレス</string>
|
||||
<string name="smp_servers_per_user">現在のチャットプロフィールの新しい接続のサーバ</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">新しい接続に使う</string>
|
||||
<string name="saved_ICE_servers_will_be_removed">保存されたWebRTC ICEサーバが削除されます。</string>
|
||||
<string name="your_ICE_servers">あなたのICEサーバ</string>
|
||||
<string name="network_disable_socks">直接にインタネットに繋がりますか?</string>
|
||||
<string name="network_enable_socks">SOCKSプロキシを使いますか?</string>
|
||||
<string name="network_socks_toggle">SOCKSプロキシ (ポート9050) を使う</string>
|
||||
<string name="update_onion_hosts_settings_question">.onionのホスト設定を更新しますか?</string>
|
||||
<string name="network_use_onion_hosts">.onionホストを使う</string>
|
||||
<string name="network_use_onion_hosts_prefer">利用可能時に</string>
|
||||
<string name="network_session_mode_transport_isolation">トランスポート隔離</string>
|
||||
<string name="save_and_notify_contact">保存して、連絡先にに知らせる</string>
|
||||
<string name="your_current_profile">現在のプロフィール</string>
|
||||
<string name="save_and_notify_contacts">保存して、連絡先にに知らせる</string>
|
||||
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">あなたのプライバシーとセキュリティを守るメッセージとアプリのプラットフォーム</string>
|
||||
<string name="we_do_not_store_contacts_or_messages_on_servers">連絡先情報と届けたメッセージをサーバに保存することは一切ありません。</string>
|
||||
<string name="you_control_your_chat">あなたのチャットはあなたが決めます!</string>
|
||||
<string name="your_profile_is_stored_on_your_device">あなたのプロフィール、連絡先、送信したメッセージがご自分の端末に保存されます。</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">プロフィールは連絡先にしか共有されません。</string>
|
||||
<string name="you_can_use_markdown_to_format_messages__prompt">メッセージの書式をマークダウンで編集できます。</string>
|
||||
<string name="secret">シークレット</string>
|
||||
<string name="strikethrough">取り消し線</string>
|
||||
<string name="callstate_starting">接続中…</string>
|
||||
<string name="next_generation_of_private_messaging">次世代のプライバシー・メッセンジャー</string>
|
||||
<string name="you_control_servers_to_receive_your_contacts_to_send">あなたがメッセージの<b>受信</b>サーバを決められます。あなたの連絡先が同じく、自分に対する受信サーバを決められます。</string>
|
||||
<string name="icon_descr_video_call">ビデオ通話</string>
|
||||
<string name="onboarding_notifications_mode_off">アプリが稼働中に</string>
|
||||
<string name="webrtc_ice_servers">WebRTC ICEサーバ</string>
|
||||
<string name="your_ice_servers">あなたのICEサーバ</string>
|
||||
<string name="settings_section_title_settings">設定</string>
|
||||
<string name="alert_title_skipped_messages">飛ばしたメッセージ</string>
|
||||
<string name="settings_section_title_you">あなた</string>
|
||||
<string name="settings_section_title_themes">テーマ</string>
|
||||
<string name="run_chat_section">チャット起動</string>
|
||||
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">現在のチャットデータベースが読み込まれたデータベースに上書きされます。
|
||||
\n元に戻せません。プロフィール、連絡先、メッセージ、ファイルが置き換えられます。</string>
|
||||
<string name="chat_item_ttl_seconds">%s 秒</string>
|
||||
<string name="delete_files_and_media_desc">ファイルとメディアが全て削除されます (※元に戻せません※)。低解像度の画像が残ります。</string>
|
||||
<string name="enable_automatic_deletion_message">選択中の以前の送受信したメッセージが削除されます (※元に戻せません※)。数分かかります。</string>
|
||||
<string name="update_database">更新</string>
|
||||
<string name="database_is_not_encrypted">チャットデータベースが暗号化されてません。暗証フレーズを設定して保管してください。</string>
|
||||
<string name="restore_database">データベースを復元</string>
|
||||
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">アプリの設定・データベース経由で、またはアプリの再起動でチャットを始められます。</string>
|
||||
<string name="you_are_invited_to_group_join_to_connect_with_group_members">グループ招待が届きました。参加してグループのメンバーとお繋がりください。</string>
|
||||
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">グループに入りました。招待をくれたメンバーに接続してます。</string>
|
||||
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">このグループからのメッセージが届かなくなります。チャットの履歴が残ります。</string>
|
||||
<string name="alert_message_no_group">このグループはもう存在しません。</string>
|
||||
<string name="group_invitation_tap_to_join">タップして参加</string>
|
||||
<string name="group_invitation_tap_to_join_incognito">タップしてシークレットモードで参加</string>
|
||||
<string name="you_joined_this_group">グループに入りました。</string>
|
||||
<string name="you_rejected_group_invitation">グループの招待を拒否しました</string>
|
||||
<string name="you_sent_group_invitation">グループの招待を送りました</string>
|
||||
<string name="snd_group_event_changed_member_role">%sの役割を次に変えました:%s</string>
|
||||
<string name="button_send_direct_message">ダイレクトメッセージを送信</string>
|
||||
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g>連絡先が選択中</string>
|
||||
<string name="snd_group_event_member_deleted">除名しました: <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<string name="switch_verb">切り替える</string>
|
||||
<string name="member_role_will_be_changed_with_notification">役割が「%s」となります。グループの全員に通知が出ます。</string>
|
||||
<string name="conn_stats_section_title_servers">サーバ</string>
|
||||
<string name="member_role_will_be_changed_with_invitation">役割が「%s」となります。メンバーに新しい招待が届きます。</string>
|
||||
<string name="group_is_decentralized">グループは完全分散型で、メンバーしか内容を見れません。</string>
|
||||
<string name="network_options_save">保存</string>
|
||||
<string name="update_network_settings_question">ネットワーク設定を更新しますか?</string>
|
||||
<string name="updating_settings_will_reconnect_client_to_all_servers">設定を更新すると、全サーバにクライントの再接続が行われます。</string>
|
||||
<string name="your_chat_profiles_stored_locally">チャットプロフィールはローカルであなたの端末だけに保存されます。</string>
|
||||
<string name="save_color">色を保存</string>
|
||||
<string name="chat_preferences_you_allow">あなたが次を許可しています:</string>
|
||||
<string name="chat_preferences_yes">はい</string>
|
||||
<string name="set_group_preferences">グループ設定を行う</string>
|
||||
<string name="your_preferences">あなたの設定</string>
|
||||
<string name="voice_prohibited_in_this_chat">このチャットでは音声メッセージが使用禁止です。</string>
|
||||
<string name="voice_messages_are_prohibited">このグループでは音声メッセージが使用禁止です。</string>
|
||||
<string name="v4_2_security_assessment">セキュリティ評価</string>
|
||||
<string name="whats_new">新着情報</string>
|
||||
<string name="v4_2_security_assessment_desc">SimpleX ChatはTrail of Bitsによるセキュリティ監査を受けました。</string>
|
||||
<string name="v4_2_auto_accept_contact_requests_desc">任意的な歓迎メッセージで</string>
|
||||
<string name="v4_5_italian_interface_descr">ユーザーの皆様に感謝いたします!Weblateにて貢献できます!</string>
|
||||
<string name="v4_4_verify_connection_security">接続のセキュリティを確認</string>
|
||||
<string name="error_smp_test_failed_at_step">テストが次のステップで失敗しました:%s</string>
|
||||
<string name="ntf_channel_messages">SimpleX Chatメッセージ</string>
|
||||
<string name="ntf_channel_calls">SimpleX Chat通話</string>
|
||||
<string name="settings_notification_preview_mode_title">プレビューを表示</string>
|
||||
<string name="notifications_mode_periodic">定期的に起動</string>
|
||||
<string name="notifications_mode_off">アプリがアクティブ時に実行</string>
|
||||
<string name="icon_descr_sent_msg_status_sent">送信済み</string>
|
||||
<string name="you_have_no_chats">あなたはチャットがありません。</string>
|
||||
<string name="share_message">メッセージを送る…</string>
|
||||
<string name="share_file">ファイル共有…</string>
|
||||
<string name="voice_message_send_text">音声メッセージ…</string>
|
||||
<string name="voice_message_with_duration">音声メッセージ (<xliff:g id="duration">%1$s</xliff:g>)</string>
|
||||
<string name="icon_descr_send_message">メッセージを送信</string>
|
||||
<string name="icon_descr_settings">設定</string>
|
||||
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g>開発チーム</string>
|
||||
<string name="this_string_is_not_a_connection_link">このストリングは接続リンクではありません!</string>
|
||||
<string name="chat_with_the_founder">質問やアイデアを送る</string>
|
||||
<string name="star_on_github">GithubでStar</string>
|
||||
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">あなたのプロフィールはご自分の端末に保存され、あなたの連絡先のみに共有されます。
|
||||
\n
|
||||
\n<xliff:g id="appName">SimpleX</xliff:g>のサーバには開示されません。</string>
|
||||
<string name="your_calls">あなたの通話</string>
|
||||
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g>飛ばしたメッセージ</string>
|
||||
<string name="send_link_previews">リンクのプレビューを送信</string>
|
||||
<string name="set_password_to_export">暗証フレーズを設定してからエキスポート</string>
|
||||
<string name="stop_chat_question">チャットを閉じますか?</string>
|
||||
<string name="save_passphrase_in_keychain">暗証フレーズをキーストア (暗証キー保管庫) に保存</string>
|
||||
<string name="wrong_passphrase">データベースの暗証フレーズが違います</string>
|
||||
<string name="unknown_error">不明なエラー</string>
|
||||
<string name="save_passphrase_and_open_chat">暗証フレーズをを保存して、チャットを開始</string>
|
||||
<string name="unknown_database_error_with_info">不明なデータベースのエラー: %s</string>
|
||||
<string name="wrong_passphrase_title">暗証フレーズが違います!</string>
|
||||
<string name="you_are_invited_to_group">グループ招待が届きました</string>
|
||||
<string name="network_option_seconds_label">秒</string>
|
||||
<string name="network_option_tcp_connection_timeout">TCP接続タイムアウト</string>
|
||||
<string name="save_group_profile">保存グループのプロフィール</string>
|
||||
<string name="v4_3_irreversible_message_deletion_desc">連絡先がメッセージの完全削除を許可できます。</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。</string>
|
||||
<string name="smp_server_test_secure_queue">待ち行列セキュリティ確認</string>
|
||||
<string name="database_initialization_error_desc">データベースが正しく稼働してません。詳細はタップにて</string>
|
||||
<string name="notification_preview_mode_message_desc">連絡先とメッセージを表示</string>
|
||||
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">あなたのデータを守るために、SimpleXロックをオンにしてください。
|
||||
\nオンにするには、認証ステップが行われます。</string>
|
||||
<string name="la_notice_turn_on">オンにする</string>
|
||||
<string name="auth_unlock">ロック解除</string>
|
||||
<string name="save_verb">保存する</string>
|
||||
<string name="reveal_verb">開示する</string>
|
||||
<string name="tap_to_start_new_chat">タップして新しいチャットを始める</string>
|
||||
<string name="image_decoding_exception_desc">画像が解読できません。別のイメージで試すか、開発者に伝えてください。</string>
|
||||
<string name="icon_descr_waiting_for_image">画像待ち</string>
|
||||
<string name="waiting_for_image">画像待ち</string>
|
||||
<string name="contact_sent_large_file">向こうが最上限の大きさを超えるファイルを送ろうとしました (<xliff:g id="maxFileSize">%1$s</xliff:g>)。</string>
|
||||
<string name="voice_messages_prohibited">音声メッセージは使用禁止です!</string>
|
||||
<string name="add_contact_or_create_group">新しいチャットを始める</string>
|
||||
<string name="you_can_connect_to_simplex_chat_founder"><font color="#0088ff"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>の開発者と繋がれば、質問したり、速報を受けたりすることができます</font>。</string>
|
||||
<string name="to_start_a_new_chat_help_header">新しいチャットを始めるには</string>
|
||||
<string name="chat_help_tap_button">ボタンをタップ</string>
|
||||
<string name="unmute_chat">ミュート解除</string>
|
||||
<string name="set_contact_name">連絡先を設定</string>
|
||||
<string name="contact_wants_to_connect_with_you">はあなたと繋がりたいです!</string>
|
||||
<string name="you_can_also_connect_by_clicking_the_link">リンクをクリックすることでも接続できます。ブラウザが起動すれば <b>Open in mobile app (アプリで開く)</b>ボタンをクリックしてください。</string>
|
||||
<string name="your_chat_profiles">あなたのチャットプロフィール</string>
|
||||
<string name="smp_servers_scan_qr">サーバのQRコードを読み込む</string>
|
||||
<string name="smp_servers_test_some_failed">テストに失敗したサーバがあります:</string>
|
||||
<string name="use_simplex_chat_servers__question"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>サーバを使いますか?</string>
|
||||
<string name="using_simplex_chat_servers"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>を使っています。</string>
|
||||
<string name="share_link">リンクを送る</string>
|
||||
<string name="core_simplexmq_version">simplexmq: バージョン%s (%2s)</string>
|
||||
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">あなたと繋がるリンク、またはQRコードを共有できます。誰でも接続できます。後で削除しても、連絡先がそのままのこります。</string>
|
||||
<string name="section_title_welcome_message">歓迎メッセージ</string>
|
||||
<string name="callstate_waiting_for_answer">応答待ち…</string>
|
||||
<string name="callstate_waiting_for_confirmation">確認待ち…</string>
|
||||
<string name="first_platform_without_user_ids">世界初のユーザーIDのないプラットフォーム|設計も元からプライベート</string>
|
||||
<string name="use_chat">チャット</string>
|
||||
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g>は次の方法であなたと繋がりたいです:</string>
|
||||
<string name="video_call_no_encryption">ビデオ通話 (非エンドツーエンド暗号化)</string>
|
||||
<string name="show_call_on_lock_screen">表示</string>
|
||||
<string name="icon_descr_speaker_on">スピーカーオン</string>
|
||||
<string name="your_privacy">あなたのプライバシー</string>
|
||||
<string name="messages_section_description">この設定は現在のチャットプロフィールのメッセージに適応されます。</string>
|
||||
<string name="you_have_to_enter_passphrase_every_time">アプリ起動時に暗証フレーズを入力しなければなりません。端末に保存されてません。</string>
|
||||
<string name="database_backup_can_be_restored">データベースの暗証フレーズ変更が完了してません。</string>
|
||||
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">リンク、またはQRコードを共有できます。誰でもグループに参加できます。後で削除しても、グループのメンバーがそのままのこります。</string>
|
||||
<string name="network_options_revert">元に戻す</string>
|
||||
<string name="update_network_settings_confirmation">更新</string>
|
||||
<string name="accept_feature_set_1_day">1日に設定</string>
|
||||
<string name="v4_4_disappearing_messages_desc">一定時間が経ったら送信されたメッセージが削除されます。</string>
|
||||
<string name="v4_4_french_interface_descr">ユーザーの皆様に感謝いたします!Weblateにて貢献できます!</string>
|
||||
<string name="v4_5_private_filenames_descr">時間帯を漏らさないために、画像と音声ファイルはUTCを使います。</string>
|
||||
<string name="v4_5_transport_isolation">トランスポート隔離</string>
|
||||
<string name="restore_database_alert_confirm">復元</string>
|
||||
<string name="restore_database_alert_title">データベースを復元しますか?</string>
|
||||
<string name="save_and_notify_group_members">保存して、グループのメンバーにに知らせる</string>
|
||||
<string name="send_us_an_email">メールを送る</string>
|
||||
<string name="share_image">画像共有…</string>
|
||||
<string name="simplex_link_mode">SimpleXリンク</string>
|
||||
<string name="settings_section_title_support">SIMPLEX CHATを支援</string>
|
||||
<string name="smp_servers_test_servers">テストサーバ</string>
|
||||
<string name="switch_receiving_address_desc">開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。</string>
|
||||
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">あなたのプライバシーを守るために、このアプリはプッシュ通知の変わりに <b><xliff:g id="appName">SimpleX</xliff:g> バックグラウンド・サービス</b> を使ってます。一日の電池使用量は約3%です。</string>
|
||||
<string name="to_protect_privacy_simplex_has_ids_for_queues">あなたのプライバシーを守るために、他のアプリと違って、ユーザーIDの変わりに <xliff:g id="appName">SimpleX</xliff:g> メッセージ束毎にIDを配布し、各連絡先が別々と扱います。</string>
|
||||
<string name="group_main_profile_sent">あなたのチャットプロフィールが他のグループメンバーに送られます。</string>
|
||||
<string name="to_verify_compare">エンドツーエンド暗号化を確認するには、ご自分の端末と連絡先の端末のコードを比べます (スキャンします)。</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">このコンタクトから受信するメッセージのサーバに接続しようとしてます。(エラー: <xliff:g id="errorMsg">%1$s</xliff:g>)。</string>
|
||||
<string name="connection_error_auth_desc">使用済みリンク、または連絡先による接続の削除ではなければ、バッグの可能性があります。開発者にお伝えください。
|
||||
\n繋がるには、連絡先に新しくリンクを発行してもらって、電波が安定かどうかご確認ください。</string>
|
||||
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">接続を完了するには、連絡相手がオンラインになる必要があります。
|
||||
\nこの接続をキャンセルして、連絡先を削除をすることもできます (後でやり直すこともできます)。</string>
|
||||
<string name="verify_security_code">セキュリティコードを確認</string>
|
||||
<string name="simplex_link_connection"><xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g>経由</string>
|
||||
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g>ロゴ</string>
|
||||
<string name="you_need_to_allow_to_send_voice">音声メッセージを送るには、連絡相手からの音声メッセージを許可しなければなりません。</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">あなたの最新データベースを1つの端末にしか使わなければ、一部の連絡先からメッセージが届きかねます。</string>
|
||||
<string name="you_are_already_connected_to_vName_via_this_link">既に繋がってます: <xliff:g id="contactName" example="Alice">%1$s!</xliff:g></string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">シークレットモードのプロフィールでこのグループに参加しています。メインのプロフィールを守るために、招待することができません。</string>
|
||||
<string name="description_you_shared_one_time_link">使い捨てリンクを送りました</string>
|
||||
<string name="profile_will_be_sent_to_contact_sending_link">リンクを送ってくれた連絡先にあなたのプロフィールを送ります。</string>
|
||||
<string name="your_SMP_servers">あなたのSMPサーバ</string>
|
||||
<string name="your_simplex_contact_address">あなたの<xliff:g id="appName">SimpleX</xliff:g>アドレス</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">連絡先が繋がりリクエストを承認したら、接続されます。後でチェックするか、しばらくお待ちください。</string>
|
||||
<string name="switch_receiving_address">受信アドレスを変える</string>
|
||||
<string name="incognito_random_profile">あなたのランダム・プロフィール</string>
|
||||
<string name="incognito_info_find">シークレットモード接続のプロフィールを確認するには、チャットの上部の連絡先、またはグループ名をタップします。</string>
|
||||
<string name="v4_3_voice_messages">音声メッセージ</string>
|
||||
<string name="settings_section_title_socks">SOCKSプロキシ</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">データベースのエキスポート、読み込み、削除するにはチャットを閉じてからです。チャットを閉じると送受信ができなくなります。</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">あなたのプロフィール、連絡先、メッセージ、ファイルが完全削除されます (※元に戻せません※)。</string>
|
||||
<string name="update_database_passphrase">データベース暗証フレーズを更新</string>
|
||||
<string name="save_archive">アーカイブを保存</string>
|
||||
<string name="snd_group_event_changed_role_for_yourself">あなたが自分の役割を次に変えました:%s</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed">アドレスを変えました</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed_for_member">%sのアドレスを変えました</string>
|
||||
<string name="select_contacts">連絡先を選択</string>
|
||||
<string name="skip_inviting_button">今はメンバーを招待しません</string>
|
||||
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g>メンバー</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -2,27 +2,27 @@
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="callstatus_error">oproepfout</string>
|
||||
<string name="callstatus_calling">bellen…</string>
|
||||
<string name="call_on_lock_screen">Oproepen op het vergrendelingsscherm:</string>
|
||||
<string name="callstatus_in_progress">gesprek gaande</string>
|
||||
<string name="icon_descr_call_progress">Gesprek gaande</string>
|
||||
<string name="call_on_lock_screen">Oproepen op vergrendelscherm:</string>
|
||||
<string name="callstatus_in_progress">oproep bezig</string>
|
||||
<string name="icon_descr_call_progress">Gesprek bezig</string>
|
||||
<string name="settings_section_title_calls">OPROEPEN</string>
|
||||
<string name="cancel_verb">Annuleren</string>
|
||||
<string name="icon_descr_cancel_file_preview">Bestandsvoorbeeld annuleren</string>
|
||||
<string name="icon_descr_cancel_image_preview">Afbeeldingsvoorbeeld annuleren</string>
|
||||
<string name="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">veranderen van adres…</string>
|
||||
<string name="notifications_mode_service">altijd aan</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing">veranderend adres…</string>
|
||||
<string name="notifications_mode_service">Altijd aan</string>
|
||||
<string name="icon_descr_asked_to_receive">Gevraagd om de afbeelding te ontvangen</string>
|
||||
<string name="change_verb">Wijzig</string>
|
||||
<string name="network_settings">Geavanceerde netwerkinstellingen</string>
|
||||
<string name="change_verb">Wijziging</string>
|
||||
<string name="network_settings">Geavanceerde netwerk instellingen</string>
|
||||
<string name="network_enable_socks_info">Toegang tot de servers via SOCKS proxy op poort 9050\? De proxy moet worden gestart voordat u deze optie inschakelt.</string>
|
||||
<string name="alert_title_cant_invite_contacts">Kan contacten niet uitnodigen</string>
|
||||
<string name="allow_direct_messages">Directe berichten sturen naar leden toestaan.</string>
|
||||
<string name="allow_to_delete_messages">Onherroepelijk wissen van verzonden berichten toestaan.</string>
|
||||
<string name="allow_to_send_voice">Sta toe om spraakberichten te versturen.</string>
|
||||
<string name="alert_title_cant_invite_contacts">Kan geen contacten uitnodigen!</string>
|
||||
<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="clear_chat_menu_action">Clear</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>
|
||||
<string name="chat_console">Chat console</string>
|
||||
@@ -35,104 +35,104 @@
|
||||
<string name="color_primary">Accent</string>
|
||||
<string name="accept">Accepteer</string>
|
||||
<string name="accept_connection_request__question">Verbindingsverzoek accepteren\?</string>
|
||||
<string name="callstatus_accepted">aanvaarde oproep</string>
|
||||
<string name="callstatus_accepted">geaccepteerde oproep</string>
|
||||
<string name="accept_contact_incognito_button">Accepteer incognito</string>
|
||||
<string name="smp_servers_preset_add">Vooraf ingestelde servers toevoegen</string>
|
||||
<string name="users_add">Profiel toevoegen</string>
|
||||
<string name="smp_servers_add">Server toevoegen…</string>
|
||||
<string name="smp_servers_add_to_another_device">Toevoegen aan een ander apparaat</string>
|
||||
<string name="v4_2_group_links_desc">Admins kunnen de links naar groepen aanmaken.</string>
|
||||
<string name="v4_2_group_links_desc">Beheerders kunnen de uitnodiging links naar groepen aanmaken.</string>
|
||||
<string name="v4_3_improved_server_configuration_desc">Servers toevoegen door QR-codes te scannen.</string>
|
||||
<string name="group_member_role_admin">admin</string>
|
||||
<string name="group_member_role_admin">Beheerder</string>
|
||||
<string name="all_group_members_will_remain_connected">Alle groepsleden blijven verbonden.</string>
|
||||
<string name="allow_verb">"Sta toe."</string>
|
||||
<string name="allow_verb">Toestaan</string>
|
||||
<string name="chat_item_ttl_day">1 dag</string>
|
||||
<string name="accept_feature">Accepteer</string>
|
||||
<string name="incognito_random_profile_from_contact_description">Een willekeurig profiel wordt gestuurd naar het contact waarvan u deze link heeft ontvangen.</string>
|
||||
<string name="network_session_mode_entity_description">Er wordt een aparte TCP-verbinding (en SOCKS-credential) gebruikt <b>voor elk contact en groepslid</b>.
|
||||
\n<b>Let op</b>: als u veel verbindingen hebt, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen mislukken.</string>
|
||||
<string name="icon_descr_audio_call">audio-oproep</string>
|
||||
<string name="incognito_random_profile_from_contact_description">Er wordt een willekeurig profiel verzonden naar het contact van wie je deze link hebt ontvangen</string>
|
||||
<string name="network_session_mode_entity_description">Er wordt een afzonderlijke TCP-verbinding (en SOCKS-referentie) gebruikt <b> voor elk contact en groepslid </b>.
|
||||
\n<b>Let op</b>: als u veel verbindingen heeft, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen uitvallen.</string>
|
||||
<string name="icon_descr_audio_call">audio oproep</string>
|
||||
<string name="icon_descr_audio_on">Geluid aan</string>
|
||||
<string name="settings_audio_video_calls">Audio- en videogesprekken</string>
|
||||
<string name="settings_audio_video_calls">Audio en video gesprekken</string>
|
||||
<string name="auto_accept_images">Afbeeldingen automatisch accepteren</string>
|
||||
<string name="auth_unavailable">Verificatie niet beschikbaar</string>
|
||||
<string name="back">Terug</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">Automatisch contactverzoeken accepteren</string>
|
||||
<string name="bold">vet</string>
|
||||
<string name="incognito_random_profile_description">Een willekeurig profiel wordt naar uw contactpersoon gestuurd</string>
|
||||
<string name="attach">Voeg toe</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">Laat onomkeerbare verwijdering van berichten alleen toe als uw contactpersoon u dat toestaat.</string>
|
||||
<string name="allow_to_send_disappearing">Laat verdwijnende berichten toe.</string>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">Laat uw contacten spraakberichten versturen.</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">Contactverzoeken 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>
|
||||
<string name="allow_irreversible_message_deletion_only_if">Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contactpersoon dit toestaat.</string>
|
||||
<string name="allow_to_send_disappearing">Sta toe om verdwijnende berichten te verzenden.</string>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">Sta toe dat uw contacten spraak berichten verzenden.</string>
|
||||
<string name="all_your_contacts_will_remain_connected">Al uw contacten blijven verbonden.</string>
|
||||
<string name="allow_voice_messages_question">Spraakberichten toestaan\?</string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><b>Goed voor de batterij</b>. De achtergronddienst controleert elke 10 minuten op nieuwe berichten. U kunt oproepen en dringende berichten missen.</string>
|
||||
<string name="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="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Scan QR code</b>: om verbinding te maken met uw contactpersoon die de QR code aan u toont.</string>
|
||||
<string name="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="call_already_ended">De oproep is al beëindigd!</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">About <xliff:g id="appNameFull">SimpleX Chat</xliff:g></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 chats en berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!</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">Laat verdwijnende berichten alleen toe als uw contact dat toestaat.</string>
|
||||
<string name="allow_voice_messages_only_if">Sta spraakberichten alleen toe als uw contactpersoon ze toestaat.</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">Laat uw contacten onherroepelijk verzonden berichten verwijderen.</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">Laat uw contacten verdwijnende berichten sturen.</string>
|
||||
<string name="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>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">Sta toe dat uw contacten verdwijnende berichten verzenden.</string>
|
||||
<string name="chat_preferences_always">altijd</string>
|
||||
<string name="icon_descr_audio_off">Geluid uit</string>
|
||||
<string name="full_backup">App gegevens back-up</string>
|
||||
<string name="answer_call">Beantwoord de oproep</string>
|
||||
<string name="keychain_is_storing_securely">Android Keystore wordt gebruikt om passphrase veilig op te slaan - het laat notificatiedienst werken.</string>
|
||||
<string name="keychain_allows_to_receive_ntfs">Android Keystore wordt gebruikt om de passphrase veilig op te slaan nadat u de app opnieuw hebt opgestart of de passphrase hebt gewijzigd - hiermee kunt u meldingen ontvangen.</string>
|
||||
<string name="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="app_version_code">App build: %s</string>
|
||||
<string name="notifications_mode_off_desc">App kan alleen meldingen ontvangen als hij draait, er wordt geen achtergronddienst gestart.</string>
|
||||
<string name="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="network_session_mode_user_description">Er wordt een aparte TCP-verbinding (en SOCKS-credential) gebruikt <b>voor elk chatprofiel dat u in de app hebt</b>.</string>
|
||||
<string name="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">De achtergronddienst draait altijd - meldingen worden getoond zodra de berichten beschikbaar zijn.</string>
|
||||
<string name="add_new_contact_to_create_one_time_QR_code"><b>Nieuw contact toevoegen</b>: om uw eenmalige QR-code voor uw contactpersoon aan te maken.</string>
|
||||
<string name="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 en schakelt de achtergronddienst en periodieke verzoeken om nieuwe berichten uit. U kunt ze opnieuw inschakelen via de instellingen.</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 getoond terwijl de app draait.</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">Zowel u als uw contactpersoon kunnen verzonden berichten onherroepelijk verwijderen.</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">Zowel jij als je contact kunnen verdwijnende berichten sturen.</string>
|
||||
<string name="both_you_and_your_contact_can_send_voice">Zowel u als uw contactpersoon kunnen spraakberichten versturen.</string>
|
||||
<string name="impossible_to_recover_passphrase"><b>Let op</b>: u kunt de wachtwoordzin NIET herstellen of wijzigen als u deze verliest.</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><b>Verbruikt meer batterij</b>! Achtergronddienst draait altijd - meldingen worden getoond zodra de berichten beschikbaar zijn.</string>
|
||||
<string name="icon_descr_cancel_link_preview">link preview annuleren</string>
|
||||
<string name="callstatus_ended">Oproep beëindigd <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
|
||||
<string name="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="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>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing_for_member">adres wijzigen voor %s…</string>
|
||||
<string name="invite_prohibited">Kan contact niet uitnodigen!</string>
|
||||
<string name="cannot_access_keychain">Kan geen toegang krijgen tot Keystore om database wachtwoord op te slaan</string>
|
||||
<string name="cannot_receive_file">Kan het bestand niet ontvangen</string>
|
||||
<string name="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">veranderen van adres…</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_completed">veranderd adres voor jou</string>
|
||||
<string name="rcv_group_event_changed_member_role">rol van %s veranderd in %s</string>
|
||||
<string name="change_member_role_question">Groepsrol wijzigen\?</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_changing">veranderend adres…</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>
|
||||
<string name="chat_is_stopped">Chat is gestopt</string>
|
||||
<string name="notifications_mode_periodic_desc">Controleert nieuwe berichten elke 10 minuten gedurende maximaal 1 minuut</string>
|
||||
<string name="rcv_group_event_changed_your_role">uw rol veranderd in %s</string>
|
||||
<string name="chat_archive_header">Chat archief</string>
|
||||
<string name="change_database_passphrase_question">Database wachtwoord wijzigen\?</string>
|
||||
<string name="rcv_group_event_changed_your_role">je rol gewijzigd in %s</string>
|
||||
<string name="chat_archive_header">Gesprek archief</string>
|
||||
<string name="change_database_passphrase_question">Wachtwoord database wijzigen\?</string>
|
||||
<string name="chat_is_stopped_indication">Chat is gestopt</string>
|
||||
<string name="chat_preferences">Chat voorkeuren</string>
|
||||
<string name="chat_preferences">Gesprek voorkeuren</string>
|
||||
<string name="network_session_mode_user">Chat profiel</string>
|
||||
<string name="settings_section_title_chats">CHATS</string>
|
||||
<string name="chat_with_developers">Chat met de ontwikkelaars</string>
|
||||
<string name="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="clear_verb">Clear</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>
|
||||
<string name="notification_contact_connected">Verbonden</string>
|
||||
@@ -144,15 +144,15 @@
|
||||
<string name="display_name_connection_established">verbinding gemaakt</string>
|
||||
<string name="connection_request_sent">Verbindingsverzoek verzonden!</string>
|
||||
<string name="connection_timeout">Time-out verbinding</string>
|
||||
<string name="share_one_time_link">"Maak een eenmalige uitnodigings link"</string>
|
||||
<string name="share_one_time_link">Maak een eenmalige uitnodiging link</string>
|
||||
<string name="create_address">Adres aanmaken</string>
|
||||
<string name="create_group_link">Groeps link maken</string>
|
||||
<string name="create_group_link">Groep link maken</string>
|
||||
<string name="create_group">Maak een geheime groep aan</string>
|
||||
<string name="database_will_be_encrypted">Database wordt versleuteld.</string>
|
||||
<string name="group_member_status_creator">Starter</string>
|
||||
<string name="group_member_status_creator">creator</string>
|
||||
<string name="delete_address__question">Adres verwijderen\?</string>
|
||||
<string name="database_passphrase_and_export">Database wachtwoord zin & exporteren</string>
|
||||
<string name="passphrase_is_different">De wachtwoord zin van de database verschilt van de wachtwoord zin die is opgeslagen in de keystore.</string>
|
||||
<string name="database_passphrase_and_export">Database wachtwoord & exporteren</string>
|
||||
<string name="passphrase_is_different">Het wachtwoord van de database verschilt van het wachtwoord dat is opgeslagen in de keychain.</string>
|
||||
<string name="ttl_d">%dd</string>
|
||||
<string name="delete_verb">Verwijderen</string>
|
||||
<string name="delete_after">Verwijderen na</string>
|
||||
@@ -160,8 +160,8 @@
|
||||
<string name="server_connected">verbonden</string>
|
||||
<string name="server_connecting">Verbinden</string>
|
||||
<string name="connect_via_contact_link">Verbinden via contact link\?</string>
|
||||
<string name="connect_via_group_link">Verbinden via groeps link\?</string>
|
||||
<string name="connect_via_invitation_link">Verbinden via uitnodigings link\?</string>
|
||||
<string name="connect_via_group_link">Verbinden via groep link\?</string>
|
||||
<string name="connect_via_invitation_link">Verbinden via uitnodiging link\?</string>
|
||||
<string name="notification_preview_mode_contact">Contact naam</string>
|
||||
<string name="notification_preview_somebody">Contact verborgen:</string>
|
||||
<string name="image_decoding_exception_title">Decodeerfout</string>
|
||||
@@ -182,12 +182,12 @@
|
||||
<string name="create_your_profile">Maak je profiel aan</string>
|
||||
<string name="ttl_day">%d dag</string>
|
||||
<string name="ttl_days">%d dagen</string>
|
||||
<string name="encrypted_with_random_passphrase">De database is versleuteld met een willekeurige wachtwoord zin, u kunt deze wijzigen.</string>
|
||||
<string name="database_encryption_will_be_updated">De wachtwoord zin voor database codering wordt bijgewerkt en opgeslagen in de sleutel kluis.</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored">De database wordt gecodeerd en de wachtwoord zin wordt opgeslagen in de Keystore.</string>
|
||||
<string name="database_passphrase_will_be_updated">De wachtwoordzin voor databasecodering wordt bijgewerkt.</string>
|
||||
<string name="encrypted_with_random_passphrase">De database is versleuteld met een willekeurig wachtwoord, u kunt deze wijzigen.</string>
|
||||
<string name="database_encryption_will_be_updated">Het wachtwoord voor database versleuteling wordt bijgewerkt en opgeslagen in de keychain.</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored">"De database wordt versleuteld en het wachtwoord wordt opgeslagen in de Keychain."</string>
|
||||
<string name="database_passphrase_will_be_updated">Het wachtwoord voor database versleuteling wordt bijgewerkt.</string>
|
||||
<string name="database_error">Database fout</string>
|
||||
<string name="database_passphrase_is_required">Databases wachtwoord zin is vereist om de chat te openen.</string>
|
||||
<string name="database_passphrase_is_required">Database wachtwoord is vereist om je gesprekken te openen.</string>
|
||||
<string name="contact_already_exists">Contact bestaat al</string>
|
||||
<string name="icon_descr_call_connecting">Oproep verbinden</string>
|
||||
<string name="button_create_group_link">Maak link</string>
|
||||
@@ -199,16 +199,16 @@
|
||||
<string name="group_connection_pending">Verbinden…</string>
|
||||
<string name="icon_descr_context">Context icon</string>
|
||||
<string name="copy_verb">Kopiëren</string>
|
||||
<string name="clear_chat_question">Wis gesprek</string>
|
||||
<string name="icon_descr_close_button">Sluiten</string>
|
||||
<string name="clear_chat_button">Chat wissen</string>
|
||||
<string name="clear_chat_question">Wis gesprek\?</string>
|
||||
<string name="icon_descr_close_button">Knop sluiten</string>
|
||||
<string name="clear_chat_button">Gesprek wissen</string>
|
||||
<string name="alert_title_contact_connection_pending">Contact is nog niet verbonden!</string>
|
||||
<string name="delete_contact_menu_action">Verwijderen</string>
|
||||
<string name="delete_group_menu_action">Verwijderen</string>
|
||||
<string name="clear_verification">Verwijderd verificatie</string>
|
||||
<string name="connect_button">Verbind</string>
|
||||
<string name="connect_via_link">Maak verbinding via link</string>
|
||||
<string name="create_one_time_link">Maak een eenmalige uitnodigings link</string>
|
||||
<string name="create_one_time_link">Maak een eenmalige uitnodiging link</string>
|
||||
<string name="colored">gekleurd</string>
|
||||
<string name="callstatus_connecting">Oproep verbinden…</string>
|
||||
<string name="contact_requests">Contact verzoeken</string>
|
||||
@@ -216,17 +216,17 @@
|
||||
<string name="create_profile">Maak een profiel aan</string>
|
||||
<string name="delete_address">Adres verwijderen</string>
|
||||
<string name="connect_calls_via_relay">Verbinden via relais</string>
|
||||
<string name="status_contact_has_e2e_encryption">contact heeft e2e encryptie</string>
|
||||
<string name="status_contact_has_e2e_encryption">contact heeft e2e-codering</string>
|
||||
<string name="status_contact_has_no_e2e_encryption">contact heeft geen e2e-encryptie</string>
|
||||
<string name="set_password_to_export_desc">De database is versleuteld met een willekeurige wachtwoordzin. Wijzig dit voordat u exporteert.</string>
|
||||
<string name="database_passphrase">Database-wachtwoordzin</string>
|
||||
<string name="confirm_new_passphrase">Bevestig nieuwe wachtwoordzin…</string>
|
||||
<string name="current_passphrase">Huidige wachtwoordzin…</string>
|
||||
<string name="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>
|
||||
<string name="current_passphrase">Huidige wachtwoord…</string>
|
||||
<string name="database_encrypted">Database versleuteld!</string>
|
||||
<string name="rcv_group_event_member_connected">verbonden</string>
|
||||
<string name="rcv_group_event_member_connected">is toegetreden</string>
|
||||
<string name="archive_created_on_ts">Gemaakt op <xliff:g id="archive_ts">%1$s</xliff:g></string>
|
||||
<string name="group_member_status_complete">compleet</string>
|
||||
<string name="clear_contacts_selection_button">Duidelijk</string>
|
||||
<string name="clear_contacts_selection_button">Wissen</string>
|
||||
<string name="group_member_status_connected">verbonden</string>
|
||||
<string name="group_member_status_connecting">Verbinden</string>
|
||||
<string name="group_member_status_accepted">verbinden (geaccepteerd)</string>
|
||||
@@ -234,7 +234,7 @@
|
||||
<string name="info_row_connection">Verbinding</string>
|
||||
<string name="create_secret_group_title">Maak een geheime groep aan</string>
|
||||
<string name="info_row_database_id">Database ID</string>
|
||||
<string name="chat_preferences_contact_allows">Contact staat toe</string>
|
||||
<string name="chat_preferences_contact_allows">Contact maakt het mogelijk</string>
|
||||
<string name="contact_preferences">Contact voorkeuren</string>
|
||||
<string name="contacts_can_mark_messages_for_deletion">Contact personen kunnen berichten markeren voor verwijdering; u kunt ze wel bekijken.</string>
|
||||
<string name="theme_dark">Donker</string>
|
||||
@@ -250,7 +250,7 @@
|
||||
<string name="settings_section_title_device">APPARAAT</string>
|
||||
<string name="delete_files_and_media_all">Verwijder alle bestanden</string>
|
||||
<string name="delete_messages_after">Berichten verwijderen na</string>
|
||||
<string name="direct_messages">Privéberichten</string>
|
||||
<string name="direct_messages">Directe berichten</string>
|
||||
<string name="ttl_month">%d maand</string>
|
||||
<string name="delete_image">Verwijder afbeelding</string>
|
||||
<string name="delete_database">Database verwijderen</string>
|
||||
@@ -260,7 +260,7 @@
|
||||
<string name="delete_message__question">Verwijder bericht\?</string>
|
||||
<string name="delete_messages">Verwijder berichten</string>
|
||||
<string name="smp_server_test_delete_queue">Wachtrij verwijderen</string>
|
||||
<string name="delete_files_and_media_for_all_users">Verwijder bestanden voor alle chatprofielen</string>
|
||||
<string name="delete_files_and_media_for_all_users">Verwijder bestanden voor alle chat profielen</string>
|
||||
<string name="for_me_only">Verwijder voor mij</string>
|
||||
<string name="button_delete_group">Groep verwijderen</string>
|
||||
<string name="delete_link_question">Link verwijderen\?</string>
|
||||
@@ -270,16 +270,16 @@
|
||||
<string name="auth_device_authentication_is_disabled_turning_off">Apparaatverificatie is uitgeschakeld. SimpleX Lock uitschakelen.</string>
|
||||
<string name="display_name">Weergavenaam</string>
|
||||
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Lock inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld.</string>
|
||||
<string name="direct_messages_are_prohibited_in_chat">Privéberichten tussen leden zijn in deze groep verboden.</string>
|
||||
<string name="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 deze chat.</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="timed_messages">Verdwijnende berichten</string>
|
||||
<string name="smp_server_test_disconnect">verbinding verbreken</string>
|
||||
<string name="icon_descr_server_status_disconnected">verbinding verbroken</string>
|
||||
<string name="smp_server_test_disconnect">Verbinding verbreken</string>
|
||||
<string name="icon_descr_server_status_disconnected">Verbinding verbroken</string>
|
||||
<string name="display_name__field">Weergavenaam:</string>
|
||||
<string name="display_name_cannot_contain_whitespace">Weergavenaam mag geen spatie bevatten.</string>
|
||||
<string name="ttl_min">%d min</string>
|
||||
@@ -323,7 +323,7 @@
|
||||
<string name="edit_image">Bewerk afbeelding</string>
|
||||
<string name="exit_without_saving">Afsluiten zonder op te slaan</string>
|
||||
<string name="full_name_optional__prompt">Volledige naam (optioneel)</string>
|
||||
<string name="encrypted_video_call">e2e versleuteld videogesprek</string>
|
||||
<string name="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>
|
||||
<string name="icon_descr_hang_up">Ophangen</string>
|
||||
<string name="settings_section_title_help">HELP</string>
|
||||
@@ -337,46 +337,46 @@
|
||||
<string name="error_changing_message_deletion">Fout bij wijzigen van instelling</string>
|
||||
<string name="error_encrypting_database">Fout bij het versleutelen van de database</string>
|
||||
<string name="file_with_path">Bestand: %s</string>
|
||||
<string name="enter_passphrase">Voer wachtwoordzin in…</string>
|
||||
<string name="enter_passphrase">Voer wachtwoord in…</string>
|
||||
<string name="icon_descr_group_inactive">Groep inactief</string>
|
||||
<string name="alert_message_group_invitation_expired">Groeps uitnodiging is niet meer geldig, deze is verwijderd door de afzender.</string>
|
||||
<string name="snd_group_event_group_profile_updated">groeps profiel bijgewerkt</string>
|
||||
<string name="alert_message_group_invitation_expired">Groep uitnodiging is niet meer geldig, deze is verwijderd door de afzender.</string>
|
||||
<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="error_creating_link_for_group">Fout bij maken van groeps link</string>
|
||||
<string name="error_deleting_link_for_group">Fout bij verwijderen groeps link</string>
|
||||
<string name="group_link">Groeps link</string>
|
||||
<string name="error_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>
|
||||
<string name="error_changing_role">Fout bij wisselen van rol</string>
|
||||
<string name="error_removing_member">Fout bij verwijderen van lid</string>
|
||||
<string name="error_removing_member">Fout bij verwijderen van gebruiker</string>
|
||||
<string name="info_row_group">Groep</string>
|
||||
<string name="group_full_name_field">Volledige naam groep:</string>
|
||||
<string name="group_preferences">Groeps voorkeuren</string>
|
||||
<string name="group_preferences">Groep voorkeuren</string>
|
||||
<string name="feature_enabled">ingeschakeld</string>
|
||||
<string name="feature_enabled_for_contact">ingeschakeld voor contact</string>
|
||||
<string name="feature_enabled_for_you">voor u ingeschakeld</string>
|
||||
<string name="group_members_can_delete">Groeps leden kunnen verzonden berichten onherroepelijk verwijderen.</string>
|
||||
<string name="group_members_can_send_dms">Groeps leden kunnen directe berichten sturen.</string>
|
||||
<string name="group_members_can_send_voice">Groeps leden kunnen spraak berichten verzenden.</string>
|
||||
<string name="v4_5_transport_isolation_descr">Per chatprofiel (standaard) of per verbinding (BETA).</string>
|
||||
<string name="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_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>
|
||||
<string name="v4_4_french_interface">Franse interface</string>
|
||||
<string name="error_saving_group_profile">Fout bij opslaan van groeps profiel</string>
|
||||
<string name="encrypted_audio_call">e2e versleutelde audio-oproep</string>
|
||||
<string name="error_saving_group_profile">Fout bij opslaan van groep profiel</string>
|
||||
<string name="encrypted_audio_call">e2e versleutelde audio oproep</string>
|
||||
<string name="status_e2e_encrypted">e2e versleuteld</string>
|
||||
<string name="edit_verb">Bewerk</string>
|
||||
<string name="enable_automatic_deletion_question">Automatisch verwijderen van berichten aanzetten\?</string>
|
||||
<string name="enter_correct_passphrase">Voer de juiste wachtwoordzin in.</string>
|
||||
<string name="button_edit_group_profile">Groepsprofiel bewerken</string>
|
||||
<string name="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="encrypt_database">Versleutelen</string>
|
||||
<string name="error_adding_members">Fout bij het toevoegen van lid (leden)</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>
|
||||
<string name="error_accepting_contact_request">Fout bij het accepteren van een contactverzoek</string>
|
||||
<string name="group_invitation_expired">Groeps uitnodiging verlopen</string>
|
||||
<string name="group_invitation_expired">Groep uitnodiging verlopen</string>
|
||||
<string name="icon_descr_file">Bestand</string>
|
||||
<string name="section_title_for_console">VOOR CONSOLE</string>
|
||||
<string name="group_profile_is_stored_on_members_devices">Groeps proces wordt opgeslagen op de apparaten van de leden, niet op de servers.</string>
|
||||
<string name="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="hide_notification">Verbergen</string>
|
||||
@@ -385,14 +385,14 @@
|
||||
<string name="error_saving_file">Fout bij opslaan van bestand</string>
|
||||
<string name="file_not_found">Bestand niet gevonden</string>
|
||||
<string name="file_saved">Bestand opgeslagen</string>
|
||||
<string name="from_gallery_button">Van Galerij</string>
|
||||
<string name="from_gallery_button">Uit galerij</string>
|
||||
<string name="error_saving_ICE_servers">Fout bij opslaan van ICE-servers</string>
|
||||
<string name="callstate_ended">geëindigd</string>
|
||||
<string name="group_members_can_send_disappearing">Groeps leden kunnen verdwijnende berichten sturen.</string>
|
||||
<string name="group_members_can_send_disappearing">Groepsleden kunnen verdwijnende berichten sturen.</string>
|
||||
<string name="ttl_week">%d week</string>
|
||||
<string name="ttl_w">%dw</string>
|
||||
<string name="ttl_weeks">%d weken</string>
|
||||
<string name="v4_2_group_links">Groeps links</string>
|
||||
<string name="v4_2_group_links">Groep links</string>
|
||||
<string name="encrypted_database">Versleutelde database</string>
|
||||
<string name="error_with_info">Fout: %s</string>
|
||||
<string name="error_creating_address">Fout bij aanmaken van adres</string>
|
||||
@@ -400,8 +400,570 @@
|
||||
<string name="icon_descr_flip_camera">Flip-camera</string>
|
||||
<string name="error_saving_smp_servers">Fout bij opslaan van SMP-servers</string>
|
||||
<string name="error_setting_network_config">Fout bij updaten van netwerk configuratie</string>
|
||||
<string name="failed_to_parse_chat_title">Kan chat niet laden</string>
|
||||
<string name="failed_to_parse_chats_title">Kan chats niet laden</string>
|
||||
<string name="failed_to_parse_chat_title">Kan het gesprek niet laden</string>
|
||||
<string name="failed_to_parse_chats_title">Kan de gesprekken niet laden</string>
|
||||
<string name="simplex_link_mode_full">Volledige link</string>
|
||||
<string name="integrity_msg_duplicate">dubbel bericht</string>
|
||||
<string name="invalid_connection_link">Ongeldige verbinding link</string>
|
||||
<string name="service_notifications_disabled">Onmiddelijke meldingen zijn uitgeschakeld!</string>
|
||||
<string name="service_notifications">Onmiddellijke berichten!</string>
|
||||
<string name="notification_preview_new_message">nieuw bericht</string>
|
||||
<string name="icon_descr_image_snd_complete">Afbeelding verzonden</string>
|
||||
<string name="live_message">Live bericht!</string>
|
||||
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Als je een uitnodiging link voor <xliff:g id="appName">SimpleX Chat</xliff:g> hebt ontvangen, kun je deze in je browser openen:</string>
|
||||
<string name="onboarding_notifications_mode_subtitle">Dit kan later worden gewijzigd via instellingen.</string>
|
||||
<string name="join_group_question">Deelnemen aan groep\?</string>
|
||||
<string name="icon_descr_add_members">Nodig leden uit</string>
|
||||
<string name="no_contacts_selected">Geen contacten geselecteerd</string>
|
||||
<string name="v4_4_live_messages">Live berichten</string>
|
||||
<string name="icon_descr_instant_notifications">Onmiddellijke meldingen</string>
|
||||
<string name="notification_new_contact_request">Nieuw contactverzoek</string>
|
||||
<string name="auth_log_in_using_credential">Log in met uw inloggegevens</string>
|
||||
<string name="message_delivery_error_desc">Hoogstwaarschijnlijk heeft dit contact de verbinding met jou verwijderd.</string>
|
||||
<string name="delete_message_cannot_be_undone_warning">Bericht wordt verwijderd - dit kan niet ongedaan worden gemaakt!</string>
|
||||
<string name="large_file">Groot bestand!</string>
|
||||
<string name="mark_read">Markeer gelezen</string>
|
||||
<string name="mark_unread">Markeer als ongelezen</string>
|
||||
<string name="mute_chat">Dempen</string>
|
||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Als u elkaar niet persoonlijk kunt ontmoeten, kunt u <b> de QR-code scannen in het video gesprek </b>, of uw contactpersoon kan een uitnodiging link delen.</string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Als je elkaar niet persoonlijk kunt ontmoeten, <b>toon je de QR-code in het video gesprek</b> of deel je de link.</string>
|
||||
<string name="invalid_QR_code">Ongeldige QR-code</string>
|
||||
<string name="icon_descr_more_button">Meer</string>
|
||||
<string name="incorrect_code">Onjuiste beveiligingscode!</string>
|
||||
<string name="mark_code_verified">Markeer geverifieerd</string>
|
||||
<string name="how_to_use_simplex_chat">Hoe te gebruiken</string>
|
||||
<string name="markdown_help">Markdown hulp</string>
|
||||
<string name="markdown_in_messages">Markdown in berichten</string>
|
||||
<string name="network_settings_title">Netwerk instellingen</string>
|
||||
<string name="how_to_use_markdown">Markdown gebruiken</string>
|
||||
<string name="italic">cursief</string>
|
||||
<string name="how_it_works">Hoe het werkt</string>
|
||||
<string name="callstatus_missed">gemiste oproep</string>
|
||||
<string name="how_simplex_works">Hoe <xliff:g id="appName">SimpleX</xliff:g> werkt</string>
|
||||
<string name="many_people_asked_how_can_it_deliver">Veel mensen vroegen: <i>als <xliff:g id="appName">SimpleX</xliff:g> geen gebruikers-ID\'s heeft, hoe kan het dan berichten bezorgen\?</i></string>
|
||||
<string name="incoming_audio_call">Inkomende audio oproep</string>
|
||||
<string name="incoming_video_call">Inkomend video gesprek</string>
|
||||
<string name="ignore">Negeren</string>
|
||||
<string name="status_no_e2e_encryption">geen e2e-encryptie</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>
|
||||
<string name="alert_title_group_invitation_expired">Uitnodiging verlopen!</string>
|
||||
<string name="rcv_group_event_member_left">verlaten</string>
|
||||
<string name="group_member_status_left">verlaten</string>
|
||||
<string name="group_member_status_invited">uitgenodigd</string>
|
||||
<string name="button_leave_group">Groep verlaten</string>
|
||||
<string name="info_row_local_name">Lokale naam</string>
|
||||
<string name="group_unsupported_incognito_main_profile_sent">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="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="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>
|
||||
<string name="chat_preferences_no">nee</string>
|
||||
<string name="v4_5_multiple_chat_profiles">Meerdere chat profielen</string>
|
||||
<string name="v4_5_italian_interface">Italiaanse interface</string>
|
||||
<string name="v4_5_message_draft">Concept bericht</string>
|
||||
<string name="v4_5_reduced_battery_usage_descr">Meer verbeteringen volgen snel!</string>
|
||||
<string name="button_add_members">Nodig leden uit</string>
|
||||
<string name="notification_display_mode_hidden_desc">Verberg contact en bericht</string>
|
||||
<string name="turn_off_battery_optimization">Om het te gebruiken <b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">batterijoptimalisatie uitschakelen</b> voor <xliff:g xmlns:xliff=\"urn:oasis: names:tc:xliff:document:1.2\" id=\"appName\">SimpleX</xliff:g> in het volgende dialoogvenster. Anders worden de meldingen uitgeschakeld.</string>
|
||||
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Als u ervoor kiest om te weigeren, wordt de afzender NIET op de hoogte gesteld.</string>
|
||||
<string name="onboarding_notifications_mode_service">Onmiddellijk</string>
|
||||
<string name="rcv_group_event_member_added">heeft <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g> uitgenodigd</string>
|
||||
<string name="group_invitation_item_description">uitnodiging voor groep <xliff:g id="group_name">%1$s</xliff:g></string>
|
||||
<string name="invite_to_group_button">Uitnodigen voor groep</string>
|
||||
<string name="join_group_incognito_button">Doe incognito mee</string>
|
||||
<string name="group_preview_join_as">lid worden als %s</string>
|
||||
<string name="alert_text_skipped_messages_it_can_happen_when">Het kan gebeuren wanneer:
|
||||
\n1. De berichten op de server verlopen als ze 30 dagen niet zijn ontvangen,
|
||||
\n2. De server die u gebruikt om de berichten van deze contactpersoon te ontvangen, is bijgewerkt en opnieuw opgestart.
|
||||
\n3. De verbinding is verbroken.
|
||||
\nMaak verbinding met de ontwikkelaars via Instellingen om de updates over de servers te ontvangen.
|
||||
\nWe zullen serverredundantie toevoegen om verloren berichten te voorkomen.</string>
|
||||
<string name="joining_group">Deel nemen aan groep</string>
|
||||
<string name="leave_group_button">Verlaten</string>
|
||||
<string name="group_member_role_member">gebruiker</string>
|
||||
<string name="image_descr_link_preview">link voorbeeld afbeelding</string>
|
||||
<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="message_delivery_error_title">Fout bij bezorging van bericht</string>
|
||||
<string name="delete_message_mark_deleted_warning">Bericht wordt gemarkeerd voor verwijdering. De ontvanger(s) kunnen dit bericht onthullen.</string>
|
||||
<string name="network_status">Netwerk status</string>
|
||||
<string name="image_descr">Afbeelding</string>
|
||||
<string name="image_saved">Afbeelding opgeslagen in Galerij</string>
|
||||
<string name="import_database_confirmation">Importeren</string>
|
||||
<string name="import_database">Database importeren</string>
|
||||
<string name="v4_3_improved_privacy_and_security">Verbeterde privacy en veiligheid</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!</string>
|
||||
<string name="incognito_info_protects">De 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>
|
||||
<string name="thousand_abbreviation">k</string>
|
||||
<string name="notification_preview_mode_message">Bericht tekst</string>
|
||||
<string name="settings_notification_preview_title">Meldingsvoorbeeld</string>
|
||||
<string name="settings_notifications_mode_title">Meldingsservice</string>
|
||||
<string name="notifications">Meldingen</string>
|
||||
<string name="invalid_contact_link">Ongeldige link!</string>
|
||||
<string name="smp_servers_invalid_address">Ongeldig serveradres!</string>
|
||||
<string name="install_simplex_chat_for_terminal">Installeer <xliff:g id="appNameFull">SimpleX Chat</xliff:g> voor terminal</string>
|
||||
<string name="how_to">Hoe</string>
|
||||
<string name="how_to_use_your_servers">Hoe u uw servers gebruikt</string>
|
||||
<string name="network_and_servers">Netwerk & servers</string>
|
||||
<string name="enter_one_ICE_server_per_line">ICE-servers (één per lijn)</string>
|
||||
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Zorg ervoor dat WebRTC ICE-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn.</string>
|
||||
<string name="network_disable_socks_info">Als u bevestigt, kunnen de berichtenservers uw IP-adres zien en uw provider - met welke servers u verbinding maakt.</string>
|
||||
<string name="network_use_onion_hosts_no">Nee</string>
|
||||
<string name="immune_to_spam_and_abuse">Immuun voor spam en misbruik</string>
|
||||
<string name="make_private_connection">Maak een privéverbinding</string>
|
||||
<string name="message_deletion_prohibited">Het onomkeerbaar verwijderen van berichten is verboden in dit gesprek.</string>
|
||||
<string name="new_in_version">Nieuw in %s</string>
|
||||
<string name="v4_3_voice_messages_desc">Max 40 seconden, direct ontvangen.</string>
|
||||
<string name="v4_3_improved_server_configuration">Verbeterde serverconfiguratie</string>
|
||||
<string name="v4_3_irreversible_message_deletion">Onomkeerbare berichtverwijdering</string>
|
||||
<string name="rcv_group_event_invited_via_your_group_link">uitgenodigd via je 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_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>
|
||||
<string name="invalid_data">onjuiste data</string>
|
||||
<string name="invalid_message_format">ongeldig berichtformaat</string>
|
||||
<string name="display_name_invited_to_connect">uitgenodigd om te verbinden</string>
|
||||
<string name="live">LIVE</string>
|
||||
<string name="ensure_smp_server_address_are_correct_format_and_unique">Zorg ervoor dat SMP-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn.</string>
|
||||
<string name="marked_deleted_description">gemarkeerd als verwijderd</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen.</string>
|
||||
<string name="image_descr_profile_image">profielfoto</string>
|
||||
<string name="privacy_redefined">Privacy opnieuw gedefinieerd</string>
|
||||
<string name="privacy_and_security">Privacy en beveiliging</string>
|
||||
<string name="network_error_desc">Controleer uw netwerkverbinding met <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> en probeer het opnieuw.</string>
|
||||
<string name="error_smp_test_certificate">Mogelijk is de certificaatvingerafdruk in het serveradres onjuist</string>
|
||||
<string name="periodic_notifications">Periodieke meldingen</string>
|
||||
<string name="auth_open_chat_console">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="network_use_onion_hosts_no_desc_in_alert">Onion hosts worden niet gebruikt.</string>
|
||||
<string name="onboarding_notifications_mode_title">Privé meldingen</string>
|
||||
<string name="paste_the_link_you_received">Plak de ontvangen link</string>
|
||||
<string name="onboarding_notifications_mode_periodic">Periodiek</string>
|
||||
<string name="open_verb">Open</string>
|
||||
<string name="open_simplex_chat_to_accept_call">Open <xliff:g id="appNameFull">SimpleX Chat</xliff:g> om de oproep te accepteren</string>
|
||||
<string name="call_connection_peer_to_peer">peer-to-peer</string>
|
||||
<string name="notifications_will_be_hidden">Meldingen worden alleen afgeleverd totdat de app stopt!</string>
|
||||
<string name="restore_passphrase_not_found_desc">Wachtwoord niet gevonden in de Keychain, voer deze handmatig in. Dit kan zijn gebeurd als u de gegevens van de app hebt hersteld met een back-up tool. Als dit niet het geval is, neem dan contact op met de ontwikkelaars.</string>
|
||||
<string name="users_delete_with_connections">Profiel- en serververbindingen</string>
|
||||
<string name="chat_preferences_off">uit</string>
|
||||
<string name="chat_preferences_on">aan</string>
|
||||
<string name="only_you_can_send_disappearing">Alleen jij kunt verdwijnende berichten verzenden.</string>
|
||||
<string name="only_your_contact_can_send_disappearing">Alleen uw contactpersoon kan verdwijnende berichten verzenden.</string>
|
||||
<string name="only_you_can_delete_messages">Alleen jij kunt berichten onomkeerbaar verwijderen (je contactpersoon kan ze markeren voor verwijdering).</string>
|
||||
<string name="feature_offered_item_with_param">aangeboden %s: %2s</string>
|
||||
<string name="old_database_archive">Oud database archief</string>
|
||||
<string name="enter_correct_current_passphrase">Voer 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="v4_5_message_draft_descr">Bewaar het laatste berichtconcept, met bijlagen.</string>
|
||||
<string name="v4_5_private_filenames">Privé bestandsnamen</string>
|
||||
<string name="images_limit_desc">Er kunnen slechts 10 afbeeldingen tegelijk worden verzonden</string>
|
||||
<string name="enter_passphrase_notification_title">Wachtwoord is nodig</string>
|
||||
<string name="feature_off">uit</string>
|
||||
<string name="add_contact">Eenmalige uitnodiging link</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">Onion hosts zijn vereist voor verbinding.</string>
|
||||
<string name="only_group_owners_can_change_prefs">Alleen groep eigenaren kunnen groep voorkeuren wijzigen.</string>
|
||||
<string name="only_stored_on_members_devices">(alleen opgeslagen door groepsleden)</string>
|
||||
<string name="paste_connection_link_below_to_connect">Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contactpersoon.</string>
|
||||
<string name="smp_servers_preset_server">Vooraf ingestelde server</string>
|
||||
<string name="periodic_notifications_disabled">Periodieke meldingen zijn uitgeschakeld!</string>
|
||||
<string name="icon_descr_server_status_pending">In behandeling</string>
|
||||
<string name="only_group_owners_can_enable_voice">Alleen groep eigenaren kunnen spraak berichten inschakelen.</string>
|
||||
<string name="ask_your_contact_to_enable_voice">Vraag uw contactpersoon om het verzenden van spraak berichten in te schakelen.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Onion hosts zijn vereist voor verbinding.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Onion hosts worden gebruikt indien beschikbaar.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion hosts worden gebruikt indien beschikbaar.</string>
|
||||
<string name="network_use_onion_hosts_no_desc">Onion hosts worden niet gebruikt.</string>
|
||||
<string name="opensource_protocol_and_code_anybody_can_run_servers">Open-source protocol en code – iedereen kan de servers draaien.</string>
|
||||
<string name="people_can_connect_only_via_links_you_share">Mensen kunnen alleen verbinding met u maken via de links die u deelt.</string>
|
||||
<string name="only_your_contact_can_delete">Alleen uw contactpersoon kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).</string>
|
||||
<string name="only_you_can_send_voice">Alleen jij kunt 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="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>
|
||||
<string name="restore_database_alert_desc">Voer het vorige wachtwoord in na het herstellen van de database back-up. Deze actie kan niet ongedaan gemaakt worden.</string>
|
||||
<string name="icon_descr_call_pending_sent">Oproep in behandeling</string>
|
||||
<string name="simplex_link_mode_browser_warning">Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven.</string>
|
||||
<string name="contact_developers">Werk de app bij en neem contact op met de ontwikkelaars.</string>
|
||||
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Alleen client-apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met <b>2-laags end-to-end-codering</b>.</string>
|
||||
<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.
|
||||
\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>
|
||||
<string name="waiting_for_image">Wachten op afbeelding</string>
|
||||
<string name="send_live_message">Stuur een livebericht</string>
|
||||
<string name="to_start_a_new_chat_help_header">Om een nieuw gesprek te starten</string>
|
||||
<string name="unmute_chat">Dempen opheffen</string>
|
||||
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g>-Team</string>
|
||||
<string name="this_QR_code_is_not_a_link">Deze QR-code is geen link!</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">Deze link is geen geldige link!</string>
|
||||
<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_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="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="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>
|
||||
<string name="group_member_status_removed">verwijderd</string>
|
||||
<string name="group_main_profile_sent">Uw chat profiel wordt verzonden naar de groepsleden</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">Je hebt al een chat profiel met dezelfde weergave naam. Kies een andere naam.</string>
|
||||
<string name="you_are_already_connected_to_vName_via_this_link">U bent al verbonden met <xliff:g id="contactName" example="Alice">%1$s!</xliff:g>.</string>
|
||||
<string name="error_smp_test_failed_at_step">Test mislukt bij stap %s.</string>
|
||||
<string name="smp_server_test_secure_queue">Veilige wachtrij</string>
|
||||
<string name="database_initialization_error_desc">De database werkt niet goed. Tik voor meer informatie</string>
|
||||
<string name="enter_passphrase_notification_desc">Voer het wachtwoord van de database in om meldingen te ontvangen</string>
|
||||
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> service</string>
|
||||
<string name="simplex_service_notification_text">Berichten ontvangen…</string>
|
||||
<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_stop_chat">Stop chat</string>
|
||||
<string name="reply_verb">Antwoord</string>
|
||||
<string name="save_verb">Opslaan</string>
|
||||
<string name="share_verb">Deel</string>
|
||||
<string name="reveal_verb">Onthullen</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">versturen mislukt</string>
|
||||
<string name="icon_descr_sent_msg_status_sent">verstuurd</string>
|
||||
<string name="icon_descr_sent_msg_status_unauthorized_send">ongeoorloofd verzenden</string>
|
||||
<string name="icon_descr_received_msg_status_unread">Ongelezen</string>
|
||||
<string name="tap_to_start_new_chat">Tik om een nieuw gesprek te starten</string>
|
||||
<string name="this_text_is_available_in_settings">Deze tekst is beschikbaar in instellingen</string>
|
||||
<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="share_file">Deel bestand…</string>
|
||||
<string name="share_image">Afbeelding delen…</string>
|
||||
<string name="icon_descr_waiting_for_image">Wachten op afbeelding</string>
|
||||
<string name="waiting_for_file">Wachten op bestand</string>
|
||||
<string name="icon_descr_record_voice_message">Neem spraakbericht op</string>
|
||||
<string name="scan_QR_code">Scan QR-code</string>
|
||||
<string name="icon_descr_send_message">Bericht versturen</string>
|
||||
<string name="add_contact_or_create_group">Begin een nieuw gesprek</string>
|
||||
<string name="switch_receiving_address_question">Ontvangst adres wijzigen\?</string>
|
||||
<string name="verify_security_code">Controleer de beveiligingscode</string>
|
||||
<string name="view_security_code">Beveiligingscode bekijken</string>
|
||||
<string name="you_need_to_allow_to_send_voice">U moet uw contact toestemming geven om spraak berichten te verzenden om ze te kunnen verzenden.</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(scannen of plakken vanaf klembord)</string>
|
||||
<string name="to_connect_via_link_title">Om verbinding te maken via een link</string>
|
||||
<string name="reject_contact_button">Afwijzen</string>
|
||||
<string name="set_contact_name">Naam contactpersoon instellen</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">De door u geaccepteerde verbinding wordt geannuleerd!</string>
|
||||
<string name="contact_you_shared_link_with_wont_be_able_to_connect">Het contact met wie je deze link hebt gedeeld, kan GEEN verbinding maken!</string>
|
||||
<string name="you_accepted_connection">Je hebt de verbinding geaccepteerd</string>
|
||||
<string name="you_invited_your_contact">Je hebt je contactpersoon uitgenodigd</string>
|
||||
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Uw contactpersoon moet online zijn om de verbinding te voltooien.
|
||||
\nU kunt deze verbinding verbreken en het contact verwijderen (en later proberen met een nieuwe link).</string>
|
||||
<string name="image_descr_qr_code">QR code</string>
|
||||
<string name="icon_descr_settings">Instellingen</string>
|
||||
<string name="contact_wants_to_connect_with_you">wil met je in contact komen!</string>
|
||||
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> Adres</string>
|
||||
<string name="show_QR_code">Toon QR-code</string>
|
||||
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g>-Logo</string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">Je chat profiel wordt verzonden naar uw contactpersoon</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">Je wordt verbonden met de groep wanneer het apparaat van de groep host online is, even geduld a.u.b. of controleer het later!</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">U wordt verbonden wanneer uw verbindingsverzoek wordt geaccepteerd, even geduld a.u.b. of controleer later!</string>
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">Je wordt verbonden wanneer het apparaat van je contact online is, even geduld a.u.b. of controleer het later!</string>
|
||||
<string name="scan_code_from_contacts_app">Scan de beveiligingscode van de app van uw contactpersoon.</string>
|
||||
<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="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="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="smp_servers">SMP servers</string>
|
||||
<string name="smp_servers_save">Bewaar servers</string>
|
||||
<string name="smp_servers_test_failed">Servertest mislukt!</string>
|
||||
<string name="smp_servers_test_some_failed">Sommige servers hebben de test niet doorstaan:</string>
|
||||
<string name="smp_servers_test_servers">Servers testen</string>
|
||||
<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="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>
|
||||
<string name="save_preferences_question">Voorkeuren opslaan\?</string>
|
||||
<string name="save_and_notify_contact">Opslaan en Contact melden</string>
|
||||
<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="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>
|
||||
<string name="we_do_not_store_contacts_or_messages_on_servers">We slaan geen van uw contacten of berichten (eenmaal afgeleverd) op de servers op.</string>
|
||||
<string name="you_can_use_markdown_to_format_messages__prompt">U kunt markdown gebruiken voor opmaak in berichten:</string>
|
||||
<string name="callstatus_rejected">geweigerde oproep</string>
|
||||
<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="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>
|
||||
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> wil met je in contact komen via</string>
|
||||
<string name="reject">Afwijzen</string>
|
||||
<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="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>
|
||||
<string name="protect_app_screen">App scherm verbergen</string>
|
||||
<string name="your_privacy">Uw privacy</string>
|
||||
<string name="send_link_previews">Link voorbeelden verzenden</string>
|
||||
<string name="settings_section_title_settings">INSTELLINGEN</string>
|
||||
<string name="settings_section_title_support">ONDERSTEUNING SIMPLEX CHAT</string>
|
||||
<string name="settings_section_title_you">JIJ</string>
|
||||
<string name="run_chat_section">CHAT UITVOEREN</string>
|
||||
<string name="your_chat_database">Uw chat database</string>
|
||||
<string name="set_password_to_export">Wachtwoord instellen om te exporteren</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Start de app opnieuw om een nieuw chat profiel aan te maken.</string>
|
||||
<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="remove_passphrase_from_keychain">Wachtwoord verwijderen uit Keychain\?</string>
|
||||
<string name="remove_passphrase">Verwijderen</string>
|
||||
<string name="update_database">Update</string>
|
||||
<string name="unknown_database_error_with_info">Onbekende databasefout: %s</string>
|
||||
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Je ontvangt geen berichten meer van deze groep. Je gesprek geschiedenis blijft behouden.</string>
|
||||
<string name="alert_message_no_group">Deze groep bestaat niet meer.</string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">Je gebruikt een incognito profiel voor deze groep. Om te voorkomen dat je je hoofdprofiel deelt, is het niet toegestaan om contacten uit te nodigen</string>
|
||||
<string name="you_rejected_group_invitation">Je hebt de groep uitnodiging afgewezen</string>
|
||||
<string name="you_joined_this_group">Je bent lid geworden van deze groep</string>
|
||||
<string name="rcv_group_event_member_deleted">verwijderd <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<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="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="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>
|
||||
<string name="v4_5_reduced_battery_usage">Verminderd batterijgebruik</string>
|
||||
<string name="v4_5_private_filenames_descr">Om de tijdzone te beschermen, gebruiken afbeeldings-/spraakbestanden UTC.</string>
|
||||
<string name="stop_chat_confirmation">Stop</string>
|
||||
<string name="stop_chat_question">Stop chat\?</string>
|
||||
<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_restore_error">Databasefout herstellen</string>
|
||||
<string name="unknown_error">Onbekende fout</string>
|
||||
<string name="wrong_passphrase_title">Verkeerd wachtwoord!</string>
|
||||
<string name="you_are_invited_to_group_join_to_connect_with_group_members">U bent uitgenodigd voor de groep. Word lid om in contact te komen met groepsleden.</string>
|
||||
<string name="group_invitation_tap_to_join">Tik om mee te doen</string>
|
||||
<string name="group_invitation_tap_to_join_incognito">Tik om incognito deel te nemen</string>
|
||||
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Je bent lid geworden van deze groep. Verbinding maken met uitnodigend groepslid.</string>
|
||||
<string name="you_sent_group_invitation">Je hebt een groep uitnodiging verzonden</string>
|
||||
<string name="snd_group_event_user_left">jij bent vertrokken</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed">je bent van adres veranderd</string>
|
||||
<string name="select_contacts">Selecteer contacten</string>
|
||||
<string name="skip_inviting_button">Sla het uitnodigen van leden over</string>
|
||||
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g> contact(en) geselecteerd</string>
|
||||
<string name="remove_member_confirmation">Verwijderen</string>
|
||||
<string name="button_remove_member">Gebruiker verwijderen</string>
|
||||
<string name="role_in_group">Rol</string>
|
||||
<string name="button_send_direct_message">Direct bericht sturen</string>
|
||||
<string name="member_role_will_be_changed_with_invitation">De rol wordt gewijzigd in \"%s\". De gebruiker ontvangt een nieuwe uitnodiging.</string>
|
||||
<string name="sending_via">Verzenden via</string>
|
||||
<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_options_revert">Terugdraaien</string>
|
||||
<string name="network_options_save">Opslaan</string>
|
||||
<string name="network_option_seconds_label">sec</string>
|
||||
<string name="incognito_info_find">Om het profiel te vinden dat wordt gebruikt voor een incognito verbinding, tikt u op de naam van het contact of de groep bovenaan het gesprek.</string>
|
||||
<string name="incognito_info_share">Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen.</string>
|
||||
<string name="theme">Thema</string>
|
||||
<string name="reset_color">Kleuren resetten</string>
|
||||
<string name="save_color">Kleur opslaan</string>
|
||||
<string name="theme_system">Systeem</string>
|
||||
<string name="chat_preferences_yes">ja</string>
|
||||
<string name="feature_received_prohibited">gekregen, verboden</string>
|
||||
<string name="your_preferences">Jouw voorkeuren</string>
|
||||
<string name="accept_feature_set_1_day">Stel 1 dag in</string>
|
||||
<string name="whats_new">Wat is er nieuw</string>
|
||||
<string name="v4_4_live_messages_desc">Ontvangers zien updates terwijl u ze typt.</string>
|
||||
<string name="v4_4_verify_connection_security">Controleer de verbindingsbeveiliging</string>
|
||||
<string name="v4_4_french_interface_descr">Dank aan de gebruikers – draag bij via Weblate!</string>
|
||||
<string name="v4_5_transport_isolation">Transport isolation</string>
|
||||
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">U bent verbonden met de server die wordt gebruikt om berichten van dit contact te ontvangen.</string>
|
||||
<string name="profile_will_be_sent_to_contact_sending_link">Je profiel wordt verzonden naar het contact van wie je deze link hebt ontvangen.</string>
|
||||
<string name="you_will_join_group">U wordt lid van een groep waarnaar deze link verwijst en maakt verbinding met de groepsleden.</string>
|
||||
<string name="notifications_mode_off">Wordt uitgevoerd wanneer de app is geopend</string>
|
||||
<string name="settings_notification_preview_mode_title">Toon voorbeeld</string>
|
||||
<string name="ntf_channel_calls">SimpleX Chat oproepen</string>
|
||||
<string name="notifications_mode_periodic">Start periodiek</string>
|
||||
<string name="voice_message">Spraakbericht</string>
|
||||
<string name="voice_message_send_text">Spraakbericht…</string>
|
||||
<string name="voice_message_with_duration">Spraakbericht (<xliff:g id="duration">%1$s</xliff:g>)</string>
|
||||
<string name="text_field_set_contact_placeholder">Contactnaam instellen…</string>
|
||||
<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="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="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="save_servers_button">Opslaan</string>
|
||||
<string name="network_enable_socks">SOCKS-proxy gebruiken\?</string>
|
||||
<string name="network_use_onion_hosts">Gebruik .onion-hosts</string>
|
||||
<string name="network_disable_socks">Directe internetverbinding gebruiken\?</string>
|
||||
<string name="network_use_onion_hosts_prefer">Wanneer beschikbaar</string>
|
||||
<string name="network_use_onion_hosts_required">Vereist</string>
|
||||
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
|
||||
<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="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="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_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>
|
||||
<string name="update_network_settings_question">Netwerk instellingen bijwerken\?</string>
|
||||
<string name="updating_settings_will_reconnect_client_to_all_servers">Door de instellingen bij te werken, wordt de client opnieuw verbonden met alle servers.</string>
|
||||
<string name="update_network_settings_confirmation">Update</string>
|
||||
<string name="your_chat_profiles_stored_locally">Uw chat profielen worden lokaal opgeslagen, alleen op uw apparaat</string>
|
||||
<string name="incognito_random_profile">Je willekeurige profiel</string>
|
||||
<string name="prohibit_sending_disappearing_messages">Verbied het verzenden van verdwijnende berichten.</string>
|
||||
<string name="prohibit_sending_voice_messages">Verbieden het verzenden van spraak berichten.</string>
|
||||
<string name="callstate_received_answer">antwoord gekregen…</string>
|
||||
<string name="v4_2_security_assessment">Beveiligingsbeoordeling</string>
|
||||
<string name="v4_4_disappearing_messages_desc">Verzonden berichten worden na ingestelde tijd verwijderd.</string>
|
||||
<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="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="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="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.
|
||||
\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="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_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="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>
|
||||
<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>
|
||||
<string name="icon_descr_speaker_on">Luidspreker aan</string>
|
||||
<string name="icon_descr_call_rejected">Geweigerde oproep</string>
|
||||
<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_group">SimpleX groep link</string>
|
||||
<string name="simplex_link_mode">SimpleX links</string>
|
||||
<string name="simplex_link_invitation">Eenmalige SimpleX uitnodiging</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">Proberen verbinding te maken met de server die wordt gebruikt om berichten van dit contact te ontvangen.</string>
|
||||
<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_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>
|
||||
<string name="sender_you_pronoun">jij</string>
|
||||
<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="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> bericht(en) overgeslagen</string>
|
||||
<string name="moderated_description">gemodereerd</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="about_simplex_chat">Sobre o <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
|
||||
<string name="about_simplex">Sobre o SimpleX</string>
|
||||
<string name="chat_item_ttl_day">1 dia</string>
|
||||
<string name="chat_item_ttl_week">1 semana</string>
|
||||
<string name="chat_item_ttl_month">1 mês</string>
|
||||
<string name="a_plus_b">a + b</string>
|
||||
</resources>
|
||||
@@ -560,7 +560,6 @@
|
||||
<string name="your_privacy">Конфиденциальность</string>
|
||||
<string name="protect_app_screen">Защитить экран приложения</string>
|
||||
<string name="auto_accept_images">Автоприем изображений</string>
|
||||
<string name="transfer_images_faster">Передавать изображения быстрее</string>
|
||||
<string name="send_link_previews">Отправлять картинки ссылок</string>
|
||||
<string name="full_backup">Резервная копия данных</string>
|
||||
<!-- Settings sections -->
|
||||
@@ -1039,4 +1038,5 @@
|
||||
<string name="v4_5_reduced_battery_usage_descr">Дополнительные улучшения скоро!</string>
|
||||
<string name="v4_5_reduced_battery_usage">Уменьшенное потребление батареи</string>
|
||||
<string name="v4_5_transport_isolation">Отдельные транспортные сессии</string>
|
||||
<string name="moderated_description">удалено</string>
|
||||
</resources>
|
||||
@@ -15,7 +15,7 @@
|
||||
<string name="callstatus_accepted">已接受通话</string>
|
||||
<string name="accept">接受</string>
|
||||
<string name="network_enable_socks_info">通过 SOCKS 代理访问服务器在端口9050?允许该选项前必须开始代理。</string>
|
||||
<string name="smp_servers_add">添加服务器…</string>
|
||||
<string name="smp_servers_add">添加服务器……</string>
|
||||
<string name="smp_servers_add_to_another_device">添加另一设备</string>
|
||||
<string name="group_member_role_admin">管理员</string>
|
||||
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器。</string>
|
||||
@@ -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="connect_calls_via_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>
|
||||
@@ -138,14 +138,14 @@
|
||||
<string name="invite_prohibited">无法邀请联系人!</string>
|
||||
<string name="cancel_verb">取消</string>
|
||||
<string name="callstatus_ended">通话结束 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
|
||||
<string name="change_verb">更换</string>
|
||||
<string name="change_verb">更改</string>
|
||||
<string name="icon_descr_call_ended">通话结束</string>
|
||||
<string name="change_database_passphrase_question">更改数据库密码?</string>
|
||||
<string name="callstatus_error">通话错误</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_completed">为您更改地址</string>
|
||||
<string name="callstatus_in_progress">通话中</string>
|
||||
<string name="icon_descr_call_progress">通话进行中</string>
|
||||
<string name="callstatus_calling">呼叫中…</string>
|
||||
<string name="callstatus_calling">呼叫中……</string>
|
||||
<string name="icon_descr_cancel_live_message">取消实时消息</string>
|
||||
<string name="settings_section_title_calls">通话</string>
|
||||
<string name="call_on_lock_screen">在锁定屏幕上通话:</string>
|
||||
@@ -160,9 +160,9 @@
|
||||
<string name="change_role">改变角色</string>
|
||||
<string name="change_member_role_question">更改群组角色?</string>
|
||||
<string name="icon_descr_cancel_link_preview">取消链接预览</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing_for_member">为 %s 更改地址…</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址…</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing">更改地址…</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing_for_member">为 %s 更改地址中……</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址中……</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing">更改地址……</string>
|
||||
<string name="create_your_profile">创建您的资料</string>
|
||||
<string name="chat_database_deleted">聊天数据库已删除</string>
|
||||
<string name="chat_database_imported">聊天数据库已导入</string>
|
||||
@@ -223,4 +223,425 @@
|
||||
<string name="save_passphrase_in_keychain">在密钥库中保存密码</string>
|
||||
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务</string>
|
||||
<string name="settings_notifications_mode_title">通知服务</string>
|
||||
<string name="confirm_new_passphrase">确认新密码……</string>
|
||||
<string name="group_member_status_complete">完整的</string>
|
||||
<string name="group_member_status_connected">已连接</string>
|
||||
<string name="chat_preferences">聊天偏好设置</string>
|
||||
<string name="settings_section_title_chats">聊天</string>
|
||||
<string name="clear_verb">清除</string>
|
||||
<string name="clear_chat_menu_action">清除</string>
|
||||
<string name="clear_chat_button">清除聊天</string>
|
||||
<string name="clear_chat_question">清除聊天记录?</string>
|
||||
<string name="chat_with_developers">与开发者聊天</string>
|
||||
<string name="clear_contacts_selection_button">清除</string>
|
||||
<string name="colored">有色</string>
|
||||
<string name="callstate_connected">已连接</string>
|
||||
<string name="connect_button">连接</string>
|
||||
<string name="connect_via_link_verb">连接</string>
|
||||
<string name="choose_file">选择文件</string>
|
||||
<string name="network_session_mode_user">聊天资料</string>
|
||||
<string name="v4_5_transport_isolation_descr">按聊天资料(默认)或按连接(BETA)。</string>
|
||||
<string name="smp_servers_check_address">检查服务器地址并再试一次。</string>
|
||||
<string name="clear_verification">清除验证</string>
|
||||
<string name="icon_descr_close_button">关闭按键</string>
|
||||
<string name="configure_ICE_servers">配置 ICE 服务器</string>
|
||||
<string name="confirm_verb">确认</string>
|
||||
<string name="auth_confirm_credential">确认您的证书</string>
|
||||
<string name="server_connected">已连接</string>
|
||||
<string name="icon_descr_server_status_connected">已连接</string>
|
||||
<string name="smp_server_test_connect">连接</string>
|
||||
<string name="notification_contact_connected">已连接</string>
|
||||
<string name="server_connecting">连接中</string>
|
||||
<string name="group_member_status_connecting">连接中</string>
|
||||
<string name="notifications_mode_periodic_desc">每10分钟检查一次新消息,最长1分钟</string>
|
||||
<string name="rcv_group_event_member_connected">已连接</string>
|
||||
<string name="v4_4_verify_connection_security_desc">与您的联系人比较安全码。</string>
|
||||
<string name="incoming_audio_call">语音通话来电</string>
|
||||
<string name="error_changing_message_deletion">更改设置错误</string>
|
||||
<string name="alert_message_group_invitation_expired">群组邀请不再有效,已被发件人删除。</string>
|
||||
<string name="failed_to_create_user_duplicate_title">重复的显示名!</string>
|
||||
<string name="failed_to_create_user_title">创建资料错误!</string>
|
||||
<string name="error_accepting_contact_request">接受联系人请求错误</string>
|
||||
<string name="error_deleting_group">删除群组错误</string>
|
||||
<string name="error_deleting_pending_contact_connection">删除待定的联系人连接错误</string>
|
||||
<string name="error_receiving_file">接收文件错误</string>
|
||||
<string name="failed_to_active_user_title">切换资料错误!</string>
|
||||
<string name="notification_preview_mode_hidden">已隐藏</string>
|
||||
<string name="edit_verb">编辑</string>
|
||||
<string name="notification_display_mode_hidden_desc">隐藏联系人和消息</string>
|
||||
<string name="icon_descr_edited">已编辑</string>
|
||||
<string name="for_everybody">对于每个人</string>
|
||||
<string name="image_decoding_exception_title">解码错误</string>
|
||||
<string name="image_saved">图片保存到相册</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">图片将在您的联系人在线时收到,请稍等或稍后查看!</string>
|
||||
<string name="error_saving_file">保存文件错误</string>
|
||||
<string name="icon_descr_file">文件</string>
|
||||
<string name="file_not_found">未找到文件</string>
|
||||
<string name="file_saved">文件已保存</string>
|
||||
<string name="icon_descr_server_status_disconnected">已断开连接</string>
|
||||
<string name="icon_descr_server_status_error">错误</string>
|
||||
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 桌面:通过 <b>扫描二维码</b> 从应用程序扫描显示的二维码。</string>
|
||||
<string name="delete_pending_connection__question">删除待定连接?</string>
|
||||
<string name="how_to_use_markdown">如何使用 markdown</string>
|
||||
<string name="create_profile_button">创建</string>
|
||||
<string name="display_name_cannot_contain_whitespace">显示名不能包含空格。</string>
|
||||
<string name="decentralized">分散式</string>
|
||||
<string name="immune_to_spam_and_abuse">不受垃圾和骚扰消息影响</string>
|
||||
<string name="encrypted_video_call">端到端加密语音通话</string>
|
||||
<string name="ignore">忽视</string>
|
||||
<string name="incoming_video_call">视频通话来电</string>
|
||||
<string name="no_call_on_lock_screen">禁用</string>
|
||||
<string name="status_e2e_encrypted">端到端加密</string>
|
||||
<string name="status_contact_has_e2e_encryption">联系人具有端到端加密</string>
|
||||
<string name="allow_accepting_calls_from_lock_screen">通过设置启用在锁定屏幕上通话。</string>
|
||||
<string name="icon_descr_call_connecting">连接通话中</string>
|
||||
<string name="status_contact_has_no_e2e_encryption">联系人没有端到端加密</string>
|
||||
<string name="icon_descr_hang_up">挂断电话</string>
|
||||
<string name="integrity_msg_duplicate">重复的消息</string>
|
||||
<string name="settings_section_title_help">帮助</string>
|
||||
<string name="settings_experimental_features">实验性功能</string>
|
||||
<string name="settings_section_title_device">设备</string>
|
||||
<string name="settings_developer_tools">开发者工具</string>
|
||||
<string name="export_database">导出数据库</string>
|
||||
<string name="database_passphrase">数据库密码</string>
|
||||
<string name="import_database">导入数据库</string>
|
||||
<string name="files_and_media_section">文件和媒体</string>
|
||||
<string name="current_passphrase">现有密码……</string>
|
||||
<string name="encrypt_database">加密</string>
|
||||
<string name="encrypted_database">加密的数据库</string>
|
||||
<string name="enter_correct_passphrase">输入正确密码。</string>
|
||||
<string name="icon_descr_group_inactive">不活跃群组</string>
|
||||
<string name="group_member_status_creator">创建者</string>
|
||||
<string name="group_member_status_accepted">连接中(已接受)</string>
|
||||
<string name="group_member_status_announced">连接中(已宣布)</string>
|
||||
<string name="icon_descr_expand_role">扩展角色选择</string>
|
||||
<string name="group_link">群组链接</string>
|
||||
<string name="error_deleting_link_for_group">删除群组链接错误</string>
|
||||
<string name="info_row_database_id">数据库 ID</string>
|
||||
<string name="error_removing_member">删除成员错误</string>
|
||||
<string name="error_changing_role">更改角色错误</string>
|
||||
<string name="info_row_group">群组</string>
|
||||
<string name="timed_messages">限时消息</string>
|
||||
<string name="ttl_day">%d 天</string>
|
||||
<string name="group_connection_pending">连接中……</string>
|
||||
<string name="callstatus_connecting">连接通话中……</string>
|
||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">联系人和所有的消息都将被删除——这是不可逆回的!</string>
|
||||
<string name="notification_preview_mode_contact">联系人姓名</string>
|
||||
<string name="group_member_status_intro_invitation">连接(介绍邀请)</string>
|
||||
<string name="contact_requests">联系人请求</string>
|
||||
<string name="callstate_connecting">连接中……</string>
|
||||
<string name="contacts_can_mark_messages_for_deletion">联系人可以将信息标记为删除;您将可以查看这些信息。</string>
|
||||
<string name="contribute">贡献</string>
|
||||
<string name="icon_descr_contact_checked">已检查联系人</string>
|
||||
<string name="notification_preview_somebody">联系人已隐藏:</string>
|
||||
<string name="alert_title_contact_connection_pending">联系人尚未连接!</string>
|
||||
<string name="icon_descr_context">背景图标</string>
|
||||
<string name="copied">复制到剪贴板</string>
|
||||
<string name="contact_connection_pending">连接中……</string>
|
||||
<string name="create_group_link">创建群组链接</string>
|
||||
<string name="create_group">创建私密群组</string>
|
||||
<string name="button_create_group_link">创建链接</string>
|
||||
<string name="share_one_time_link">创建一次性邀请链接</string>
|
||||
<string name="smp_server_test_create_queue">创建队列</string>
|
||||
<string name="create_secret_group_title">创建私密群组</string>
|
||||
<string name="v4_5_multiple_chat_profiles_descr">不同的名字、头像和传输隔离。</string>
|
||||
<string name="v4_4_french_interface">法语界面</string>
|
||||
<string name="create_one_time_link">创建一次性邀请链接</string>
|
||||
<string name="how_to_use_simplex_chat">如何使用它</string>
|
||||
<string name="server_error">错误</string>
|
||||
<string name="display_name_connecting">连接中……</string>
|
||||
<string name="failed_to_parse_chat_title">加载聊天失败</string>
|
||||
<string name="failed_to_parse_chats_title">无法加载聊天</string>
|
||||
<string name="error_adding_members">添加成员错误</string>
|
||||
<string name="hide_notification">隐藏</string>
|
||||
<string name="copy_verb">复制</string>
|
||||
<string name="hide_verb">隐藏</string>
|
||||
<string name="how_to">如何</string>
|
||||
<string name="icon_descr_help">帮助</string>
|
||||
<string name="ttl_d">%dd</string>
|
||||
<string name="database_will_be_encrypted">数据库将被加密。</string>
|
||||
<string name="encrypted_audio_call">端到端加密语音通话</string>
|
||||
<string name="enter_one_ICE_server_per_line">ICE 服务器(每行一个)</string>
|
||||
<string name="create_address">创建地址</string>
|
||||
<string name="core_build_timestamp">核心构建于:%s</string>
|
||||
<string name="core_version">核心版本: v%s</string>
|
||||
<string name="display_name__field">显示名:</string>
|
||||
<string name="full_name__field">全名:</string>
|
||||
<string name="display_name">显示名。</string>
|
||||
<string name="full_name_optional__prompt">全名(可选)</string>
|
||||
<string name="callstate_ended">已结束</string>
|
||||
<string name="group_member_status_group_deleted">群组已删除</string>
|
||||
<string name="delete_group_for_all_members_cannot_undo_warning">将为所有成员删除群组——此操作无法撤消!</string>
|
||||
<string name="conn_level_desc_direct">直接</string>
|
||||
<string name="direct_messages">私聊</string>
|
||||
<string name="feature_enabled">已启用</string>
|
||||
<string name="group_members_can_send_voice">群组成员可以发送语音消息。</string>
|
||||
<string name="v4_2_group_links">群组链接</string>
|
||||
<string name="error_starting_chat">启动聊天错误</string>
|
||||
<string name="database_encrypted">数据库已加密!</string>
|
||||
<string name="encrypt_database_question">加密数据库?</string>
|
||||
<string name="encrypted_with_random_passphrase">数据库使用随机密码进行加密,您可以更改它。</string>
|
||||
<string name="database_passphrase_is_required">打开聊天需要数据库密码。</string>
|
||||
<string name="settings_section_title_develop">开发</string>
|
||||
<string name="error_stopping_chat">停止聊天错误</string>
|
||||
<string name="import_database_question">导入聊天数据库?</string>
|
||||
<string name="error_deleting_database">删除聊天数据库错误</string>
|
||||
<string name="import_database_confirmation">导入</string>
|
||||
<string name="enter_passphrase">输入密码……</string>
|
||||
<string name="database_passphrase_will_be_updated">数据库加密密码将被更新。</string>
|
||||
<string name="database_error">数据库错误</string>
|
||||
<string name="snd_group_event_group_profile_updated">群组资料已更新</string>
|
||||
<string name="group_full_name_field">群组全名:</string>
|
||||
<string name="theme_dark">深色</string>
|
||||
<string name="feature_enabled_for_contact">已为联系人启用</string>
|
||||
<string name="feature_enabled_for_you">为您启用</string>
|
||||
<string name="group_members_can_send_disappearing">群组成员可以发送限时消息。</string>
|
||||
<string name="create_profile">创建个人资料</string>
|
||||
<string name="how_it_works">工作原理</string>
|
||||
<string name="alert_title_no_group">未找到群组!</string>
|
||||
<string name="error_creating_link_for_group">创建群组链接错误</string>
|
||||
<string name="group_member_status_introduced">连接中(已介绍)</string>
|
||||
<string name="set_password_to_export_desc">数据库使用随机密码进行加密。请在导出前更改它。</string>
|
||||
<string name="database_passphrase_and_export">数据库密码和导出</string>
|
||||
<string name="smp_server_test_delete_queue">删除队列</string>
|
||||
<string name="smp_servers_delete_server">删除服务器</string>
|
||||
<string name="simplex_link_mode_description">描述</string>
|
||||
<string name="disappearing_prohibited_in_this_chat">此聊天中禁止显示限时消息。</string>
|
||||
<string name="smp_server_test_disconnect">断开连接</string>
|
||||
<string name="error_changing_address">更改地址错误</string>
|
||||
<string name="auth_enable_simplex_lock">启用 SimpleX 锁定</string>
|
||||
<string name="error_creating_address">创建地址错误</string>
|
||||
<string name="network_option_enable_tcp_keep_alive">启用 TCP 保持活跃状态</string>
|
||||
<string name="smp_servers_enter_manually">手动输入服务器</string>
|
||||
<string name="error_deleting_contact">删除联系人错误</string>
|
||||
<string name="error_setting_network_config">更新网络配置错误</string>
|
||||
<string name="error_deleting_contact_request">删除联系人请求错误</string>
|
||||
<string name="error_saving_group_profile">保存群组资料错误</string>
|
||||
<string name="error_saving_smp_servers">保存 SMP 服务器错误</string>
|
||||
<string name="error_saving_ICE_servers">保存 ICE 服务器错误</string>
|
||||
<string name="error_sending_message">发送消息错误</string>
|
||||
<string name="simplex_link_mode_full">完整链接</string>
|
||||
<string name="group_display_name_field">群组显示名称:</string>
|
||||
<string name="group_invitation_expired">群组邀请已过期</string>
|
||||
<string name="delete_group_for_self_cannot_undo_warning">将为您删除群组——此操作无法撤消!</string>
|
||||
<string name="group_profile_is_stored_on_members_devices">群组资料存储在成员的设备上,而不是服务器上。</string>
|
||||
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">如果您选择拒绝发件人,将不会收到通知。</string>
|
||||
<string name="how_to_use_your_servers">如何使用您的服务器</string>
|
||||
<string name="network_disable_socks_info">如果您确认,消息服务器将能够看到您的 IP 地址和您的提供商——以及您正在连接的服务器。</string>
|
||||
<string name="image_descr">图片</string>
|
||||
<string name="icon_descr_image_snd_complete">图片已发送</string>
|
||||
<string name="auth_device_authentication_is_disabled_turning_off">设备认证被禁用。关闭 SimpleX 锁定。</string>
|
||||
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">没有启用设备认证。一旦启用设备认证,您可以通过设置打开 SimpleX 锁定。</string>
|
||||
<string name="auth_disable_simplex_lock">禁用 SimpleX 锁定</string>
|
||||
<string name="maximum_supported_file_size">目前支持的最大文件尺寸是 <xliff:g id="maxFileSize">%1$s</xliff:g>。</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">文件将在您的联系人在线时收到,请稍等或稍后再查看!</string>
|
||||
<string name="from_gallery_button">从图库</string>
|
||||
<string name="exit_without_saving">退出而不保存</string>
|
||||
<string name="icon_descr_flip_camera">翻转相机</string>
|
||||
<string name="enable_automatic_deletion_question">启用自动删除消息?</string>
|
||||
<string name="section_title_for_console">用于控制台</string>
|
||||
<string name="direct_messages_are_prohibited_in_chat">此群中禁止成员之间私聊。</string>
|
||||
<string name="disappearing_messages_are_prohibited">此群组中禁止显示限时消息。</string>
|
||||
<string name="group_members_can_delete">群组成员可以不可撤回地删除已发送的消息。</string>
|
||||
<string name="group_members_can_send_dms">群组成员可以私信。</string>
|
||||
<string name="v4_4_disappearing_messages">限时消息</string>
|
||||
<string name="v4_3_improved_privacy_and_security_desc">在最近的应用程序中隐藏应用程序屏幕。</string>
|
||||
<string name="leave_group_button">离开</string>
|
||||
<string name="alert_title_group_invitation_expired">邀请已过期!</string>
|
||||
<string name="live_message">实时消息!</string>
|
||||
<string name="image_descr_link_preview">链接预览图片</string>
|
||||
<string name="invalid_QR_code">无效的二维码</string>
|
||||
<string name="onboarding_notifications_mode_subtitle">以后可以通过设置进行更改。</string>
|
||||
<string name="alert_text_skipped_messages_it_can_happen_when">它可以在以下情况下发生:
|
||||
\n1. 如果消息在30天内没有被收到,就会在服务器上过期。
|
||||
\n2. 您用于接收来自此联系人的消息的服务器已更新并重新启动。
|
||||
\n3. 连接受损。
|
||||
\n请通过设置与开发者联系,以接收有关服务器的更新。
|
||||
\n我们将添加服务器冗余以防止丢失消息。</string>
|
||||
<string name="leave_group_question">离开群组?</string>
|
||||
<string name="rcv_group_event_invited_via_your_group_link">通过您的群组链接邀请</string>
|
||||
<string name="info_row_local_name">本地名称</string>
|
||||
<string name="invalid_message_format">无效的消息格式</string>
|
||||
<string name="invalid_data">无效数据</string>
|
||||
<string name="live">LIVE</string>
|
||||
<string name="display_name_invited_to_connect">已邀请连接</string>
|
||||
<string name="invalid_connection_link">无效的连接链接</string>
|
||||
<string name="italic">斜体</string>
|
||||
<string name="group_member_status_invited">已邀请</string>
|
||||
<string name="invite_to_group_button">邀请加入群组</string>
|
||||
<string name="join_group_button">加入</string>
|
||||
<string name="join_group_question">加入群组?</string>
|
||||
<string name="icon_descr_add_members">邀请成员</string>
|
||||
<string name="group_member_status_left">已离开</string>
|
||||
<string name="theme_light">浅色</string>
|
||||
<string name="message_deletion_prohibited">此聊天中禁止不可撤回消息移除。</string>
|
||||
<string name="v4_5_italian_interface">意大利语界面</string>
|
||||
<string name="incorrect_code">安全码不正确!</string>
|
||||
<string name="service_notifications_disabled">即时通知被禁用!</string>
|
||||
<string name="invalid_chat">无效聊天</string>
|
||||
<string name="smp_servers_invalid_address">无效的服务器地址!</string>
|
||||
<string name="button_add_members">邀请成员</string>
|
||||
<string name="button_leave_group">离开群组</string>
|
||||
<string name="users_delete_data_only">仅本地配置文件数据</string>
|
||||
<string name="icon_descr_instant_notifications">即时通知</string>
|
||||
<string name="service_notifications">即时通知!</string>
|
||||
<string name="auth_log_in_using_credential">使用您的凭据登录</string>
|
||||
<string name="large_file">大文件!</string>
|
||||
<string name="invalid_contact_link">链接无效!</string>
|
||||
<string name="rcv_group_event_member_left">已离开</string>
|
||||
<string name="message_deletion_prohibited_in_chat">此群组中禁止不可撤回消息移除。</string>
|
||||
<string name="v4_3_irreversible_message_deletion">不可撤回消息移除</string>
|
||||
<string name="v4_4_live_messages">实时消息</string>
|
||||
<string name="notification_preview_mode_message">消息正文</string>
|
||||
<string name="callstate_waiting_for_confirmation">等待确认中……</string>
|
||||
<string name="onboarding_notifications_mode_service">即时</string>
|
||||
<string name="only_your_contact_can_send_disappearing">只有您的联系人才可以发送限时消息。</string>
|
||||
<string name="notification_preview_mode_message_desc">显示联系人和消息</string>
|
||||
<string name="notification_preview_mode_contact_desc">只显示联系人</string>
|
||||
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">为保护您的信息,请打开 SimpleX 锁定。
|
||||
\n在启用此功能之前,系统将提示您完成身份验证。</string>
|
||||
<string name="your_chats">您的聊天</string>
|
||||
<string name="share_file">分享文件……</string>
|
||||
<string name="share_image">分享图片……</string>
|
||||
<string name="share_message">分享消息……</string>
|
||||
<string name="text_field_set_contact_placeholder">设置联系人姓名……</string>
|
||||
<string name="callstate_received_answer">已收到回复……</string>
|
||||
<string name="callstate_received_confirmation">已受到确认……</string>
|
||||
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">只有客户端设备存储用户配置文件、联系人、群组和使用 <b>双层端到端加密 </b> 发送的消息。</string>
|
||||
<string name="video_call_no_encryption">视频通话(非端到端加密)</string>
|
||||
<string name="onboarding_notifications_mode_periodic">定期</string>
|
||||
<string name="onboarding_notifications_mode_title">私人通知</string>
|
||||
<string name="onboarding_notifications_mode_off">应用程序运行时</string>
|
||||
<string name="status_no_e2e_encryption">无端到端加密</string>
|
||||
<string name="show_call_on_lock_screen">显示</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">您只能在一台设备上使用最新版本的聊天数据库,否则您可能会停止接收来自某些联系人的消息。</string>
|
||||
<string name="new_passphrase">新密码……</string>
|
||||
<string name="member_role_will_be_changed_with_notification">该角色将更改为“%s”。群组中每个人都会收到通知。</string>
|
||||
<string name="your_contact_address">您的联系人地址</string>
|
||||
<string name="chat_lock">SimpleX 锁定</string>
|
||||
<string name="periodic_notifications">定期通知</string>
|
||||
<string name="notifications_mode_periodic">定期启动</string>
|
||||
<string name="notification_preview_new_message">新消息</string>
|
||||
<string name="auth_unlock">解锁</string>
|
||||
<string name="voice_message_send_text">语音消息……</string>
|
||||
<string name="network_use_onion_hosts_no">否</string>
|
||||
<string name="callstate_starting">启动中……</string>
|
||||
<string name="prohibit_sending_disappearing_messages">禁止发送限时消息。</string>
|
||||
<string name="only_you_can_send_disappearing">只有您可以发送限时消息。</string>
|
||||
<string name="only_your_contact_can_delete">只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。</string>
|
||||
<string name="prohibit_sending_disappearing">禁止发送限时消息。</string>
|
||||
<string name="notifications_will_be_hidden">通知只会在应用程序停止之前发送!</string>
|
||||
<string name="chat_preferences_no">否</string>
|
||||
<string name="prohibit_message_deletion">禁止不可撤回消息删除。</string>
|
||||
<string name="notification_new_contact_request">新联系人请求</string>
|
||||
<string name="callstate_waiting_for_answer">等待答复中……</string>
|
||||
<string name="la_notice_title_simplex_lock">SimpleX 锁定</string>
|
||||
<string name="auth_simplex_lock_turned_on">已开启 SimpleX 锁定</string>
|
||||
<string name="notifications">通知</string>
|
||||
<string name="simplex_service_notification_text">正在接收消息……</string>
|
||||
<string name="enter_passphrase_notification_desc">要接收通知,请输入数据库密码</string>
|
||||
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">为了保护您的隐私,该应用程序没有推送通知,而是一个 <b><xliff:g id="appName">SimpleX</xliff:g> 后台服务 </b>——它每天使用百分之几的电池。</string>
|
||||
<string name="your_settings">您的设置</string>
|
||||
<string name="turn_off_battery_optimization">为了使用它,请 <b>禁用电池优化</b>为<xliff:g id="appName">SimpleX</xliff:g>在下一个对话框。否则通知将被禁用。</string>
|
||||
<string name="settings_notification_preview_title">通知预览</string>
|
||||
<string name="enter_passphrase_notification_title">需要密码</string>
|
||||
<string name="periodic_notifications_disabled">定期通知被禁用!</string>
|
||||
<string name="notifications_mode_off">在应用程序打开时运行</string>
|
||||
<string name="settings_notification_preview_mode_title">显示预览</string>
|
||||
<string name="periodic_notifications_desc">该应用程序会定期获取新消息——它每天会消耗百分之几的电量。该应用程序不使用推送通知——您设备中的数据不会发送到服务器。</string>
|
||||
<string name="v4_3_irreversible_message_deletion_desc">你的联系人可以允许完全删除消息。</string>
|
||||
<string name="v4_4_disappearing_messages_desc">已发送的消息将在设定的时间后被删除。</string>
|
||||
<string name="your_chat_database">您的聊天数据库</string>
|
||||
<string name="wrong_passphrase_title">密码错误!</string>
|
||||
<string name="save_verb">保存</string>
|
||||
<string name="open_verb">打开</string>
|
||||
<string name="update_database">更新</string>
|
||||
<string name="save_passphrase_and_open_chat">保存密码并打开聊天</string>
|
||||
<string name="open_chat">打开聊天</string>
|
||||
<string name="database_backup_can_be_restored">更改数据库密码的尝试未完成。</string>
|
||||
<string name="remove_member_confirmation">移除</string>
|
||||
<string name="sender_you_pronoun">您</string>
|
||||
<string name="save_servers_button">保存</string>
|
||||
<string name="settings_section_title_you">您</string>
|
||||
<string name="remove_passphrase">移除</string>
|
||||
<string name="you_have_to_enter_passphrase_every_time">您必须在每次应用程序启动时输入密码——它不存储在设备上。</string>
|
||||
<string name="set_password_to_export">设置密码来导出</string>
|
||||
<string name="enter_correct_current_passphrase">请输入正确的当前密码。</string>
|
||||
<string name="update_database_passphrase">更新数据库密码</string>
|
||||
<string name="database_is_not_encrypted">您的聊天数据库未加密——设置密码来保护它。</string>
|
||||
<string name="store_passphrase_securely_without_recover">请安全地保存密码,如果您丢失了密码,您将无法访问聊天。</string>
|
||||
<string name="store_passphrase_securely">请安全地保存密码,如果您丢失了密码,您将无法更改它。</string>
|
||||
<string name="wrong_passphrase">数据库密码错误</string>
|
||||
<string name="network_options_save">保存</string>
|
||||
<string name="update_network_settings_confirmation">更新</string>
|
||||
<string name="open_simplex_chat_to_accept_call">打开 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 来接听电话</string>
|
||||
<string name="icon_descr_video_call">视频通话</string>
|
||||
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> 想通过该方式与您联系</string>
|
||||
<string name="icon_descr_call_rejected">拒接来电</string>
|
||||
<string name="call_connection_peer_to_peer">点对点</string>
|
||||
<string name="error_with_info">错误:%s</string>
|
||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">如果您不能亲自见面,您可以 <b>扫描视频通话中的二维码</b>,或者您的联系人可以分享邀请链接。</string>
|
||||
<string name="your_calls">您的通话</string>
|
||||
<string name="call_connection_via_relay">通过中继</string>
|
||||
<string name="callstatus_missed">未接来电</string>
|
||||
<string name="callstatus_rejected">拒接来电</string>
|
||||
<string name="v4_3_voice_messages">语音消息</string>
|
||||
<string name="voice_messages">语音消息</string>
|
||||
<string name="ntf_channel_calls">SimpleX Chat 通话</string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">如果您不能亲自见面,<b>在视频通话</b>中出示二维码,或分享链接。</string>
|
||||
<string name="your_chat_profiles">您的聊天资料</string>
|
||||
<string name="icon_descr_call_missed">未接来电</string>
|
||||
<string name="icon_descr_call_pending_sent">待定来电</string>
|
||||
<string name="your_chat_profiles_stored_locally">您的聊天资料存储在本地,只在您的设备上</string>
|
||||
<string name="connection_error_auth_desc">除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。
|
||||
\n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。</string>
|
||||
<string name="you_are_already_connected_to_vName_via_this_link">您已经连接到 <xliff:g id="contactName" example="Alice">%1$s!</xliff:g>。</string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">您的聊天资料将被发送
|
||||
\n给你的联系人</string>
|
||||
<string name="users_delete_with_connections">资料和服务器连接</string>
|
||||
<string name="update_network_settings_question">更新网络设置?</string>
|
||||
<string name="only_you_can_delete_messages">只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">重新启动应用程序以创建新的聊天资料。</string>
|
||||
<string name="error_smp_test_server_auth">服务器需要授权才能创建队列,检查密码</string>
|
||||
<string name="error_smp_test_failed_at_step">测试在步骤 %s 失败。</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">您已经有一个显示名相同的聊天资料。请选择另一个名字。</string>
|
||||
<string name="icon_descr_sent_msg_status_sent">已发送</string>
|
||||
<string name="mute_chat">静音</string>
|
||||
<string name="image_descr_profile_image">资料图片</string>
|
||||
<string name="icon_descr_settings">设置</string>
|
||||
<string name="settings_section_title_settings">设置</string>
|
||||
<string name="unknown_error">未知错误</string>
|
||||
<string name="unknown_database_error_with_info">未知数据库错误:%s</string>
|
||||
<string name="rcv_group_event_updated_group_profile">已更新的群组资料</string>
|
||||
<string name="rcv_group_event_member_deleted">已删除 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<string name="snd_group_event_member_deleted">您删除了 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<string name="profile_will_be_sent_to_contact_sending_link">您的资料将被发送到收到您链接的联系人那里。</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">正在尝试连接到用于从该联系人接收消息的服务器(错误:<xliff:g id="errorMsg">%1$s</xliff:g>)。</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">您已连接到用于接收该联系人消息的服务器。</string>
|
||||
<string name="description_you_shared_one_time_link">您分享了一次性链接</string>
|
||||
<string name="message_delivery_error_desc">很可能此联系人已经删除了与您的联系。</string>
|
||||
<string name="icon_descr_profile_image_placeholder">资料图片占位符</string>
|
||||
<string name="smp_servers_per_user">您当前聊天资料的新连接服务器</string>
|
||||
<string name="your_current_profile">您当前的资料</string>
|
||||
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">您的资料存储在您的设备上并且仅与您的联系人共享。
|
||||
\n
|
||||
\n<xliff:g id="appName">SimpleX</xliff:g> 服务器无法看见您的资料。</string>
|
||||
<string name="your_profile_is_stored_on_your_device">您的资料、联系人和发送的消息存储在您的设备上。</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">该资料仅与您的联系人共享。</string>
|
||||
<string name="chat_preferences_on">在</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。</string>
|
||||
<string name="messages_section_description">此设置适用于您当前聊天资料中的消息</string>
|
||||
<string name="database_restore_error">恢复数据库错误</string>
|
||||
<string name="restore_database_alert_confirm">恢复</string>
|
||||
<string name="you_sent_group_invitation">您发送了群组邀请</string>
|
||||
<string name="you_rejected_group_invitation">您拒绝了群组邀请</string>
|
||||
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">您当前的聊天数据库将被删除并替换为导入的数据库。
|
||||
\n此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。</string>
|
||||
<string name="rcv_group_event_member_added">已邀请 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
|
||||
<string name="save_group_profile">保存群组资料</string>
|
||||
<string name="error_smp_test_certificate">服务器地址中的证书指纹可能不正确</string>
|
||||
<string name="network_error_desc">请使用 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> 检查您的网络连接,然后重试。</string>
|
||||
<string name="v4_5_multiple_chat_profiles">多个聊天资料</string>
|
||||
<string name="database_initialization_error_desc">数据库不能正常工作。点击了解更多</string>
|
||||
<string name="message_delivery_error_title">消息传递错误</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,574 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="chat_item_ttl_week">1 個星期</string>
|
||||
<string name="accept_requests">接受請求</string>
|
||||
<string name="a_plus_b">a + b</string>
|
||||
<string name="about_simplex">關於 SimpleX</string>
|
||||
<string name="accept_call_on_lock_screen">接受</string>
|
||||
<string name="accept_feature">接受</string>
|
||||
<string name="chat_item_ttl_day">1 天</string>
|
||||
<string name="chat_item_ttl_month">1 個月</string>
|
||||
<string name="accept_contact_button">接受</string>
|
||||
<string name="about_simplex_chat">關於 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
|
||||
<string name="accept_connection_request__question">接受連線請求?</string>
|
||||
<string name="callstatus_accepted">已接受收聽電話</string>
|
||||
<string name="network_enable_socks_info">要在端口 9050 啟動 SOCKS 代理伺服器嗎?在啟用這個選項之前,必須先啟動代理伺服器。</string>
|
||||
<string name="group_member_role_admin">管理員</string>
|
||||
<string name="above_then_preposition_continuation">然後選按:</string>
|
||||
<string name="smp_servers_preset_add">加入預設伺服器</string>
|
||||
<string name="smp_servers_add">新增伺服器 …</string>
|
||||
<string name="accept">接受</string>
|
||||
<string name="auth_unavailable">認證無效</string>
|
||||
<string name="allow_verb">允許</string>
|
||||
<string name="display_name__field">顯示名稱:</string>
|
||||
<string name="full_name__field">全名:</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><b>使用更多電量</b>!通知服務會長期在背景中運行 – 一但有訊息就會顯示在通知內。</string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><b>對電池好</b>。通知服務會每十分鐘檢查一次。你可能會錯過電話通話或訊息。</string>
|
||||
<string name="answer_call">回應電話請求</string>
|
||||
<string name="clear_contacts_selection_button">清除</string>
|
||||
<string name="allow_direct_messages">允許在群組內選擇成員後傳送訊息</string>
|
||||
<string name="ttl_sec">%d 秒</string>
|
||||
<string name="feature_cancelled_item">已取消 %s</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">自動接受聯絡人請求</string>
|
||||
<string name="group_unsupported_incognito_main_profile_sent">匿名者模式在這𥚃是不支援 - 你的真實帳號名稱會顯示於群組內</string>
|
||||
<string name="chat_preferences_no">不要</string>
|
||||
<string name="allow_to_send_disappearing">允許傳送自動銷毀的訊息</string>
|
||||
<string name="database_initialization_error_title">無法初始化數據庫</string>
|
||||
<string name="notifications_mode_service">一直開啟</string>
|
||||
<string name="auth_disable_simplex_lock">關閉 SimpleX 鎖定</string>
|
||||
<string name="auth_enable_simplex_lock">啟動 SimpleX 鎖定</string>
|
||||
<string name="copy_verb">複製</string>
|
||||
<string name="reply_verb">回覆</string>
|
||||
<string name="share_verb">分享</string>
|
||||
<string name="attach">附件</string>
|
||||
<string name="chat_with_developers">和開發者對話</string>
|
||||
<string name="your_chats">你的對話</string>
|
||||
<string name="share_file">分享檔案…</string>
|
||||
<string name="share_message">分享訊息</string>
|
||||
<string name="icon_descr_cancel_image_preview">取消圖片預覽</string>
|
||||
<string name="allow_voice_messages_question">允許使用語音訊息?</string>
|
||||
<string name="cancel_verb">取消</string>
|
||||
<string name="icon_descr_cancel_live_message">取消即時顯示訊息</string>
|
||||
<string name="add_new_contact_to_create_one_time_QR_code"><b>新增新的聯絡人</b>:新增新的聯絡人可以使用二維碼建立你的一次性二維碼。</string>
|
||||
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>掃描二維碼</b>:連接到向你出示二維碼的聯絡人。</string>
|
||||
<string name="choose_file">選擇檔案</string>
|
||||
<string name="use_camera_button">使用相機</string>
|
||||
<string name="from_gallery_button">選擇來自圖片庫</string>
|
||||
<string name="accept_contact_incognito_button">接受匿名者的對話</string>
|
||||
<string name="clear_chat_warning">所有訊息記錄會刪除 - 這不能還原!這些訊息只會在你裝置中刪除。</string>
|
||||
<string name="clear_verb">清除</string>
|
||||
<string name="clear_chat_question">要清除對話記錄?</string>
|
||||
<string name="icon_descr_cancel_link_preview">取消連結預覽</string>
|
||||
<string name="clear_chat_menu_action">清除</string>
|
||||
<string name="clear_chat_button">清除對話記錄</string>
|
||||
<string name="share_invitation_link">分享邀請連結</string>
|
||||
<string name="chat_with_the_founder">傳送問題和想法</string>
|
||||
<string name="how_to_use_simplex_chat">如何使用</string>
|
||||
<string name="install_simplex_chat_for_terminal">使用終端機安裝 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
|
||||
<string name="app_version_title">應用程式版本</string>
|
||||
<string name="all_your_contacts_will_remain_connected">你的所有聯絡人會保持連接。</string>
|
||||
<string name="app_version_code">程式建構:%s</string>
|
||||
<string name="app_version_name">應用程式版本:v%s</string>
|
||||
<string name="share_link">分享連結</string>
|
||||
<string name="accept_automatically">自動化</string>
|
||||
<string name="your_current_profile">你目前的帳號</string>
|
||||
<string name="display_name_cannot_contain_whitespace">顯示的名稱字與字中間不能有空白。</string>
|
||||
<string name="save_preferences_question">儲存設定?</string>
|
||||
<string name="display_name">顯示名稱</string>
|
||||
<string name="full_name_optional__prompt">全名(可選)</string>
|
||||
<string name="callstatus_error">通話有錯誤</string>
|
||||
<string name="callstatus_calling">打電話中…</string>
|
||||
<string name="callstatus_in_progress">通話中</string>
|
||||
<string name="secret">私密</string>
|
||||
<string name="callstate_connected">已連接</string>
|
||||
<string name="onboarding_notifications_mode_off_desc"><b>對電池最好</b>。只有在應用程式運行時才收到通知,這樣背景就不會運行通知服務</string>
|
||||
<string name="encrypted_video_call">端對端加密視像通話</string>
|
||||
<string name="video_call_no_encryption">視像通話(沒有端對端加密)</string>
|
||||
<string name="call_already_ended">通話已經結束了。</string>
|
||||
<string name="icon_descr_audio_off">關閉語音</string>
|
||||
<string name="icon_descr_audio_on">開啟語音</string>
|
||||
<string name="icon_descr_call_ended">通話已經取消了。</string>
|
||||
<string name="icon_descr_call_progress">通話中</string>
|
||||
<string name="icon_descr_speaker_on">開啟喇叭</string>
|
||||
<string name="settings_section_title_calls">通話</string>
|
||||
<string name="appearance_settings">主題</string>
|
||||
<string name="audio_call_no_encryption">語音通話(沒有端對端加密)</string>
|
||||
<string name="icon_descr_audio_call">語音通話</string>
|
||||
<string name="settings_audio_video_calls">語音 & 視像通話</string>
|
||||
<string name="icon_descr_video_call">視像通話</string>
|
||||
<string name="bold">粗體</string>
|
||||
<string name="auto_accept_images">圖片自動接受</string>
|
||||
<string name="full_backup">備份資料數據</string>
|
||||
<string name="settings_section_title_icon">應用程式圖示</string>
|
||||
<string name="chat_database_imported">已匯入對話資料庫</string>
|
||||
<string name="keychain_is_storing_securely">Android Keystore 是用於安全地儲存密碼 - 確保通知服務的運作</string>
|
||||
<string name="impossible_to_recover_passphrase"><b>請注意</b>:如果你忘記了密碼你將不能再次復原或更改密碼。</string>
|
||||
<string name="keychain_allows_to_receive_ntfs">當你重新啟動應用程式或更改密碼後, Android Keystore 將會用來安全地儲存密碼 - 確保收到通知。</string>
|
||||
<string name="chat_is_stopped_indication">聊天室已停止運作</string>
|
||||
<string name="only_group_owners_can_change_prefs">只有這個群組的創建人才能更改群組內的設定。</string>
|
||||
<string name="change_verb">修改</string>
|
||||
<string name="users_add">加入新帳號</string>
|
||||
<string name="users_delete_all_chats_deleted">所有聊天室和聊天記錄會刪除 - 這不能還原!</string>
|
||||
<string name="incognito">匿名者</string>
|
||||
<string name="chat_preferences_always">經常</string>
|
||||
<string name="chat_preferences_on">開啟</string>
|
||||
<string name="your_preferences">你的設定</string>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">允許你的聯絡人傳送語音訊息。</string>
|
||||
<string name="allow_voice_messages_only_if">只能在你的聯絡人允許使用語言訊息的時候才能使用語音訊息。</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">你和你的聯絡人都可以傳送自動銷毀的訊息。</string>
|
||||
<string name="only_you_can_send_disappearing">只有你能傳送可以自動銷毀的訊息。</string>
|
||||
<string name="both_you_and_your_contact_can_send_voice">你和你的聯絡人都可以傳送語音訊息。</string>
|
||||
<string name="v4_2_group_links_desc">管理員可以建立可以加入群組的連結。</string>
|
||||
<string name="v4_3_improved_server_configuration_desc">使用二維碼掃描並新增伺服器。</string>
|
||||
<string name="chat_is_running">聊天室運行中</string>
|
||||
<string name="chat_database_section">聊天室數據庫</string>
|
||||
<string name="chat_is_stopped">聊天室已經停止</string>
|
||||
<string name="stop_chat_confirmation">停止</string>
|
||||
<string name="chat_database_deleted">已刪除數據庫的對話內容</string>
|
||||
<string name="stop_chat_to_enable_database_actions">停止聊天室以啟用數據庫功能。</string>
|
||||
<string name="change_database_passphrase_question">更改數據庫密碼?</string>
|
||||
<string name="leave_group_question">確定要退出群組?</string>
|
||||
<string name="leave_group_button">退出</string>
|
||||
<string name="alert_title_cant_invite_contacts">無法邀請該聯絡人!</string>
|
||||
<string name="rcv_group_event_member_connected">已連接</string>
|
||||
<string name="rcv_group_event_member_left">已離開</string>
|
||||
<string name="invite_prohibited">無法邀請該聯絡人!</string>
|
||||
<string name="create_secret_group_title">建立私密群組</string>
|
||||
<string name="button_leave_group">退出群組</string>
|
||||
<string name="group_member_status_connected">已連接</string>
|
||||
<string name="group_display_name_field">群組顯示名稱:</string>
|
||||
<string name="group_full_name_field">群組全名:</string>
|
||||
<string name="chat_preferences">對話設定</string>
|
||||
<string name="chat_preferences_off">關閉</string>
|
||||
<string name="chat_preferences_yes">好</string>
|
||||
<string name="timed_messages">自動銷毀訊息</string>
|
||||
<string name="group_members_can_send_dms">群組內的會員可以傳送私人訊息。</string>
|
||||
<string name="ttl_min">%d 分鐘</string>
|
||||
<string name="ttl_month">%d 月</string>
|
||||
<string name="callstatus_ended">通話結束 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
|
||||
<string name="icon_descr_cancel_file_preview">取消檔案預覽</string>
|
||||
<string name="cannot_receive_file">無法接收文件</string>
|
||||
<string name="failed_to_create_user_duplicate_title">重複的顯示名稱!</string>
|
||||
<string name="network_session_mode_entity_description">一個單獨的 TCP 連接(和 SOCKS 憑證)將用於<b>每個聯絡人和群組內的成員</b>。
|
||||
\n<b>請注意</b>:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。</string>
|
||||
<string name="network_session_mode_user_description">一個單獨的 TCP 連接(和 SOCKS 憑證)將用於<b>每個聊天室的設定<b>。</string>
|
||||
<string name="back">返回</string>
|
||||
<string name="turning_off_service_and_periodic">省電模式運行中,關閉了背景通知服務和新訊息的定期檢查。你可以在通知設定內重新啟用。</string>
|
||||
<string name="settings_section_title_incognito">匿名者模式</string>
|
||||
<string name="chat_preferences_default">預設 (%s)</string>
|
||||
<string name="group_preferences">群組設定</string>
|
||||
<string name="contact_preferences">聯絡人設定</string>
|
||||
<string name="share_image">分享圖片…</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">你和你的聯絡人都可以不可逆的刪除已經傳送的訊息</string>
|
||||
<string name="server_connected">已連接</string>
|
||||
<string name="simplex_link_mode_description">簡介</string>
|
||||
<string name="simplex_link_mode_full">完整連結</string>
|
||||
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>你可以通過設定關閉</b> - 當應用程式運行時,通知服務會仍然運行。</string>
|
||||
<string name="notifications_mode_service_desc">背景通知服務會一直運行 - 一但有新訊息就會顯示在通知。</string>
|
||||
<string name="notifications_mode_off_desc">程式只會在運行中的時候才會收到訊息的通知,不會在背景中運行通知服務。</string>
|
||||
<string name="icon_descr_asked_to_receive">要求接收圖片</string>
|
||||
<string name="network_settings">進階網路設定</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_completed">將你的地址修改</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址中…</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_changing">更改地址中…</string>
|
||||
<string name="v4_4_disappearing_messages">自動銷毀訊息</string>
|
||||
<string name="add_contact_or_create_group">開始新對話</string>
|
||||
<string name="create_group">建立私密群組</string>
|
||||
<string name="share_one_time_link">建立一次性邀請連結</string>
|
||||
<string name="to_share_with_your_contact">(分享給你的聯絡人)</string>
|
||||
<string name="chat_help_tap_button">點擊按鈕</string>
|
||||
<string name="thank_you_for_installing_simplex">感謝你安裝 <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
|
||||
<string name="mute_chat">靜音</string>
|
||||
<string name="unmute_chat">解除靜音</string>
|
||||
<string name="your_settings">你的設定</string>
|
||||
<string name="smp_servers_add_to_another_device">加入到另一個裝置上</string>
|
||||
<string name="smp_servers_check_address">檢查輸入的伺服器地址然後再試一次。</string>
|
||||
<string name="chat_console">終端機對話</string>
|
||||
<string name="star_on_github">於 Github 給個星星</string>
|
||||
<string name="incognito_info_protects">匿名者模式會保護你的真實帳號名稱和頭像 — 當有新聯絡人的時候會自動建立一個隨機性的名字。</string>
|
||||
<string name="incognito_info_allows">這樣就會每一個對話中也擁有不同的顯示名稱並且沒有任何的個人資料可用於分享或有機會外洩</string>
|
||||
<string name="incognito_info_find">要找到用於匿名連接的個人資料,請點擊上方的聯絡人或群組名稱。</string>
|
||||
<string name="allow_disappearing_messages_only_if">只有在你的聯絡人允許的情況下才允許自動銷毀訊息。</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">允許你的聯絡人傳送自動銷毀的訊息。</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">只有在你的聯絡人允許的情況下,才允許將不可撤銷的訊息刪除。</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">允許你的聯絡人可以不可逆的刪除已發送的訊息。</string>
|
||||
<string name="allow_to_delete_messages">允許將不可撤銷的訊息刪除。</string>
|
||||
<string name="allow_to_send_voice">允許傳送語音訊息。</string>
|
||||
<string name="delete_after">多久後刪除</string>
|
||||
<string name="all_group_members_will_remain_connected">群組內所有成員會保持連接</string>
|
||||
<string name="color_primary">自訂顏色</string>
|
||||
<string name="moderated_description">即時顯示訊息</string>
|
||||
<string name="simplex_link_group">SimpleX 群組連結</string>
|
||||
<string name="v4_5_private_filenames">私人檔案名稱</string>
|
||||
<string name="error_adding_members">傳送訊息時出錯</string>
|
||||
<string name="failed_to_create_user_title">建立帳號失敗!</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">你已經有一個帳號的顯示名稱和現在選擇建立的帳號名稱相同。請顯示其他名稱。</string>
|
||||
<string name="failed_to_active_user_title">切換帳號失敗!</string>
|
||||
<string name="error_joining_group">在群組新增成員時出錯</string>
|
||||
<string name="sender_cancelled_file_transfer">傳送者已取消傳送檔案。</string>
|
||||
<string name="error_receiving_file">接收檔案時出錯</string>
|
||||
<string name="error_creating_address">建立地址時出錯</string>
|
||||
<string name="v4_5_private_filenames_descr">為了保護時區,圖片或語音文件使用 UTC。</string>
|
||||
<string name="sending_files_not_yet_supported">目前還不支援傳送檔案</string>
|
||||
<string name="receiving_files_not_yet_supported">目前還不技援接收檔案</string>
|
||||
<string name="sender_you_pronoun">你</string>
|
||||
<string name="unknown_message_format">未知的訊息格式</string>
|
||||
<string name="invalid_message_format">無效的訊息格式</string>
|
||||
<string name="live">直播</string>
|
||||
<string name="invalid_chat">無效聊天</string>
|
||||
<string name="invalid_data">無效數據</string>
|
||||
<string name="connection_local_display_name">連接 <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
|
||||
<string name="display_name_connection_established">已建立連線</string>
|
||||
<string name="display_name_invited_to_connect">邀請連線</string>
|
||||
<string name="display_name_connecting">連接中…</string>
|
||||
<string name="description_you_shared_one_time_link">你建立了一次性的連接連結</string>
|
||||
<string name="description_you_shared_one_time_link_incognito">你建立了使用匿名者模式的一次性連接連結</string>
|
||||
<string name="simplex_link_contact">SimpleX 聯絡人連結</string>
|
||||
<string name="simplex_link_invitation">SimpleX 一次性連結</string>
|
||||
<string name="simplex_link_mode">SimpleX 連結</string>
|
||||
<string name="simplex_link_connection">通過 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
|
||||
<string name="simplex_link_mode_browser">通過瀏覽器</string>
|
||||
<string name="error_sending_message">請使用 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> 檢查你的網路連線並且再試一次。</string>
|
||||
<string name="contact_already_exists">聯絡人已存在</string>
|
||||
<string name="you_are_already_connected_to_vName_via_this_link">你已經連接到 <xliff:g id="contactName" example="Alice">%1$s!</xliff:g>。</string>
|
||||
<string name="v4_5_transport_isolation_descr">通過帳號文件(默認)或通過連接(測試版)。</string>
|
||||
<string name="v4_5_reduced_battery_usage">減少電量使用</string>
|
||||
<string name="v4_5_reduced_battery_usage_descr">更多功能即將推出!</string>
|
||||
<string name="v4_5_italian_interface">意大利語言界面</string>
|
||||
<string name="v4_5_italian_interface_descr">感謝用戶 - 使用 Weblate 的翻譯貢獻!</string>
|
||||
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
|
||||
<string name="thousand_abbreviation">k</string>
|
||||
<string name="connect_via_contact_link">使用連結連接聯絡人 \?</string>
|
||||
<string name="connect_via_invitation_link">通過邀請的</string>
|
||||
<string name="connect_via_group_link">通過使用邀請連結連接 \?</string>
|
||||
<string name="profile_will_be_sent_to_contact_sending_link">你的個人資料將發送給你收到此連結的聯絡人。</string>
|
||||
<string name="you_will_join_group">你將會加入此連結內的群組並且連接到此群組成為群組內的成員。</string>
|
||||
<string name="connect_via_link_verb">連接</string>
|
||||
<string name="server_error">錯誤</string>
|
||||
<string name="server_connecting">連接中</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">你已連線到用於接收來自此聯絡人的訊息伺服器。</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">正在嘗試連接到這聯絡人接收的訊息伺服器 (錯誤: <xliff:g id="errorMsg">%1$s</xliff:g>).</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">正在嘗試連接到這聯絡人接收的訊息伺服器。</string>
|
||||
<string name="deleted_description">已刪除</string>
|
||||
<string name="marked_deleted_description">已標記為刪除</string>
|
||||
<string name="simplex_link_mode_browser_warning">在瀏覽器中開啟連結可能會降低私隱和安全性。不受 SimpleX 信任的連結會顯示紅色。</string>
|
||||
<string name="error_saving_smp_servers">儲存 SMP 伺服器時出錯</string>
|
||||
<string name="ensure_smp_server_address_are_correct_format_and_unique">請確保 SMP 伺服器連結格式正確,行分隔且不重複。</string>
|
||||
<string name="error_setting_network_config">更新網路配置時出錯</string>
|
||||
<string name="failed_to_parse_chat_title">聯絡人載入失敗</string>
|
||||
<string name="failed_to_parse_chats_title">多個聯絡人載入失敗</string>
|
||||
<string name="contact_developers">請更新應用程式或聯絡開發者。</string>
|
||||
<string name="connection_timeout">連線超時</string>
|
||||
<string name="connection_error">連線失敗</string>
|
||||
<string name="network_error_desc">請檢查你的網路</string>
|
||||
<string name="smp_server_test_connect">連接</string>
|
||||
<string name="periodic_notifications_disabled">定期通知已禁用!</string>
|
||||
<string name="enter_passphrase_notification_title">需要使用密碼</string>
|
||||
<string name="notification_preview_mode_contact_desc">只顯示聯絡人名稱</string>
|
||||
<string name="auth_device_authentication_is_disabled_turning_off">裝置內的螢幕鎖定已關閉。已關閉 SimpleX 鎖定。</string>
|
||||
<string name="save_verb">儲存</string>
|
||||
<string name="images_limit_title">太多圖片!</string>
|
||||
<string name="error_saving_file">儲存檣案的時候有錯誤</string>
|
||||
<string name="notification_new_contact_request">有新的聯絡人連線請求</string>
|
||||
<string name="auth_confirm_credential">登入以使用憑據</string>
|
||||
<string name="hide_verb">隱藏</string>
|
||||
<string name="file_saved">檔案已儲存</string>
|
||||
<string name="invalid_connection_link">無效連線連結</string>
|
||||
<string name="sender_may_have_deleted_the_connection_request">傳送者似乎已經刪除了連接的請求。</string>
|
||||
<string name="error_deleting_contact">刪除聯絡人時出錯</string>
|
||||
<string name="error_deleting_group">刪除群組時出錯</string>
|
||||
<string name="error_deleting_contact_request">刪除聯絡人</string>
|
||||
<string name="error_smp_test_failed_at_step">測試在步驟 %s 失敗。</string>
|
||||
<string name="error_smp_test_server_auth">伺服器需要投權才能建立佇列,請檢查密碼</string>
|
||||
<string name="error_smp_test_certificate">伺服器地址的憑證指紋可能不正確</string>
|
||||
<string name="icon_descr_instant_notifications">即時收到通知</string>
|
||||
<string name="service_notifications">即時收到通知!</string>
|
||||
<string name="service_notifications_disabled">即時收到通知已禁用!</string>
|
||||
<string name="database_initialization_error_desc">數據庫目前沒有正常運作。點擊查看更多</string>
|
||||
<string name="ntf_channel_calls">SimpleX Chat 電話</string>
|
||||
<string name="settings_notifications_mode_title">通知服務</string>
|
||||
<string name="settings_notification_preview_mode_title">顯示預覽</string>
|
||||
<string name="settings_notification_preview_title">通知預覽</string>
|
||||
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">如果你解鎖程式後三十秒後再次啟動或返回應用程式,你將需要進行多一次解鎖程式</string>
|
||||
<string name="auth_unlock">已解鎖</string>
|
||||
<string name="auth_log_in_using_credential">登入</string>
|
||||
<string name="auth_open_chat_console">使用終端機開啟對話</string>
|
||||
<string name="message_delivery_error_title">傳送訊息有錯誤</string>
|
||||
<string name="message_delivery_error_desc">大概你的聯絡人已經刪除了和你的對話並且已經沒有和你有連線。</string>
|
||||
<string name="for_me_only">只為我刪除</string>
|
||||
<string name="for_everybody">為所有人刪除</string>
|
||||
<string name="icon_descr_edited">已修改</string>
|
||||
<string name="icon_descr_sent_msg_status_sent">已傳送</string>
|
||||
<string name="icon_descr_sent_msg_status_unauthorized_send">未經授權傳送</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">傳送失敗</string>
|
||||
<string name="personal_welcome">歡迎 <xliff:g>%1$s</xliff:g>!</string>
|
||||
<string name="welcome">歡迎!</string>
|
||||
<string name="this_text_is_available_in_settings">這文字在設定中可用</string>
|
||||
<string name="contact_connection_pending">連接中…</string>
|
||||
<string name="group_preview_you_are_invited">你被邀請加入至群組</string>
|
||||
<string name="group_preview_join_as">加入為 %s</string>
|
||||
<string name="group_connection_pending">連接中…</string>
|
||||
<string name="tap_to_start_new_chat">點擊開始新對話</string>
|
||||
<string name="file_not_found">檔案找不到</string>
|
||||
<string name="voice_message_with_duration">語音訊息 (<xliff:g id="duration">%1$s</xliff:g>)</string>
|
||||
<string name="voice_message_send_text">語音訊息…</string>
|
||||
<string name="icon_descr_record_voice_message">錄製語音訊息</string>
|
||||
<string name="you_need_to_allow_to_send_voice">你需要允許你的聯絡人傳送語音訊息才能使他們可以傳送給你。</string>
|
||||
<string name="voice_messages_prohibited">禁止語音訊息!</string>
|
||||
<string name="ask_your_contact_to_enable_voice">請詢問你的聯絡人啟用語音訊息</string>
|
||||
<string name="only_group_owners_can_enable_voice">只有群組的創建人才能啟用語音訊息</string>
|
||||
<string name="send_verb">傳送</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">請確定你使用了正確的連結或者叫你的聯絡人傳送一個新的連結給你。</string>
|
||||
<string name="connection_error_auth">連接錯誤 (AUTH)</string>
|
||||
<string name="connection_error_auth_desc">除非你的聯絡人刪除了連結或此連結已經被使用,否則它可能是一個錯誤 - 請匯報問題。
|
||||
\n要連線,請詢問你的聯絡人建立新的連結和確保你的網路是隱定的。</string>
|
||||
<string name="error_accepting_contact_request">接受聯絡人的連接時出錯</string>
|
||||
<string name="error_deleting_pending_contact_connection">刪除聯絡人請求時出錯</string>
|
||||
<string name="error_changing_address">更改地址時出錯</string>
|
||||
<string name="smp_server_test_create_queue">建立佇列</string>
|
||||
<string name="smp_server_test_secure_queue">安全佇列</string>
|
||||
<string name="smp_server_test_delete_queue">刪除佇列</string>
|
||||
<string name="smp_server_test_disconnect">斷開連接</string>
|
||||
<string name="turn_off_battery_optimization">為了使用它,請 <b>禁用電量優化</b> <xliff:g id="appName">SimpleX</xliff:g> 在下一個對話中。否則,通知將會禁用。</string>
|
||||
<string name="enter_passphrase_notification_desc">在接收通知之前,請你確入數據庫的密碼</string>
|
||||
<string name="periodic_notifications_desc">應用程式會定期推送新訊息 — 它每天會消耗百分之幾的電量。 應用程式將不使用推送通知 — 你裝置中的數據不會傳送至伺服器。</string>
|
||||
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服務</string>
|
||||
<string name="simplex_service_notification_text">正在接收訊息…</string>
|
||||
<string name="hide_notification">隱藏</string>
|
||||
<string name="ntf_channel_messages">SimpleX Chat 訊息</string>
|
||||
<string name="notifications_mode_off">當應用程式是開啟</string>
|
||||
<string name="notifications_mode_periodic">定期啟用</string>
|
||||
<string name="notification_preview_mode_message_desc">顯示聯絡人名稱和訊息內容</string>
|
||||
<string name="notification_display_mode_hidden_desc">隱藏聯絡人名稱和訊息內容</string>
|
||||
<string name="notification_preview_somebody">聯絡人隱藏:</string>
|
||||
<string name="notification_preview_new_message">有新訊息</string>
|
||||
<string name="notification_contact_connected">已連線</string>
|
||||
<string name="la_notice_title_simplex_lock">SimpleX 鎖定</string>
|
||||
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">為了保護你的個人訊息,開啟 SimpleX 鎖定。
|
||||
\n在啟用此功能之前,系統將提示您完成螢幕鎖定。</string>
|
||||
<string name="la_notice_turn_on">打開</string>
|
||||
<string name="auth_simplex_lock_turned_on">SimpleX 鎖定已開啟</string>
|
||||
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">你的裝置沒有啟動螢幕鎖定。您可以通過設定內啟動螢幕鎖定,當你啟動後就可以使用 SimpleX 鎖定</string>
|
||||
<string name="edit_verb">修改</string>
|
||||
<string name="delete_verb">刪除</string>
|
||||
<string name="reveal_verb">透露</string>
|
||||
<string name="delete_message__question">確定要刪除訊息?</string>
|
||||
<string name="delete_message_cannot_be_undone_warning">訊息會刪除 - 並且不能撤消!</string>
|
||||
<string name="delete_message_mark_deleted_warning">訊息將被標記為刪除。 接收訊息的人(多個) 能夠透露此訊息。</string>
|
||||
<string name="icon_descr_received_msg_status_unread">未讀取</string>
|
||||
<string name="you_have_no_chats">你沒有聯絡人</string>
|
||||
<string name="image_decoding_exception_title">解碼錯誤</string>
|
||||
<string name="contact_sent_large_file">你的的聯絡人傳送的檔案大於目前支持的最大大小 (<xliff:g id="maxFileSize">%1$s</xliff:g>).</string>
|
||||
<string name="images_limit_desc">只能同一時間傳送十張圖片</string>
|
||||
<string name="maximum_supported_file_size">目前支援的最大檣案大小為 <xliff:g id="maxFileSize">%1$s</xliff:g>。</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">下載檔案需要傳送者上線的時候才能下載檣案,請等待對方上線!</string>
|
||||
<string name="voice_message">語音訊息</string>
|
||||
<string name="send_live_message">傳送即時顯示的訊息</string>
|
||||
<string name="live_message">即時顯示的訊息!</string>
|
||||
<string name="send_live_message_desc">傳送即時顯示的訊息 - 這會即時顯示你在輸入中的文字</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(掃描或使用剪貼薄貼上)</string>
|
||||
<string name="toast_permission_denied">沒有權限</string>
|
||||
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">為了保護你的私隱,即時推送通知沒有使用 <b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\"><xliff:g id=\"appName\">SimpleX</xliff:g> 後台通知 - 它每天會使用你電量的百分之幾。</string>
|
||||
<string name="periodic_notifications">定期通知</string>
|
||||
<string name="notifications_mode_periodic_desc">每十分鐘會檢查一次訊息,最多一分鐘</string>
|
||||
<string name="notification_preview_mode_message">訊息文字</string>
|
||||
<string name="notification_preview_mode_contact">聯絡人名稱</string>
|
||||
<string name="notification_preview_mode_hidden">隱藏</string>
|
||||
<string name="image_descr">圖片</string>
|
||||
<string name="icon_descr_waiting_for_image">等待圖片</string>
|
||||
<string name="icon_descr_image_snd_complete">圖片已傳送</string>
|
||||
<string name="waiting_for_image">等待圖片</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">下載圖片需要傳送者上線的時候才能下載圖片,請等待對方上線!</string>
|
||||
<string name="image_saved">圖片已儲存至圖片庫</string>
|
||||
<string name="notifications">通知</string>
|
||||
<string name="delete_contact_question">刪除聯給人?</string>
|
||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">此聯絡人和此聯絡人的訊息會全部刪除 - 這不能還原!</string>
|
||||
<string name="button_delete_contact">刪除聯絡人</string>
|
||||
<string name="text_field_set_contact_placeholder">設置聯絡人名稱…</string>
|
||||
<string name="icon_descr_server_status_connected">已連接</string>
|
||||
<string name="icon_descr_server_status_disconnected">已斷開連接</string>
|
||||
<string name="icon_descr_server_status_error">錯誤</string>
|
||||
<string name="icon_descr_server_status_pending">待處理</string>
|
||||
<string name="switch_receiving_address_question">切換接收位置?</string>
|
||||
<string name="switch_receiving_address_desc">此功能目前還是實驗階段! 對方需要使用 4.2 版本或更高的版本才能成功生效。 地址更改後,你會在對話中看到新訊息 - 請測試你更改地址後是否仍然能夠收到來自這聯絡人(或群組內的成員)的訊息。</string>
|
||||
<string name="view_security_code">查看安全碼</string>
|
||||
<string name="verify_security_code">驗證安全碼</string>
|
||||
<string name="icon_descr_send_message">傳送訊息</string>
|
||||
<string name="error_deleting_user">刪除帳號時出現錯誤</string>
|
||||
<string name="auth_stop_chat">停止對話</string>
|
||||
<string name="image_decoding_exception_desc">圖片不能解碼,嘗試其他圖片或聯絡開發者。</string>
|
||||
<string name="icon_descr_file">檔案</string>
|
||||
<string name="large_file">大型檔案</string>
|
||||
<string name="waiting_for_file">等待檔案中</string>
|
||||
<string name="confirm_verb">確定</string>
|
||||
<string name="reset_verb">重設</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="no_details">沒有詳細資料</string>
|
||||
<string name="add_contact">一次性邀請連結</string>
|
||||
<string name="copied">已複製至你的剪貼薄</string>
|
||||
<string name="connect_via_link_or_qr">使用連結連接 / 使用二維碼</string>
|
||||
<string name="scan_QR_code">掃描二維碼</string>
|
||||
<string name="only_stored_on_members_devices">(僅由群組成員存儲)</string>
|
||||
<string name="contact_wants_to_connect_with_you">想和你對話!</string>
|
||||
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> 徽標</string>
|
||||
<string name="connect_via_link">通過使用連結連接</string>
|
||||
<string name="smp_servers_preset_server">預設伺服器</string>
|
||||
<string name="smp_servers_your_server_address">你的伺服器位址</string>
|
||||
<string name="smp_servers_delete_server">刪除伺服器</string>
|
||||
<string name="your_ICE_servers">你的 ICE 伺服器</string>
|
||||
<string name="enter_one_ICE_server_per_line">ICE 伺服器(每行一個)</string>
|
||||
<string name="network_use_onion_hosts">使用 .onion 主機</string>
|
||||
<string name="network_use_onion_hosts_no_desc">Onion 主機不會啟用</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">當有的時候,Onion 將會啟用。</string>
|
||||
<string name="network_use_onion_hosts_no_desc_in_alert">Onion 主機不會被啟用。</string>
|
||||
<string name="network_session_mode_entity">連接</string>
|
||||
<string name="delete_address">刪除址址</string>
|
||||
<string name="colored">顏色</string>
|
||||
<string name="how_to_use_your_servers">如何使用你的伺服器</string>
|
||||
<string name="core_build_timestamp">核心建立於:%s</string>
|
||||
<string name="to_connect_via_link_title">使用連結連接</string>
|
||||
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 桌面版:於程式內掃描一個已存在的二維碼,通過使用二維碼掃描。</string>
|
||||
<string name="icon_descr_settings">設定</string>
|
||||
<string name="this_QR_code_is_not_a_link">這個二維碼不是一個連結!</string>
|
||||
<string name="create_one_time_link">建立一次性邀請連結</string>
|
||||
<string name="network_use_onion_hosts_prefer">當有</string>
|
||||
<string name="core_version">核心版本:v%s</string>
|
||||
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
|
||||
<string name="create_address">建立地址</string>
|
||||
<string name="contact_requests">聯絡人請求</string>
|
||||
<string name="section_title_welcome_message">歡迎訊息</string>
|
||||
<string name="edit_image">編輯圖片</string>
|
||||
<string name="italic">斜體</string>
|
||||
<string name="callstatus_rejected">已拒絕收聽電話</string>
|
||||
<string name="callstatus_connecting">連接收聽電話 …</string>
|
||||
<string name="callstate_waiting_for_confirmation">等待對方確定 …</string>
|
||||
<string name="contribute">貢獻</string>
|
||||
<string name="rate_the_app">評價程式</string>
|
||||
<string name="save_servers_button">儲存</string>
|
||||
<string name="ensure_ICE_server_address_are_correct_format_and_unique">請確保你的 WebRTC ICE 伺服器地址是正確的格式,每行也有分隔和沒有重複。</string>
|
||||
<string name="network_disable_socks">使用直接互聯網連接?</string>
|
||||
<string name="network_disable_socks_info">如果你確定,你的訊息伺服器能夠看到你的 IP 位置,和你的網路供應商 - 你正在連接到哪些伺服器。</string>
|
||||
<string name="update_onion_hosts_settings_question">更新 .onion 主機設定?</string>
|
||||
<string name="delete_image">刪除圖片</string>
|
||||
<string name="callstate_starting">開始中 …</string>
|
||||
<string name="callstate_waiting_for_answer">等待對方回應 …</string>
|
||||
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">如果你收到 <xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"appName\">SimepleX Chat 邀請連結,你可以使用瀏覧器開啟</string>
|
||||
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 電話版: 點擊 <b>使用電話程式開啟</b>, 然後在程式內點擊 <b>連接</b>.</string>
|
||||
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">如果您選擇拒絕傳送者將不會收到通知。</string>
|
||||
<string name="reject_contact_button">拒絕</string>
|
||||
<string name="delete_contact_menu_action">刪除</string>
|
||||
<string name="delete_group_menu_action">刪除</string>
|
||||
<string name="mark_read">標記為已讀</string>
|
||||
<string name="mark_unread">標記為未讀</string>
|
||||
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">你的聯絡人需要上線才能連接成功。
|
||||
\n你可以取消此連線和刪除此聯絡人(或者你可以稍後使用新的連結再試一次)。</string>
|
||||
<string name="image_descr_qr_code">二維碼</string>
|
||||
<string name="image_descr_profile_image">個人檣案頭像</string>
|
||||
<string name="image_descr_link_preview">預覧連結圖片</string>
|
||||
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> 地址</string>
|
||||
<string name="icon_descr_help">幫助</string>
|
||||
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g> 團隊</string>
|
||||
<string name="icon_descr_email">電郵</string>
|
||||
<string name="icon_descr_more_button">查看更多</string>
|
||||
<string name="show_QR_code">顯示二維碼</string>
|
||||
<string name="invalid_QR_code">無效的二維碼</string>
|
||||
<string name="invalid_contact_link">無效連結!</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">這個連結不是一個有效的連接連結!</string>
|
||||
<string name="connection_request_sent">連線請求已傳送</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">當群組的建立人上線的時侯便會成功連接至群組,請耐心等待!</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">當你的連接請求已被接受的時候便會連接成功,請耐心等待!</string>
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">當你的聯絡人上線後便會連線成功,請耐心等待!</string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">如果你沒有聯絡人,<b>於視像對話內出示你的二維碼</b>,或者分享連結。</string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">你的個人檔案會傳送結你的聯絡人!</string>
|
||||
<string name="paste_connection_link_below_to_connect">將你收到的連結貼上至下面的框內以與你的聯絡人對話。</string>
|
||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">如果你沒有聯絡人,你可以於 <b>視像對話中掃描二維碼</b>,或者你可以分享一個邀請連結給你的聯絡人。</string>
|
||||
<string name="your_profile_will_be_sent">你的個人檔案會傳送給你的聯絡人。</string>
|
||||
<string name="paste_button">貼上</string>
|
||||
<string name="this_string_is_not_a_connection_link">這些字串不是連接連結!</string>
|
||||
<string name="you_can_also_connect_by_clicking_the_link">你也可以點擊連結連接。如果連線於瀏覧器中開啟,點擊 <b>於程式內開啟</b> 按扭。</string>
|
||||
<string name="one_time_link">一次性邀請連結</string>
|
||||
<string name="your_contact_address">你的聯絡人地址</string>
|
||||
<string name="scan_code">掃描二碼碼</string>
|
||||
<string name="incorrect_code">錯誤的安全碼!</string>
|
||||
<string name="scan_code_from_contacts_app">於你的聯絡人的程式內掃描安全碼</string>
|
||||
<string name="security_code">安全碼</string>
|
||||
<string name="markdown_help">Markdown 幫助</string>
|
||||
<string name="markdown_in_messages">於訊息中使用 Markdown 語法</string>
|
||||
<string name="smp_servers_enter_manually">人手輸入伺服器地址</string>
|
||||
<string name="smp_servers_use_server">使用伺服器</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">用於新的連接</string>
|
||||
<string name="smp_servers_invalid_address">無效的伺服器地址</string>
|
||||
<string name="smp_servers_per_user">此伺服器用於你目前的帳號</string>
|
||||
<string name="use_simplex_chat_servers__question">使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 伺服器?</string>
|
||||
<string name="your_SMP_servers">你的 SMP 伺服器</string>
|
||||
<string name="using_simplex_chat_servers">目前使用中 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 伺服器。</string>
|
||||
<string name="how_to">如何?</string>
|
||||
<string name="configure_ICE_servers">配置 ICE 伺服器</string>
|
||||
<string name="saved_ICE_servers_will_be_removed">已儲存的 WebRTC ICE 伺服器將會移除。</string>
|
||||
<string name="error_saving_ICE_servers">儲存 ICE 伺服器時有錯誤</string>
|
||||
<string name="network_use_onion_hosts_no">不要</string>
|
||||
<string name="network_use_onion_hosts_required">需要</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Onion 主機會當有的時侯啟用</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">連接時將需要 Onion 主機</string>
|
||||
<string name="delete_address__question">刪除地址?</string>
|
||||
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">你可以使用連結或二維碼分享你的地址 - 任何人也可以和你連線。如果你不主動刪除你的聯絡人,你並不會遺失你的聯絡人</string>
|
||||
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">你的個人檔案只會儲存於你的裝置和只會分享給你的聯絡人。
|
||||
\n
|
||||
\n<xliff:g id="appName">SimpleX</xliff:g> 伺服器並不會看到你的個人檔案。</string>
|
||||
<string name="save_and_notify_contact">儲存並通知你的聯絡人</string>
|
||||
<string name="save_and_notify_contacts">儲存並通知你的多個聯絡人</string>
|
||||
<string name="your_profile_is_stored_on_your_device">你的個人檔案,聯絡人和傳送的訊息只會儲存於你的個人裝置內。</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">你的個人檔案只會和你的聯絡人分享</string>
|
||||
<string name="create_profile_button">建立</string>
|
||||
<string name="how_to_use_markdown">如何使用 Markdown 語法</string>
|
||||
<string name="you_can_use_markdown_to_format_messages__prompt">你可以使用 Markdown 語法以更清楚標明你的訊息:</string>
|
||||
<string name="strikethrough">刪除線</string>
|
||||
<string name="callstatus_missed">你錯過了電話</string>
|
||||
<string name="callstate_received_answer">收到回應 …</string>
|
||||
<string name="callstate_connecting">連接中 …</string>
|
||||
<string name="callstate_ended">完結</string>
|
||||
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">你的聯絡人可以使用二維碼在此程式</string>
|
||||
<string name="connect_button">連接</string>
|
||||
<string name="network_and_servers">網路 & 伺服器</string>
|
||||
<string name="network_settings_title">網路設定</string>
|
||||
<string name="network_socks_toggle">使用 SOCKS 代理伺服器 (端口 9050)</string>
|
||||
<string name="network_enable_socks">使用 SOCKS 代理伺服器</string>
|
||||
<string name="save_and_notify_group_members">儲存並通知群組內的聯絡人</string>
|
||||
<string name="exit_without_saving">退出並且不儲存</string>
|
||||
<string name="you_control_your_chat">對話由你控制!</string>
|
||||
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">一個保護你的隱私和傳送安全的通訊應用程式平台。</string>
|
||||
<string name="we_do_not_store_contacts_or_messages_on_servers">我們不會在伺服器內儲存你的任何聯絡人和消息(一旦傳送)。</string>
|
||||
<string name="create_profile">建立帳號</string>
|
||||
<string name="callstate_received_confirmation">回應已確認</string>
|
||||
<string name="you_can_connect_to_simplex_chat_founder">您可以透過 <font color="#0088ff">連接到 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 開發人員提出任何問題並接收更新</font>。</string>
|
||||
<string name="to_start_a_new_chat_help_header">開始新的對話</string>
|
||||
<string name="set_contact_name">設定聯聯人名稱</string>
|
||||
<string name="you_invited_your_contact">你已邀請了你的聯絡人</string>
|
||||
<string name="you_accepted_connection">你接受了連接</string>
|
||||
<string name="delete_pending_connection__question">刪除等待中的連接?</string>
|
||||
<string name="contact_you_shared_link_with_wont_be_able_to_connect">當聯絡人發現此連結後,嘗試點擊的聯絡人將無法連結!</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">你所接受的連接將會被取消!</string>
|
||||
<string name="alert_title_contact_connection_pending">你的聯絡人現在還沒連接!</string>
|
||||
<string name="icon_descr_close_button">關閉按鈕</string>
|
||||
<string name="mark_code_verified">已標記為已驗證</string>
|
||||
<string name="clear_verification">清除驗認</string>
|
||||
<string name="to_verify_compare">如要和你的聯絡人驗認端對端加密,於對方的程式內掃描二維碼。</string>
|
||||
<string name="is_verified">%s 已驗證</string>
|
||||
<string name="is_not_verified">%s 並未驗證</string>
|
||||
<string name="your_simplex_contact_address">你的 <xliff:g id="appName">SimpleX</xliff:g> 聯絡地址</string>
|
||||
<string name="your_chat_profiles">你的個人檔案</string>
|
||||
<string name="database_passphrase_and_export">資料庫密碼及匯出</string>
|
||||
<string name="send_us_an_email">傳送電郵</string>
|
||||
<string name="chat_lock">SimpleX 鎖定</string>
|
||||
<string name="smp_servers">SMP 服務</string>
|
||||
<string name="smp_servers_preset_address">預設伺服器地址</string>
|
||||
<string name="smp_servers_test_server">測試伺服器</string>
|
||||
<string name="smp_servers_test_servers">測試多個伺服器</string>
|
||||
<string name="smp_servers_save">儲存伺服器</string>
|
||||
<string name="smp_servers_test_failed">伺服器測試失敗!</string>
|
||||
<string name="smp_servers_test_some_failed">有一些伺服器測試失敗:</string>
|
||||
<string name="smp_servers_scan_qr">使用二維碼掃描伺服器</string>
|
||||
<string name="smp_servers_your_server">你的伺服器</string>
|
||||
<string name="network_use_onion_hosts_required_desc">連接時將會需要使用 Onion 主機</string>
|
||||
<string name="network_session_mode_user">對話檔案</string>
|
||||
</resources>
|
||||
@@ -28,6 +28,7 @@
|
||||
<string name="unknown_message_format">unknown message format</string>
|
||||
<string name="invalid_message_format">invalid message format</string>
|
||||
<string name="live">LIVE</string>
|
||||
<string name="moderated_description">moderated</string>
|
||||
<string name="invalid_chat">invalid chat</string>
|
||||
<string name="invalid_data">invalid data</string>
|
||||
|
||||
@@ -221,6 +222,9 @@
|
||||
<string name="images_limit_desc">Only 10 images can be sent at the same time</string>
|
||||
<string name="image_decoding_exception_title">Decoding error</string>
|
||||
<string name="image_decoding_exception_desc">The image cannot be decoded. Please, try a different image or contact developers.</string>
|
||||
<string name="you_are_observer">you are observer</string>
|
||||
<string name="observer_cant_send_message_title">You can\'t send messages!</string>
|
||||
<string name="observer_cant_send_message_desc">Please contact group admin.</string>
|
||||
|
||||
<!-- Images - chat.simplex.app.views.chat.item.CIImageView.kt -->
|
||||
<string name="image_descr">Image</string>
|
||||
@@ -673,7 +677,6 @@
|
||||
<string name="your_privacy">Your privacy</string>
|
||||
<string name="protect_app_screen">Protect app screen</string>
|
||||
<string name="auto_accept_images">Auto-accept images</string>
|
||||
<string name="transfer_images_faster">Transfer images faster</string>
|
||||
<string name="send_link_previews">Send link previews</string>
|
||||
<string name="full_backup">App data backup</string>
|
||||
|
||||
@@ -868,6 +871,7 @@
|
||||
<string name="snd_conn_event_switch_queue_phase_changing">changing address…</string>
|
||||
|
||||
<!-- GroupMemberRole -->
|
||||
<string name="group_member_role_observer">observer</string>
|
||||
<string name="group_member_role_member">member</string>
|
||||
<string name="group_member_role_admin">admin</string>
|
||||
<string name="group_member_role_owner">owner</string>
|
||||
@@ -890,6 +894,7 @@
|
||||
<!-- AddGroupMembersView.kt -->
|
||||
<string name="no_contacts_to_add">No contacts to add</string>
|
||||
<string name="new_member_role">New member role</string>
|
||||
<string name="initial_member_role">Initial role</string>
|
||||
<string name="icon_descr_expand_role">Expand role selection</string>
|
||||
<string name="invite_to_group_button">Invite to group</string>
|
||||
<string name="skip_inviting_button">Skip inviting members</string>
|
||||
@@ -919,6 +924,7 @@
|
||||
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">You can share a link or a QR code - anybody will be able to join the group. You won\'t lose members of the group if you later delete it.</string>
|
||||
<string name="all_group_members_will_remain_connected">All group members will remain connected.</string>
|
||||
<string name="error_creating_link_for_group">Error creating group link</string>
|
||||
<string name="error_updating_link_for_group">Error updating group link</string>
|
||||
<string name="error_deleting_link_for_group">Error deleting group link</string>
|
||||
<string name="only_group_owners_can_change_prefs">Only group owners can change group preferences.</string>
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<paths>
|
||||
<files-path name="my_files" path="/"/>
|
||||
<files-path name="app_temp" path="../app_temp"/>
|
||||
</paths>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
# SimpleX Chat iOS app
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "decentralized_light.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "decentralized_light@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "decentralized_light@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 43 KiB |
@@ -545,6 +545,25 @@ final class Chat: ObservableObject, Identifiable {
|
||||
self.chatStats = chatStats
|
||||
}
|
||||
|
||||
var userCanSend: Bool {
|
||||
switch chatInfo {
|
||||
case .direct: return true
|
||||
case let .group(groupInfo):
|
||||
let m = groupInfo.membership
|
||||
return m.memberActive && m.memberRole >= .member
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
|
||||
var userIsObserver: Bool {
|
||||
switch chatInfo {
|
||||
case let .group(groupInfo):
|
||||
let m = groupInfo.membership
|
||||
return m.memberActive && m.memberRole == .observer
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
|
||||
var id: ChatId { get { chatInfo.id } }
|
||||
|
||||
var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } }
|
||||
|
||||
@@ -133,7 +133,7 @@ func imageHasAlpha(_ img: UIImage) -> Bool {
|
||||
context.draw(cgImage, in: CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height))
|
||||
if let data = context.data {
|
||||
let data = data.assumingMemoryBound(to: UInt8.self)
|
||||
let size = cgImage.width * cgImage.height
|
||||
let size = cgImage.width * cgImage.height * 4
|
||||
var i = 0
|
||||
while i < size {
|
||||
if data[i] < 255 { return true }
|
||||
@@ -203,3 +203,51 @@ func dropImagePrefix(_ s: String) -> String {
|
||||
private func dropPrefix(_ s: String, _ prefix: String) -> String {
|
||||
s.hasPrefix(prefix) ? String(s.dropFirst(prefix.count)) : s
|
||||
}
|
||||
|
||||
extension UIImage {
|
||||
func replaceColor(_ from: UIColor, _ to: UIColor) -> UIImage {
|
||||
if let cgImage = cgImage {
|
||||
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
||||
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedFirst.rawValue)
|
||||
if let context = CGContext(data: nil, width: cgImage.width, height: cgImage.height, bitsPerComponent: 8, bytesPerRow: cgImage.width * 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) {
|
||||
context.draw(cgImage, in: CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height))
|
||||
if let data = context.data {
|
||||
var fromAlpha: CGFloat = 0
|
||||
var fromRed: CGFloat = 0
|
||||
var fromGreen: CGFloat = 0
|
||||
var fromBlue: CGFloat = 0
|
||||
var toAlpha: CGFloat = 0
|
||||
var toRed: CGFloat = 0
|
||||
var toGreen: CGFloat = 0
|
||||
var toBlue: CGFloat = 0
|
||||
from.getRed(&fromRed, green: &fromGreen, blue: &fromBlue, alpha: &fromAlpha)
|
||||
to.getRed(&toRed, green: &toGreen, blue: &toBlue, alpha: &toAlpha)
|
||||
let fAlpha = UInt8(UInt8(fromAlpha * 255))
|
||||
let fRed = UInt8(fromRed * 255)
|
||||
let fGreen = UInt8(fromGreen * 255)
|
||||
let fBlue = UInt8(fromBlue * 255)
|
||||
let tAlpha = UInt8(toAlpha * 255)
|
||||
let tRed = UInt8(toRed * 255)
|
||||
let tGreen = UInt8(toGreen * 255)
|
||||
let tBlue = UInt8(toBlue * 255)
|
||||
let data = data.assumingMemoryBound(to: UInt8.self)
|
||||
let size = cgImage.width * cgImage.height * 4
|
||||
var i = 0
|
||||
while i < size {
|
||||
if data[i] == fAlpha && data[i + 1] == fRed && data[i + 2] == fGreen && data[i + 3] == fBlue {
|
||||
data[i + 0] = tAlpha
|
||||
data[i + 1] = tRed
|
||||
data[i + 2] = tGreen
|
||||
data[i + 3] = tBlue
|
||||
}
|
||||
i += 4
|
||||
}
|
||||
}
|
||||
if let img = context.makeImage() {
|
||||
return UIImage(cgImage: img)
|
||||
}
|
||||
}
|
||||
}
|
||||
return self
|
||||
}
|
||||
}
|
||||
@@ -344,7 +344,7 @@ func setUserSMPServers(smpServers: [ServerCfg]) async throws {
|
||||
|
||||
func testSMPServer(smpServer: String) async throws -> Result<(), SMPTestFailure> {
|
||||
guard let userId = ChatModel.shared.currentUser?.userId else { throw RuntimeError("testSMPServer: no current user") }
|
||||
let r = await chatSendCmd(.testSMPServer(userId: userId, smpServer: smpServer))
|
||||
let r = await chatSendCmd(.apiTestSMPServer(userId: userId, smpServer: smpServer))
|
||||
if case let .smpTestResult(_, testFailure) = r {
|
||||
if let t = testFailure {
|
||||
return .failure(t)
|
||||
@@ -636,13 +636,12 @@ func apiChatUnread(type: ChatType, id: Int64, unreadChat: Bool) async throws {
|
||||
}
|
||||
|
||||
func receiveFile(user: User, fileId: Int64) async {
|
||||
let inline = privacyTransferImagesInlineGroupDefault.get()
|
||||
if let chatItem = await apiReceiveFile(fileId: fileId, inline: inline) {
|
||||
if let chatItem = await apiReceiveFile(fileId: fileId) {
|
||||
DispatchQueue.main.async { chatItemSimpleUpdate(user, chatItem) }
|
||||
}
|
||||
}
|
||||
|
||||
func apiReceiveFile(fileId: Int64, inline: Bool) async -> AChatItem? {
|
||||
func apiReceiveFile(fileId: Int64, inline: Bool? = nil) async -> AChatItem? {
|
||||
let r = await chatSendCmd(.receiveFile(fileId: fileId, inline: inline))
|
||||
let am = AlertManager.shared
|
||||
if case let .rcvFileAccepted(_, chatItem) = r { return chatItem }
|
||||
@@ -869,9 +868,15 @@ func apiUpdateGroup(_ groupId: Int64, _ groupProfile: GroupProfile) async throws
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiCreateGroupLink(_ groupId: Int64) async throws -> String {
|
||||
let r = await chatSendCmd(.apiCreateGroupLink(groupId: groupId))
|
||||
if case let .groupLinkCreated(_, _, connReq) = r { return connReq }
|
||||
func apiCreateGroupLink(_ groupId: Int64, memberRole: GroupMemberRole = .member) async throws -> (String, GroupMemberRole) {
|
||||
let r = await chatSendCmd(.apiCreateGroupLink(groupId: groupId, memberRole: memberRole))
|
||||
if case let .groupLinkCreated(_, _, connReq, memberRole) = r { return (connReq, memberRole) }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGroupLinkMemberRole(_ groupId: Int64, memberRole: GroupMemberRole = .member) async throws -> (String, GroupMemberRole) {
|
||||
let r = await chatSendCmd(.apiGroupLinkMemberRole(groupId: groupId, memberRole: memberRole))
|
||||
if case let .groupLink(_, _, connReq, memberRole) = r { return (connReq, memberRole) }
|
||||
throw r
|
||||
}
|
||||
|
||||
@@ -881,11 +886,11 @@ func apiDeleteGroupLink(_ groupId: Int64) async throws {
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGetGroupLink(_ groupId: Int64) throws -> String? {
|
||||
func apiGetGroupLink(_ groupId: Int64) throws -> (String, GroupMemberRole)? {
|
||||
let r = chatSendCmdSync(.apiGetGroupLink(groupId: groupId))
|
||||
switch r {
|
||||
case let .groupLink(_, _, connReq):
|
||||
return connReq
|
||||
case let .groupLink(_, _, connReq, memberRole):
|
||||
return (connReq, memberRole)
|
||||
case .chatCmdError(_, chatError: .errorStore(storeError: .groupLinkNotFound)):
|
||||
return nil
|
||||
default: throw r
|
||||
@@ -1181,6 +1186,10 @@ func processReceivedMsg(_ res: ChatResponse) async {
|
||||
if active(user) {
|
||||
m.updateGroup(toGroup)
|
||||
}
|
||||
case let .memberRole(user, groupInfo, _, _, _, _):
|
||||
if active(user) {
|
||||
m.updateGroup(groupInfo)
|
||||
}
|
||||
case let .rcvFileStart(user, aChatItem):
|
||||
chatItemSimpleUpdate(user, aChatItem)
|
||||
case let .rcvFileComplete(user, aChatItem):
|
||||
@@ -1271,11 +1280,8 @@ func chatItemSimpleUpdate(_ user: User, _ aChatItem: AChatItem) {
|
||||
let m = ChatModel.shared
|
||||
let cInfo = aChatItem.chatInfo
|
||||
let cItem = aChatItem.chatItem
|
||||
let notify = { NtfManager.shared.notifyMessageReceived(user, cInfo, cItem) }
|
||||
if !active(user) {
|
||||
notify()
|
||||
} else if m.upsertChatItem(cInfo, cItem) {
|
||||
notify()
|
||||
if active(user) && m.upsertChatItem(cInfo, cItem) {
|
||||
NtfManager.shared.notifyMessageReceived(user, cInfo, cItem)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -228,8 +228,9 @@ struct ActiveCallOverlay: View {
|
||||
Text(call.callState.text)
|
||||
HStack {
|
||||
Text(call.encryptionStatus)
|
||||
if let connInfo = call.connectionInfo?.text {
|
||||
Text("(") + Text(connInfo) + Text(")")
|
||||
if let connInfo = call.connectionInfo {
|
||||
// Text("(") + Text(connInfo.text) + Text(", \(connInfo.protocolText))")
|
||||
Text("(") + Text(connInfo.text) + Text(")")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -362,22 +362,37 @@ struct ConnectionInfo: Codable, Equatable {
|
||||
var remoteCandidate: RTCIceCandidate?
|
||||
|
||||
var text: LocalizedStringKey {
|
||||
get {
|
||||
if localCandidate?.candidateType == .host && remoteCandidate?.candidateType == .host {
|
||||
return "peer-to-peer"
|
||||
} else if localCandidate?.candidateType == .relay && remoteCandidate?.candidateType == .relay {
|
||||
return "via relay"
|
||||
} else {
|
||||
let unknown = NSLocalizedString("unknown", comment: "connection info")
|
||||
return "\(localCandidate?.candidateType?.rawValue ?? unknown) / \(remoteCandidate?.candidateType?.rawValue ?? unknown)"
|
||||
}
|
||||
let local = localCandidate?.candidateType
|
||||
let remote = remoteCandidate?.candidateType
|
||||
if local == .host && remote == .host {
|
||||
return "peer-to-peer"
|
||||
} else if local == .relay && remote == .relay {
|
||||
return "via relay"
|
||||
} else {
|
||||
let unknown = NSLocalizedString("unknown", comment: "connection info")
|
||||
return "\(local?.rawValue ?? unknown) / \(remote?.rawValue ?? unknown)"
|
||||
}
|
||||
}
|
||||
|
||||
var protocolText: String {
|
||||
let unknown = NSLocalizedString("unknown", comment: "connection info")
|
||||
let local = localCandidate?.protocol?.uppercased() ?? unknown
|
||||
let localRelay = localCandidate?.relayProtocol?.uppercased() ?? unknown
|
||||
let remote = remoteCandidate?.protocol?.uppercased() ?? unknown
|
||||
let localText = localRelay == local || localCandidate?.relayProtocol == nil
|
||||
? local
|
||||
: "\(local) (\(localRelay))"
|
||||
return local == remote
|
||||
? localText
|
||||
: "\(localText) / \(remote)"
|
||||
}
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate
|
||||
struct RTCIceCandidate: Codable, Equatable {
|
||||
var candidateType: RTCIceCandidateType?
|
||||
var `protocol`: String?
|
||||
var relayProtocol: String?
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate/type
|
||||
@@ -396,18 +411,20 @@ struct RTCIceServer: Codable, Equatable {
|
||||
}
|
||||
|
||||
// the servers are expected in this format:
|
||||
// stun:stun.simplex.im:443
|
||||
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443
|
||||
// stun:stun.simplex.im:443?transport=tcp
|
||||
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp
|
||||
func parseRTCIceServer(_ str: String) -> RTCIceServer? {
|
||||
var s = replaceScheme(str, "stun:")
|
||||
s = replaceScheme(s, "turn:")
|
||||
s = replaceScheme(s, "turns:")
|
||||
if let u: URL = URL(string: s),
|
||||
let scheme = u.scheme,
|
||||
let host = u.host,
|
||||
let port = u.port,
|
||||
u.path == "" && (scheme == "stun" || scheme == "turn") {
|
||||
u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns") {
|
||||
let query = u.query == nil || u.query == "" ? "" : "?" + (u.query ?? "")
|
||||
return RTCIceServer(
|
||||
urls: ["\(scheme):\(host):\(port)"],
|
||||
urls: ["\(scheme):\(host):\(port)\(query)"],
|
||||
username: u.user,
|
||||
credential: u.password
|
||||
)
|
||||
|
||||
@@ -75,7 +75,7 @@ struct CIFeaturePreferenceView_Previews: PreviewProvider {
|
||||
let content = CIContent.rcvChatPreference(feature: .timedMessages, allowed: .yes, param: 30)
|
||||
let chatItem = ChatItem(
|
||||
chatDir: .directRcv,
|
||||
meta: CIMeta.getSample(1, .now, content.text, .rcvRead, false, false, false),
|
||||
meta: CIMeta.getSample(1, .now, content.text, .rcvRead),
|
||||
content: content,
|
||||
quotedItem: nil,
|
||||
file: nil
|
||||
|
||||
@@ -138,14 +138,14 @@ struct CIFileView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let sentFile: ChatItem = ChatItem(
|
||||
chatDir: .directSnd,
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
|
||||
content: .sndMsgContent(msgContent: .file("")),
|
||||
quotedItem: nil,
|
||||
file: CIFile.getSample(fileStatus: .sndComplete)
|
||||
)
|
||||
let fileChatItemWtFile = ChatItem(
|
||||
chatDir: .directRcv,
|
||||
meta: CIMeta.getSample(1, .now, "", .rcvRead, false, false, false),
|
||||
meta: CIMeta.getSample(1, .now, "", .rcvRead),
|
||||
content: .rcvMsgContent(msgContent: .file("")),
|
||||
quotedItem: nil,
|
||||
file: nil
|
||||
|
||||
@@ -52,7 +52,7 @@ struct CIMetaView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
CIMetaView(chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent))
|
||||
CIMetaView(chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent, false, true))
|
||||
CIMetaView(chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent, itemEdited: true))
|
||||
CIMetaView(chatItem: ChatItem.getDeletedContentSample())
|
||||
}
|
||||
.previewLayout(.fixed(width: 360, height: 100))
|
||||
|
||||
@@ -221,14 +221,14 @@ struct CIVoiceView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let sentVoiceMessage: ChatItem = ChatItem(
|
||||
chatDir: .directSnd,
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
|
||||
content: .sndMsgContent(msgContent: .voice(text: "", duration: 30)),
|
||||
quotedItem: nil,
|
||||
file: CIFile.getSample(fileStatus: .sndComplete)
|
||||
)
|
||||
let voiceMessageWtFile = ChatItem(
|
||||
chatDir: .directRcv,
|
||||
meta: CIMeta.getSample(1, .now, "", .rcvRead, false, false, false),
|
||||
meta: CIMeta.getSample(1, .now, "", .rcvRead),
|
||||
content: .rcvMsgContent(msgContent: .voice(text: "", duration: 30)),
|
||||
quotedItem: nil,
|
||||
file: nil
|
||||
|
||||
@@ -10,6 +10,7 @@ import SwiftUI
|
||||
import SimpleXChat
|
||||
|
||||
struct DeletedItemView: View {
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
var chatItem: ChatItem
|
||||
var showMember = false
|
||||
|
||||
@@ -26,7 +27,7 @@ struct DeletedItemView: View {
|
||||
}
|
||||
.padding(.leading, 12)
|
||||
.padding(.vertical, 6)
|
||||
.background(Color(uiColor: .tertiarySystemGroupedBackground))
|
||||
.background(chatItemFrameColor(chatItem, colorScheme))
|
||||
.cornerRadius(18)
|
||||
.textSelection(.disabled)
|
||||
}
|
||||
|
||||
@@ -47,14 +47,14 @@ struct FramedCIVoiceView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let sentVoiceMessage: ChatItem = ChatItem(
|
||||
chatDir: .directSnd,
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
|
||||
content: .sndMsgContent(msgContent: .voice(text: "Hello there", duration: 30)),
|
||||
quotedItem: nil,
|
||||
file: CIFile.getSample(fileStatus: .sndComplete)
|
||||
)
|
||||
let voiceMessageWithQuote: ChatItem = ChatItem(
|
||||
chatDir: .directSnd,
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
|
||||
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
|
||||
content: .sndMsgContent(msgContent: .voice(text: "", duration: 30)),
|
||||
quotedItem: CIQuote.getSample(1, .now, "Hi", chatDir: .directRcv),
|
||||
file: CIFile.getSample(fileStatus: .sndComplete)
|
||||
|
||||
@@ -37,7 +37,7 @@ struct MarkedDeletedItemView: View {
|
||||
struct MarkedDeletedItemView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
MarkedDeletedItemView(chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, true, false))
|
||||
MarkedDeletedItemView(chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, itemDeleted: .deleted))
|
||||
}
|
||||
.previewLayout(.fixed(width: 360, height: 200))
|
||||
}
|
||||
|
||||