Merge branch 'master' into master-ghc9
@ -35,7 +35,7 @@ struct ContentView: View {
|
||||
|
||||
var id: String {
|
||||
switch self {
|
||||
case .connectViaUrl: return "connectViaUrl \(link)"
|
||||
case let .connectViaUrl(_, link): return "connectViaUrl \(link)"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -285,18 +285,20 @@ struct ContentView: View {
|
||||
}
|
||||
|
||||
func connectViaUrl() {
|
||||
let m = ChatModel.shared
|
||||
if let url = m.appOpenUrl {
|
||||
m.appOpenUrl = nil
|
||||
var path = url.path
|
||||
logger.debug("ContentView.connectViaUrl path: \(path)")
|
||||
if (path == "/contact" || path == "/invitation") {
|
||||
path.removeFirst()
|
||||
let action: ConnReqType = path == "contact" ? .contact : .invitation
|
||||
let link = url.absoluteString.replacingOccurrences(of: "///\(path)", with: "/\(path)")
|
||||
chatListActionSheet = .connectViaUrl(action: action, link: link)
|
||||
} else {
|
||||
AlertManager.shared.showAlert(Alert(title: Text("Error: URL is invalid")))
|
||||
dismissAllSheets() {
|
||||
let m = ChatModel.shared
|
||||
if let url = m.appOpenUrl {
|
||||
m.appOpenUrl = nil
|
||||
var path = url.path
|
||||
logger.debug("ContentView.connectViaUrl path: \(path)")
|
||||
if (path == "/contact" || path == "/invitation") {
|
||||
path.removeFirst()
|
||||
let action: ConnReqType = path == "contact" ? .contact : .invitation
|
||||
let link = url.absoluteString.replacingOccurrences(of: "///\(path)", with: "/\(path)")
|
||||
chatListActionSheet = .connectViaUrl(action: action, link: link)
|
||||
} else {
|
||||
AlertManager.shared.showAlert(Alert(title: Text("Error: URL is invalid")))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -251,7 +251,38 @@ private let versionDescriptions: [VersionDescription] = [
|
||||
description: "- more stable message delivery.\n- a bit better groups.\n- and more!"
|
||||
),
|
||||
]
|
||||
)
|
||||
),
|
||||
VersionDescription(
|
||||
version: "v5.3",
|
||||
post: URL(string: "https://simplex.chat/blog/20230925-simplex-chat-v5-3-desktop-app-local-file-encryption-directory-service.html"),
|
||||
features: [
|
||||
FeatureDescription(
|
||||
icon: "desktopcomputer",
|
||||
title: "New desktop app!",
|
||||
description: "Create new profile in [desktop app](https://simplex.chat/downloads/). 💻"
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: "lock",
|
||||
title: "Encrypt stored files & media",
|
||||
description: "App encrypts new local files (except videos)."
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: "magnifyingglass",
|
||||
title: "Discover and join groups",
|
||||
description: "- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable."
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: "theatermasks",
|
||||
title: "Simplified incognito mode",
|
||||
description: "Toggle incognito when connecting."
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: "character",
|
||||
title: "\(4) new interface languages",
|
||||
description: "Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"
|
||||
),
|
||||
]
|
||||
),
|
||||
]
|
||||
|
||||
private let lastVersion = versionDescriptions.last!.version
|
||||
@ -321,12 +352,15 @@ struct WhatsNewView: View {
|
||||
private func featureDescription(_ icon: String, _ title: LocalizedStringKey, _ description: LocalizedStringKey) -> some View {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
HStack(alignment: .center, spacing: 4) {
|
||||
Image(systemName: icon).foregroundColor(.secondary)
|
||||
Image(systemName: icon)
|
||||
.symbolRenderingMode(.monochrome)
|
||||
.foregroundColor(.secondary)
|
||||
.frame(minWidth: 30, alignment: .center)
|
||||
Text(title).font(.title3).bold()
|
||||
}
|
||||
Text(description)
|
||||
.multilineTextAlignment(.leading)
|
||||
.lineLimit(10)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="cs" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld minut</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld vteřin</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>Sestavení aplikace: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>Ikona aplikace</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Hlasové zprávy můžete posílat vy i váš kontakt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Vytvořit odkaz</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Vytvořit jednorázovou pozvánku</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Odpojit</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Zobrazované jméno</target>
|
||||
@ -1823,6 +1849,10 @@
|
||||
<source>Encrypt local files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
<source>Encrypted database</source>
|
||||
<target>Zašifrovaná databáze</target>
|
||||
@ -3090,6 +3120,10 @@
|
||||
<target>Archiv nové databáze</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Nově zobrazované jméno</target>
|
||||
@ -4334,6 +4368,10 @@
|
||||
<target>Jednorázová pozvánka SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Přeskočit</target>
|
||||
@ -4726,6 +4764,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
|
||||
<target>Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Izolace transportu</target>
|
||||
@ -6174,7 +6216,7 @@ Servery SimpleX nevidí váš profil.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="cs" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6206,7 +6248,7 @@ Servery SimpleX nevidí váš profil.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="cs" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "cs",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="de" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld Minuten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld Sekunde(n)</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>App Build: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>App-Icon</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Sowohl Ihr Kontakt, als auch Sie können Sprachnachrichten senden.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Link erzeugen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Einmal-Einladungslink erstellen</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Trennen</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Angezeigter Name</target>
|
||||
@ -1821,6 +1847,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>Lokale Dateien verschlüsseln</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1955,6 +1986,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>Fehler beim Entschlüsseln der Datei</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -3090,6 +3122,10 @@
|
||||
<target>Neues Datenbankarchiv</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Neuer Anzeigename</target>
|
||||
@ -4339,6 +4375,10 @@
|
||||
<target>SimpleX-Einmal-Einladung</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Überspringen</target>
|
||||
@ -4733,6 +4773,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
|
||||
<target>Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Transport-Isolation</target>
|
||||
@ -6186,7 +6230,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="de" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6262,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="de" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "de",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="en" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,11 @@
|
||||
<target>%lld minutes</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<target>%lld new interface languages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld second(s)</target>
|
||||
@ -327,6 +332,15 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<target>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +714,11 @@
|
||||
<target>App build: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<target>App encrypts new local files (except videos).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>App icon</target>
|
||||
@ -835,6 +854,11 @@
|
||||
<target>Both you and your contact can send voice messages.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<target>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1255,11 @@
|
||||
<target>Create link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<target>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Create one-time invitation link</target>
|
||||
@ -1684,6 +1713,11 @@
|
||||
<target>Disconnect</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<target>Discover and join groups</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Display name</target>
|
||||
@ -1824,6 +1858,11 @@
|
||||
<target>Encrypt local files</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<target>Encrypt stored files & media</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
<source>Encrypted database</source>
|
||||
<target>Encrypted database</target>
|
||||
@ -3092,6 +3131,11 @@
|
||||
<target>New database archive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<target>New desktop app!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>New display name</target>
|
||||
@ -4341,6 +4385,11 @@
|
||||
<target>SimpleX one-time invitation</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Simplified incognito mode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Skip</target>
|
||||
@ -4735,6 +4784,11 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<target>Toggle incognito when connecting.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Transport isolation</target>
|
||||
@ -6188,7 +6242,7 @@ SimpleX servers cannot see your profile.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="en" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6220,7 +6274,7 @@ SimpleX servers cannot see your profile.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="en" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "en",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="es" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld minutos</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld segundo(s)</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>Compilación app: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>Icono aplicación</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Tanto tú como tu contacto podéis enviar mensajes de voz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>Mediante perfil (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Crear enlace</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Crea enlace de invitación de un uso</target>
|
||||
@ -1636,7 +1658,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disable (keep overrides)" xml:space="preserve">
|
||||
<source>Disable (keep overrides)</source>
|
||||
<target>Desactivar (conservar anulaciones)</target>
|
||||
<target>Desactivar (conservando anulaciones)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disable SimpleX Lock" xml:space="preserve">
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Desconectar</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Nombre mostrado</target>
|
||||
@ -1823,6 +1849,10 @@
|
||||
<source>Encrypt local files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
<source>Encrypted database</source>
|
||||
<target>Base de datos cifrada</target>
|
||||
@ -3090,6 +3120,10 @@
|
||||
<target>Nuevo archivo de bases de datos</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Nuevo nombre mostrado</target>
|
||||
@ -4339,6 +4373,10 @@
|
||||
<target>Invitación SimpleX de un uso</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Omitir</target>
|
||||
@ -4733,6 +4771,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
|
||||
<target>Para comprobar el cifrado de extremo a extremo con tu contacto compara (o escanea) el código en tus dispositivos.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Aislamiento de transporte</target>
|
||||
@ -5779,6 +5821,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="event happened" xml:space="preserve">
|
||||
<source>event happened</source>
|
||||
<target>evento ocurrido</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group deleted" xml:space="preserve">
|
||||
@ -6186,7 +6229,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="es" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6261,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="es" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "es",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "fi",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="fr" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld minutes</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld seconde·s</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>Build de l'app : %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>Icône de l'app</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Vous et votre contact êtes tous deux en mesure d'envoyer des messages vocaux.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Créer un lien</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Créer un lien d'invitation unique</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Se déconnecter</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Nom affiché</target>
|
||||
@ -1821,6 +1847,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>Chiffrer les fichiers locaux</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1955,6 +1986,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>Erreur lors du déchiffrement du fichier</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -3090,6 +3122,10 @@
|
||||
<target>Nouvelle archive de base de données</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Nouveau nom d'affichage</target>
|
||||
@ -4339,6 +4375,10 @@
|
||||
<target>Invitation unique SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Passer</target>
|
||||
@ -4733,6 +4773,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
|
||||
<target>Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Transport isolé</target>
|
||||
@ -6186,7 +6230,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="fr" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6262,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="fr" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "fr",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="it" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld minuti</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld secondo/i</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>Build dell'app: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>Icona app</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Sia tu che il tuo contatto potete inviare messaggi vocali.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Crea link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Crea link di invito una tantum</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Disconnetti</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Nome da mostrare</target>
|
||||
@ -1821,6 +1847,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>Cripta i file locali</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1955,6 +1986,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>Errore decifrando il file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -3090,6 +3122,10 @@
|
||||
<target>Nuovo archivio database</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Nuovo nome da mostrare</target>
|
||||
@ -4339,6 +4375,10 @@
|
||||
<target>Invito SimpleX una tantum</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Salta</target>
|
||||
@ -4733,6 +4773,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
|
||||
<target>Per verificare la crittografia end-to-end con il tuo contatto, confrontate (o scansionate) il codice sui vostri dispositivi.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Isolamento del trasporto</target>
|
||||
@ -6186,7 +6230,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="it" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6262,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="it" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "it",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="ja" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld 分</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld 秒</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>アプリのビルド: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>アプリのアイコン</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>あなたと連絡相手が音声メッセージを送信できます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>チャット プロファイル経由 (デフォルト) または [接続経由](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>リンクを生成する</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>使い捨ての招待リンクを生成する</target>
|
||||
@ -1683,6 +1705,10 @@
|
||||
<target>切断</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>表示名</target>
|
||||
@ -1820,6 +1846,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>ローカルファイルを暗号化する</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1954,6 +1985,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>ファイルの復号エラー</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -3086,6 +3118,10 @@
|
||||
<target>新しいデータベースのアーカイブ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>新たな表示名</target>
|
||||
@ -4326,6 +4362,10 @@
|
||||
<target>SimpleX使い捨て招待リンク</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>スキップ</target>
|
||||
@ -4719,6 +4759,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>エンドツーエンド暗号化を確認するには、ご自分の端末と連絡先の端末のコードを比べます (スキャンします)。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>トランスポート隔離</target>
|
||||
@ -6172,7 +6216,7 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="ja" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6204,7 +6248,7 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="ja" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "ja",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="nl" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld minuten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld seconde(n)</target>
|
||||
@ -269,7 +273,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**Create link / QR code** for your contact to use." xml:space="preserve">
|
||||
<source>**Create link / QR code** for your contact to use.</source>
|
||||
<target>**Maak een link / QR-code aan** die uw contactpersoon kan gebruiken.</target>
|
||||
<target>**Maak een link / QR-code aan** die uw contact kan gebruiken.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
|
||||
@ -299,7 +303,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**Scan QR code**: to connect to your contact in person or via video call." xml:space="preserve">
|
||||
<source>**Scan QR code**: to connect to your contact in person or via video call.</source>
|
||||
<target>**Scan QR-code**: om persoonlijk of via een video gesprek verbinding te maken met uw contactpersoon.</target>
|
||||
<target>**Scan QR-code**: om persoonlijk of via een video gesprek verbinding te maken met uw contact.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Warning**: Instant push notifications require passphrase saved in Keychain." xml:space="preserve">
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -482,7 +492,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Accept connection request?" xml:space="preserve">
|
||||
<source>Accept connection request?</source>
|
||||
<target>Accepteer contactpersoon</target>
|
||||
<target>Accepteer contact</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accept contact request from %@?" xml:space="preserve">
|
||||
@ -592,22 +602,22 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow calls only if your contact allows them." xml:space="preserve">
|
||||
<source>Allow calls only if your contact allows them.</source>
|
||||
<target>Sta oproepen alleen toe als uw contact persoon dit toestaat.</target>
|
||||
<target>Sta oproepen alleen toe als uw contact dit toestaat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
|
||||
<source>Allow disappearing messages only if your contact allows it to you.</source>
|
||||
<target>Sta verdwijnende berichten alleen toe als uw contactpersoon dit toestaat.</target>
|
||||
<target>Sta verdwijnende berichten alleen toe als uw contact dit toestaat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
|
||||
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
|
||||
<target>Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contactpersoon dit toestaat.</target>
|
||||
<target>Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
|
||||
<source>Allow message reactions only if your contact allows them.</source>
|
||||
<target>Sta berichtreacties alleen toe als uw contactpersoon dit toestaat.</target>
|
||||
<target>Sta berichtreacties alleen toe als uw contact dit toestaat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow message reactions." xml:space="preserve">
|
||||
@ -642,7 +652,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow voice messages only if your contact allows them." xml:space="preserve">
|
||||
<source>Allow voice messages only if your contact allows them.</source>
|
||||
<target>Sta spraak berichten alleen toe als uw contactpersoon ze toestaat.</target>
|
||||
<target>Sta spraak berichten alleen toe als uw contact ze toestaat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow voice messages?" xml:space="preserve">
|
||||
@ -700,6 +710,10 @@
|
||||
<target>App build: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>App icon</target>
|
||||
@ -812,27 +826,31 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
|
||||
<source>Both you and your contact can add message reactions.</source>
|
||||
<target>Zowel u als uw contactpersoon kunnen berichtreacties toevoegen.</target>
|
||||
<target>Zowel u als uw contact kunnen berichtreacties toevoegen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
|
||||
<source>Both you and your contact can irreversibly delete sent messages.</source>
|
||||
<target>Zowel jij als je contactpersoon kunnen verzonden berichten onherroepelijk verwijderen.</target>
|
||||
<target>Zowel jij als je contact kunnen verzonden berichten onherroepelijk verwijderen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
|
||||
<source>Both you and your contact can make calls.</source>
|
||||
<target>Zowel u als uw contact persoon kunnen bellen.</target>
|
||||
<target>Zowel u als uw contact kunnen bellen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve">
|
||||
<source>Both you and your contact can send disappearing messages.</source>
|
||||
<target>Zowel jij als je contactpersoon kunnen verdwijnende berichten sturen.</target>
|
||||
<target>Zowel jij als je contact kunnen verdwijnende berichten sturen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can send voice messages." xml:space="preserve">
|
||||
<source>Both you and your contact can send voice messages.</source>
|
||||
<target>Zowel jij als je contactpersoon kunnen spraak berichten verzenden.</target>
|
||||
<target>Zowel jij als je contact kunnen spraak berichten verzenden.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Maak link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Maak een eenmalige uitnodiging link</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>verbinding verbreken</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Weergavenaam</target>
|
||||
@ -1821,6 +1847,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>Versleutel lokale bestanden</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1955,6 +1986,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>Fout bij het ontsleutelen van bestand</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -2199,12 +2231,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve">
|
||||
<source>File will be received when your contact completes uploading it.</source>
|
||||
<target>Het bestand wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.</target>
|
||||
<target>Het bestand wordt gedownload wanneer uw contact het uploaden heeft voltooid.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be received when your contact is online, please wait or check later!" xml:space="preserve">
|
||||
<source>File will be received when your contact is online, please wait or check later!</source>
|
||||
<target>Het bestand wordt ontvangen wanneer uw contact persoon online is, even geduld a.u.b. of controleer later!</target>
|
||||
<target>Het bestand wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of controleer later!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File: %@" xml:space="preserve">
|
||||
@ -2514,7 +2546,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." xml:space="preserve">
|
||||
<source>If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link.</source>
|
||||
<target>Als u elkaar niet persoonlijk kunt ontmoeten, kunt u **de QR-code scannen in het video gesprek**, of uw contactpersoon kan een uitnodiging link delen.</target>
|
||||
<target>Als u elkaar niet persoonlijk kunt ontmoeten, kunt u **de QR-code scannen in het video gesprek**, of uw contact kan een uitnodiging link delen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve">
|
||||
@ -2539,7 +2571,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Image will be received when your contact completes uploading it." xml:space="preserve">
|
||||
<source>Image will be received when your contact completes uploading it.</source>
|
||||
<target>De afbeelding wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.</target>
|
||||
<target>De afbeelding wordt gedownload wanneer uw contact het uploaden heeft voltooid.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Image will be received when your contact is online, please wait or check later!" xml:space="preserve">
|
||||
@ -2731,7 +2763,7 @@
|
||||
3. The connection was compromised.</source>
|
||||
<target>Het kan gebeuren wanneer:
|
||||
1. De berichten zijn na 2 dagen verlopen bij de verzendende client of na 30 dagen op de server.
|
||||
2. Decodering van het bericht is mislukt, omdat u of uw contactpersoon een oude databaseback-up heeft gebruikt.
|
||||
2. Decodering van het bericht is mislukt, omdat u of uw contact een oude databaseback-up heeft gebruikt.
|
||||
3. De verbinding is verbroken.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@ -3090,6 +3122,10 @@
|
||||
<target>Nieuw database archief</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Nieuwe weergavenaam</target>
|
||||
@ -3261,7 +3297,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
|
||||
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
|
||||
<target>Alleen jij kunt berichten onomkeerbaar verwijderen (je contactpersoon kan ze markeren voor verwijdering).</target>
|
||||
<target>Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can make calls." xml:space="preserve">
|
||||
@ -3281,12 +3317,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can add message reactions." xml:space="preserve">
|
||||
<source>Only your contact can add message reactions.</source>
|
||||
<target>Alleen uw contactpersoon kan berichtreacties toevoegen.</target>
|
||||
<target>Alleen uw contact kan berichtreacties toevoegen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
|
||||
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
|
||||
<target>Alleen uw contactpersoon kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).</target>
|
||||
<target>Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can make calls." xml:space="preserve">
|
||||
@ -3296,12 +3332,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve">
|
||||
<source>Only your contact can send disappearing messages.</source>
|
||||
<target>Alleen uw contactpersoon kan verdwijnende berichten verzenden.</target>
|
||||
<target>Alleen uw contact kan verdwijnende berichten verzenden.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can send voice messages." xml:space="preserve">
|
||||
<source>Only your contact can send voice messages.</source>
|
||||
<target>Alleen uw contactpersoon kan spraak berichten verzenden.</target>
|
||||
<target>Alleen uw contact kan spraak berichten verzenden.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open Settings" xml:space="preserve">
|
||||
@ -3396,7 +3432,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Paste the link you received to connect with your contact." xml:space="preserve">
|
||||
<source>Paste the link you received to connect with your contact.</source>
|
||||
<target>Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contactpersoon.</target>
|
||||
<target>Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contact.</target>
|
||||
<note>placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
|
||||
@ -3416,12 +3452,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
|
||||
<source>Please ask your contact to enable sending voice messages.</source>
|
||||
<target>Vraag uw contactpersoon om het verzenden van spraak berichten in te schakelen.</target>
|
||||
<target>Vraag uw contact om het verzenden van spraak berichten in te schakelen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please check that you used the correct link or ask your contact to send you another one." xml:space="preserve">
|
||||
<source>Please check that you used the correct link or ask your contact to send you another one.</source>
|
||||
<target>Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen.</target>
|
||||
<target>Controleer of u de juiste link heeft gebruikt of vraag uw contact om u een andere te sturen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please check your network connection with %@ and try again." xml:space="preserve">
|
||||
@ -3966,7 +4002,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Scan security code from your contact's app." xml:space="preserve">
|
||||
<source>Scan security code from your contact's app.</source>
|
||||
<target>Scan de beveiligingscode van de app van uw contactpersoon.</target>
|
||||
<target>Scan de beveiligingscode van de app van uw contact.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scan server QR code" xml:space="preserve">
|
||||
@ -4339,6 +4375,10 @@
|
||||
<target>Eenmalige SimpleX uitnodiging</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Overslaan</target>
|
||||
@ -4688,7 +4728,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="To connect, your contact can scan QR code or use the link in the app." xml:space="preserve">
|
||||
<source>To connect, your contact can scan QR code or use the link in the app.</source>
|
||||
<target>Om verbinding te maken, kan uw contact persoon de QR-code scannen of de link in de app gebruiken.</target>
|
||||
<target>Om verbinding te maken, kan uw contact de QR-code scannen of de link in de app gebruiken.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To make a new connection" xml:space="preserve">
|
||||
@ -4730,7 +4770,11 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
|
||||
</trans-unit>
|
||||
<trans-unit id="To verify end-to-end encryption with your contact compare (or scan) the code on your devices." xml:space="preserve">
|
||||
<source>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</source>
|
||||
<target>Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contactpersoon te verifiëren.</target>
|
||||
<target>Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contact te verifiëren.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
@ -4826,8 +4870,8 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
|
||||
<trans-unit id="Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection." xml:space="preserve">
|
||||
<source>Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.
|
||||
To connect, please ask your contact to create another connection link and check that you have a stable network connection.</source>
|
||||
<target>Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.
|
||||
Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft.</target>
|
||||
<target>Tenzij uw contact de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.
|
||||
Om verbinding te maken, vraagt u uw contact om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unlock" xml:space="preserve">
|
||||
@ -4972,7 +5016,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
|
||||
</trans-unit>
|
||||
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
|
||||
<source>Video will be received when your contact completes uploading it.</source>
|
||||
<target>De video wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.</target>
|
||||
<target>De video wordt gedownload wanneer uw contact het uploaden heeft voltooid.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
|
||||
@ -5222,7 +5266,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
|
||||
</trans-unit>
|
||||
<trans-unit id="You invited a contact" xml:space="preserve">
|
||||
<source>You invited a contact</source>
|
||||
<target>Je hebt je contactpersoon uitgenodigd</target>
|
||||
<target>Je hebt je contact uitgenodigd</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You joined this group" xml:space="preserve">
|
||||
@ -5358,13 +5402,13 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
<target>Uw contactpersoon moet online zijn om de verbinding te voltooien.
|
||||
U kunt deze verbinding verbreken en het contact verwijderen (en later proberen met een nieuwe link).</target>
|
||||
<target>Uw contact moet online zijn om de verbinding te voltooien.
|
||||
U kunt deze verbinding verbreken en het contact verwijderen en later proberen met een nieuwe link.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact sent a file that is larger than currently supported maximum size (%@)." xml:space="preserve">
|
||||
<source>Your contact sent a file that is larger than currently supported maximum size (%@).</source>
|
||||
<target>Uw contactpersoon heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%@).</target>
|
||||
<target>Uw contact heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%@).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contacts can allow full message deletion." xml:space="preserve">
|
||||
@ -5808,7 +5852,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="incognito via contact address link" xml:space="preserve">
|
||||
<source>incognito via contact address link</source>
|
||||
<target>incognito via contact adres link</target>
|
||||
<target>incognito via contactadres link</target>
|
||||
<note>chat list item description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="incognito via group link" xml:space="preserve">
|
||||
@ -6074,7 +6118,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="via contact address link" xml:space="preserve">
|
||||
<source>via contact address link</source>
|
||||
<target>via contact adres link</target>
|
||||
<target>via contactadres link</target>
|
||||
<note>chat list item description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="via group link" xml:space="preserve">
|
||||
@ -6186,7 +6230,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="nl" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6262,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="nl" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "nl",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="pl" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld minut</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld sekund(y)</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>Kompilacja aplikacji: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>Ikona aplikacji</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Zarówno Ty, jak i Twój kontakt możecie wysyłać wiadomości głosowe.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Utwórz link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Utwórz jednorazowy link do zaproszenia</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Rozłącz</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Wyświetlana nazwa</target>
|
||||
@ -1821,6 +1847,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>Zaszyfruj lokalne pliki</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1955,6 +1986,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>Błąd odszyfrowania pliku</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -3090,6 +3122,10 @@
|
||||
<target>Nowe archiwum bazy danych</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Nowa wyświetlana nazwa</target>
|
||||
@ -4339,6 +4375,10 @@
|
||||
<target>Zaproszenie jednorazowe SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Pomiń</target>
|
||||
@ -4733,6 +4773,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
|
||||
<target>Aby zweryfikować szyfrowanie end-to-end z Twoim kontaktem porównaj (lub zeskanuj) kod na waszych urządzeniach.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Izolacja transportu</target>
|
||||
@ -6186,7 +6230,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="pl" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6262,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="pl" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "pl",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="ru" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld минуты</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld секунд</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -700,6 +710,10 @@
|
||||
<target>Сборка приложения: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>Иконка</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>Вы и Ваш контакт можете отправлять голосовые сообщения.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА).</target>
|
||||
@ -1231,6 +1249,10 @@
|
||||
<target>Создать ссылку</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Создать ссылку-приглашение</target>
|
||||
@ -1684,6 +1706,10 @@
|
||||
<target>Разрыв соединения</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>Имя профиля</target>
|
||||
@ -1823,6 +1849,10 @@
|
||||
<source>Encrypt local files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
<source>Encrypted database</source>
|
||||
<target>База данных зашифрована</target>
|
||||
@ -3090,6 +3120,10 @@
|
||||
<target>Новый архив чата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>Новое имя</target>
|
||||
@ -4339,6 +4373,10 @@
|
||||
<target>SimpleX одноразовая ссылка</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>Пропустить</target>
|
||||
@ -4733,6 +4771,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>Чтобы подтвердить end-to-end шифрование с Вашим контактом сравните (или сканируйте) код безопасности на Ваших устройствах.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>Отдельные сессии для</target>
|
||||
@ -6186,7 +6228,7 @@ SimpleX серверы не могут получить доступ к Ваше
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="ru" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6218,7 +6260,7 @@ SimpleX серверы не могут получить доступ к Ваше
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="ru" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "ru",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="th" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -192,6 +192,10 @@
|
||||
<target>%lld นาที</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld วินาที</target>
|
||||
@ -322,6 +326,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -693,6 +703,10 @@
|
||||
<target>รุ่นแอป: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>ไอคอนแอป</target>
|
||||
@ -828,6 +842,10 @@
|
||||
<target>ทั้งคุณและผู้ติดต่อของคุณสามารถส่งข้อความเสียงได้</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>ตามโปรไฟล์แชท (ค่าเริ่มต้น) หรือ [โดยการเชื่อมต่อ](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (เบต้า)</target>
|
||||
@ -1220,6 +1238,10 @@
|
||||
<target>สร้างลิงค์</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>สร้างลิงก์เชิญแบบใช้ครั้งเดียว</target>
|
||||
@ -1672,6 +1694,10 @@
|
||||
<target>ตัดการเชื่อมต่อ</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>ชื่อที่แสดง</target>
|
||||
@ -1811,6 +1837,10 @@
|
||||
<source>Encrypt local files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
<source>Encrypted database</source>
|
||||
<target>Encrypt ฐานข้อมูลเรียบร้อยแล้ว</target>
|
||||
@ -3075,6 +3105,10 @@
|
||||
<target>ฐานข้อมูลใหม่สำหรับการเก็บถาวร</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>ชื่อที่แสดงใหม่</target>
|
||||
@ -4317,6 +4351,10 @@
|
||||
<target>คำเชิญ SimpleX แบบครั้งเดียว</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>ข้าม</target>
|
||||
@ -4709,6 +4747,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>ในการตรวจสอบการเข้ารหัสแบบ encrypt จากต้นจนจบ กับผู้ติดต่อของคุณ ให้เปรียบเทียบ (หรือสแกน) รหัสบนอุปกรณ์ของคุณ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>การแยกการขนส่ง</target>
|
||||
@ -6156,7 +6198,7 @@ SimpleX servers cannot see your profile.</source>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="th" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6188,7 +6230,7 @@ SimpleX servers cannot see your profile.</source>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="th" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "th",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "uk",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
|
||||
<file original="en.lproj/Localizable.strings" source-language="en" target-language="zh-Hans" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
@ -94,7 +94,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ at %@:" xml:space="preserve">
|
||||
<source>%1$@ at %2$@:</source>
|
||||
<target>%2$@:</target>
|
||||
<target>@ %2$@:</target>
|
||||
<note>copied message info, <sender> at <time></note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve">
|
||||
@ -197,6 +197,10 @@
|
||||
<target>%lld 分钟</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve">
|
||||
<source>%lld new interface languages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld 秒</target>
|
||||
@ -327,6 +331,12 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve">
|
||||
<source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!
|
||||
- delivery receipts (up to 20 members).
|
||||
- faster and more stable.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve">
|
||||
<source>- more stable message delivery.
|
||||
- a bit better groups.
|
||||
@ -414,7 +424,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="A few more things" xml:space="preserve">
|
||||
<source>A few more things</source>
|
||||
<target/>
|
||||
<target>一些杂项</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="A new contact" xml:space="preserve">
|
||||
@ -424,7 +434,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="A new random profile will be shared." xml:space="preserve">
|
||||
<source>A new random profile will be shared.</source>
|
||||
<target>创建一个随机的共享文件</target>
|
||||
<target>创建一个随机的共享文件。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
|
||||
@ -482,7 +492,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Accept connection request?" xml:space="preserve">
|
||||
<source>Accept connection request?</source>
|
||||
<target>接受联系人</target>
|
||||
<target>接受联系人?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accept contact request from %@?" xml:space="preserve">
|
||||
@ -700,6 +710,10 @@
|
||||
<target>应用程序构建:%@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
<source>App encrypts new local files (except videos).</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve">
|
||||
<source>App icon</source>
|
||||
<target>应用程序图标</target>
|
||||
@ -835,6 +849,10 @@
|
||||
<target>您和您的联系人都可以发送语音消息。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target>通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。</target>
|
||||
@ -1068,15 +1086,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect directly" xml:space="preserve">
|
||||
<source>Connect directly</source>
|
||||
<target>直接连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect incognito" xml:space="preserve">
|
||||
<source>Connect incognito</source>
|
||||
<target>在隐身状态下连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via contact link" xml:space="preserve">
|
||||
<source>Connect via contact link</source>
|
||||
<target>通过联系人链接进行连接?</target>
|
||||
<target>通过联系人链接进行连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via group link?" xml:space="preserve">
|
||||
@ -1096,7 +1116,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via one-time link" xml:space="preserve">
|
||||
<source>Connect via one-time link</source>
|
||||
<target>通过一次性链接连接?</target>
|
||||
<target>通过一次性链接连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connecting server…" xml:space="preserve">
|
||||
@ -1176,6 +1196,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Contacts" xml:space="preserve">
|
||||
<source>Contacts</source>
|
||||
<target>联系人</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contacts can mark messages for deletion; you will be able to view them." xml:space="preserve">
|
||||
@ -1228,6 +1249,10 @@
|
||||
<target>创建链接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
|
||||
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>创建一次性邀请链接</target>
|
||||
@ -1573,14 +1598,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Delivery" xml:space="preserve">
|
||||
<source>Delivery</source>
|
||||
<target>传送</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delivery receipts are disabled!" xml:space="preserve">
|
||||
<source>Delivery receipts are disabled!</source>
|
||||
<target>送达回执已禁用!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delivery receipts!" xml:space="preserve">
|
||||
<source>Delivery receipts!</source>
|
||||
<target>送达回执!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
@ -1630,6 +1658,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disable (keep overrides)" xml:space="preserve">
|
||||
<source>Disable (keep overrides)</source>
|
||||
<target>禁用(保留覆盖)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disable SimpleX Lock" xml:space="preserve">
|
||||
@ -1639,6 +1668,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disable for all" xml:space="preserve">
|
||||
<source>Disable for all</source>
|
||||
<target>全部禁用</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappearing message" xml:space="preserve">
|
||||
@ -1676,6 +1706,10 @@
|
||||
<target>断开连接</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
<source>Discover and join groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Display name" xml:space="preserve">
|
||||
<source>Display name</source>
|
||||
<target>显示名称</target>
|
||||
@ -1703,6 +1737,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't enable" xml:space="preserve">
|
||||
<source>Don't enable</source>
|
||||
<target>不要启用</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't show again" xml:space="preserve">
|
||||
@ -1747,6 +1782,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable (keep overrides)" xml:space="preserve">
|
||||
<source>Enable (keep overrides)</source>
|
||||
<target>启用(保持覆盖)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable SimpleX Lock" xml:space="preserve">
|
||||
@ -1766,6 +1802,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable for all" xml:space="preserve">
|
||||
<source>Enable for all</source>
|
||||
<target>全部启用</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable instant notifications?" xml:space="preserve">
|
||||
@ -1810,6 +1847,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt local files" xml:space="preserve">
|
||||
<source>Encrypt local files</source>
|
||||
<target>加密本地文件</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt stored files & media" xml:space="preserve">
|
||||
<source>Encrypt stored files & media</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted database" xml:space="preserve">
|
||||
@ -1944,6 +1986,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error decrypting file" xml:space="preserve">
|
||||
<source>Error decrypting file</source>
|
||||
<target>解密文件时出错</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat database" xml:space="preserve">
|
||||
@ -1988,6 +2031,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
|
||||
<source>Error enabling delivery receipts!</source>
|
||||
<target>启用送达回执出错!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error enabling notifications" xml:space="preserve">
|
||||
@ -2072,6 +2116,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error setting delivery receipts!" xml:space="preserve">
|
||||
<source>Error setting delivery receipts!</source>
|
||||
<target>设置送达回执出错!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error starting chat" xml:space="preserve">
|
||||
@ -2091,6 +2136,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
<target>同步连接错误</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error updating group link" xml:space="preserve">
|
||||
@ -2135,6 +2181,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Even when disabled in the conversation." xml:space="preserve">
|
||||
<source>Even when disabled in the conversation.</source>
|
||||
<target>即使在对话中被禁用。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Exit without saving" xml:space="preserve">
|
||||
@ -2219,6 +2266,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter unread and favorite chats." xml:space="preserve">
|
||||
<source>Filter unread and favorite chats.</source>
|
||||
<target>过滤未读和收藏的聊天记录。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
|
||||
@ -2228,30 +2276,37 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Find chats faster" xml:space="preserve">
|
||||
<source>Find chats faster</source>
|
||||
<target>更快地查找聊天记录</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fix" xml:space="preserve">
|
||||
<source>Fix</source>
|
||||
<target>修复</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fix connection" xml:space="preserve">
|
||||
<source>Fix connection</source>
|
||||
<target>修复连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fix connection?" xml:space="preserve">
|
||||
<source>Fix connection?</source>
|
||||
<target>修复连接?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fix encryption after restoring backups." xml:space="preserve">
|
||||
<source>Fix encryption after restoring backups.</source>
|
||||
<target>修复还原备份后的加密问题。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fix not supported by contact" xml:space="preserve">
|
||||
<source>Fix not supported by contact</source>
|
||||
<target>修复联系人不支持的问题</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fix not supported by group member" xml:space="preserve">
|
||||
<source>Fix not supported by group member</source>
|
||||
<target>修复群组成员不支持的问题</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="For console" xml:space="preserve">
|
||||
@ -2561,6 +2616,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="In reply to" xml:space="preserve">
|
||||
<source>In reply to</source>
|
||||
<target>答复</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito" xml:space="preserve">
|
||||
@ -2575,6 +2631,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito mode protects your privacy by using a new random profile for each contact." xml:space="preserve">
|
||||
<source>Incognito mode protects your privacy by using a new random profile for each contact.</source>
|
||||
<target>隐身模式会为每个联系人使用一个新的随机配置文件,从而保护你的隐私。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incoming audio call" xml:space="preserve">
|
||||
@ -2651,6 +2708,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Invalid status" xml:space="preserve">
|
||||
<source>Invalid status</source>
|
||||
<target>无效状态</target>
|
||||
<note>item status text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Invitation expired!" xml:space="preserve">
|
||||
@ -2746,6 +2804,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Keep your connections" xml:space="preserve">
|
||||
<source>Keep your connections</source>
|
||||
<target>保持连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="KeyChain error" xml:space="preserve">
|
||||
@ -2840,6 +2899,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Make one message disappear" xml:space="preserve">
|
||||
<source>Make one message disappear</source>
|
||||
<target>使一条消息消失</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Make profile private!" xml:space="preserve">
|
||||
@ -2914,6 +2974,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Message delivery receipts!" xml:space="preserve">
|
||||
<source>Message delivery receipts!</source>
|
||||
<target>消息送达回执!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message draft" xml:space="preserve">
|
||||
@ -2998,6 +3059,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Most likely this connection is deleted." xml:space="preserve">
|
||||
<source>Most likely this connection is deleted.</source>
|
||||
<target>此连接很可能已被删除。</target>
|
||||
<note>item status description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve">
|
||||
@ -3060,6 +3122,10 @@
|
||||
<target>新数据库存档</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New desktop app!" xml:space="preserve">
|
||||
<source>New desktop app!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>新显示名</target>
|
||||
@ -3107,6 +3173,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="No delivery information" xml:space="preserve">
|
||||
<source>No delivery information</source>
|
||||
<target>无送达信息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No device token!" xml:space="preserve">
|
||||
@ -3126,6 +3193,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="No history" xml:space="preserve">
|
||||
<source>No history</source>
|
||||
<target>无历史记录</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
@ -3564,6 +3632,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Protocol timeout per KB" xml:space="preserve">
|
||||
<source>Protocol timeout per KB</source>
|
||||
<target>每 KB 协议超时</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
@ -3578,6 +3647,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="React…" xml:space="preserve">
|
||||
<source>React…</source>
|
||||
<target>回应…</target>
|
||||
<note>chat item menu</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Read" xml:space="preserve">
|
||||
@ -3612,6 +3682,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Receipts are disabled" xml:space="preserve">
|
||||
<source>Receipts are disabled</source>
|
||||
<target>回执已禁用</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at" xml:space="preserve">
|
||||
@ -3656,10 +3727,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Reconnect all connected servers to force message delivery. It uses additional traffic." xml:space="preserve">
|
||||
<source>Reconnect all connected servers to force message delivery. It uses additional traffic.</source>
|
||||
<target>重新连接所有已连接的服务器以强制发送信息。这会耗费更多流量。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reconnect servers?" xml:space="preserve">
|
||||
<source>Reconnect servers?</source>
|
||||
<target>是否重新连接服务器?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at" xml:space="preserve">
|
||||
@ -3724,14 +3797,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Renegotiate" xml:space="preserve">
|
||||
<source>Renegotiate</source>
|
||||
<target>重新协商</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Renegotiate encryption" xml:space="preserve">
|
||||
<source>Renegotiate encryption</source>
|
||||
<target>重新协商加密</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Renegotiate encryption?" xml:space="preserve">
|
||||
<source>Renegotiate encryption?</source>
|
||||
<target>重新协商加密?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reply" xml:space="preserve">
|
||||
@ -3991,6 +4067,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Send delivery receipts to" xml:space="preserve">
|
||||
<source>Send delivery receipts to</source>
|
||||
<target>将送达回执发送给</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send direct message" xml:space="preserve">
|
||||
@ -4030,6 +4107,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Send receipts" xml:space="preserve">
|
||||
<source>Send receipts</source>
|
||||
<target>发送回执</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send them from gallery or custom keyboards." xml:space="preserve">
|
||||
@ -4049,10 +4127,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending delivery receipts will be enabled for all contacts in all visible chat profiles." xml:space="preserve">
|
||||
<source>Sending delivery receipts will be enabled for all contacts in all visible chat profiles.</source>
|
||||
<target>将对所有可见聊天配置文件中的所有联系人启用送达回执功能。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending delivery receipts will be enabled for all contacts." xml:space="preserve">
|
||||
<source>Sending delivery receipts will be enabled for all contacts.</source>
|
||||
<target>将对所有联系人启用送达回执功能。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending file will be stopped." xml:space="preserve">
|
||||
@ -4062,18 +4142,22 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending receipts is disabled for %lld contacts" xml:space="preserve">
|
||||
<source>Sending receipts is disabled for %lld contacts</source>
|
||||
<target>已为 %lld 联系人禁用送达回执功能</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending receipts is disabled for %lld groups" xml:space="preserve">
|
||||
<source>Sending receipts is disabled for %lld groups</source>
|
||||
<target>已为 %lld 组禁用送达回执功能</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending receipts is enabled for %lld contacts" xml:space="preserve">
|
||||
<source>Sending receipts is enabled for %lld contacts</source>
|
||||
<target>已为 %lld 联系人启用送达回执功能</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending receipts is enabled for %lld groups" xml:space="preserve">
|
||||
<source>Sending receipts is enabled for %lld groups</source>
|
||||
<target>已为 %lld 组启用送达回执功能</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending via" xml:space="preserve">
|
||||
@ -4218,6 +4302,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Show last messages" xml:space="preserve">
|
||||
<source>Show last messages</source>
|
||||
<target>显示最近的消息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show preview" xml:space="preserve">
|
||||
@ -4290,6 +4375,10 @@
|
||||
<target>SimpleX 一次性邀请</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Skip" xml:space="preserve">
|
||||
<source>Skip</source>
|
||||
<target>跳过</target>
|
||||
@ -4302,6 +4391,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Small groups (max 20)" xml:space="preserve">
|
||||
<source>Small groups (max 20)</source>
|
||||
<target>小群组(最多 20 人)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
@ -4523,6 +4613,7 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
</trans-unit>
|
||||
<trans-unit id="The encryption is working and the new encryption agreement is not required. It may result in connection errors!" xml:space="preserve">
|
||||
<source>The encryption is working and the new encryption agreement is not required. It may result in connection errors!</source>
|
||||
<target>加密正在运行,不需要新的加密协议。这可能会导致连接错误!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="The group is fully decentralized – it is visible only to the members." xml:space="preserve">
|
||||
@ -4562,6 +4653,7 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
</trans-unit>
|
||||
<trans-unit id="The second tick we missed! ✅" xml:space="preserve">
|
||||
<source>The second tick we missed! ✅</source>
|
||||
<target>我们错过的第二个"√"!✅</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="The sender will NOT be notified" xml:space="preserve">
|
||||
@ -4591,10 +4683,12 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
</trans-unit>
|
||||
<trans-unit id="These settings are for your current profile **%@**." xml:space="preserve">
|
||||
<source>These settings are for your current profile **%@**.</source>
|
||||
<target>这些设置适用于您当前的配置文件 **%@**。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="They can be overridden in contact and group settings." xml:space="preserve">
|
||||
<source>They can be overridden in contact and group settings.</source>
|
||||
<target>可以在联系人和群组设置中覆盖它们。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
|
||||
@ -4614,6 +4708,7 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
</trans-unit>
|
||||
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
|
||||
<source>This group has over %lld members, delivery receipts are not sent.</source>
|
||||
<target>该组有超过 %lld 个成员,不发送送货单。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
@ -4678,6 +4773,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
<source>Transport isolation</source>
|
||||
<target>传输隔离</target>
|
||||
@ -4857,6 +4956,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Use current profile" xml:space="preserve">
|
||||
<source>Use current profile</source>
|
||||
<target>使用当前配置文件</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use for new connections" xml:space="preserve">
|
||||
@ -4871,6 +4971,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Use new incognito profile" xml:space="preserve">
|
||||
<source>Use new incognito profile</source>
|
||||
<target>使用新的隐身配置文件</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use server" xml:space="preserve">
|
||||
@ -5085,10 +5186,12 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="You can enable later via Settings" xml:space="preserve">
|
||||
<source>You can enable later via Settings</source>
|
||||
<target>您可以稍后在设置中启用它</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can enable them later via app Privacy & Security settings." xml:space="preserve">
|
||||
<source>You can enable them later via app Privacy & Security settings.</source>
|
||||
<target>您可以稍后通过应用程序的 "隐私与安全 "设置启用它们。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
@ -5347,6 +5450,7 @@ You can change it in Settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile **%@** will be shared." xml:space="preserve">
|
||||
<source>Your profile **%@** will be shared.</source>
|
||||
<target>您的个人资料 **%@** 将被共享。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
@ -5423,10 +5527,12 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agreeing encryption for %@…" xml:space="preserve">
|
||||
<source>agreeing encryption for %@…</source>
|
||||
<target>正在协商将加密应用于 %@…</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="agreeing encryption…" xml:space="preserve">
|
||||
<source>agreeing encryption…</source>
|
||||
<target>同意加密…</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="always" xml:space="preserve">
|
||||
@ -5491,10 +5597,12 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="changing address for %@…" xml:space="preserve">
|
||||
<source>changing address for %@…</source>
|
||||
<target>正在将变更的地址应用于 %@…</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="changing address…" xml:space="preserve">
|
||||
<source>changing address…</source>
|
||||
<target>更改地址…</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="colored" xml:space="preserve">
|
||||
@ -5599,10 +5707,12 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="default (no)" xml:space="preserve">
|
||||
<source>default (no)</source>
|
||||
<target>默认(否)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="default (yes)" xml:space="preserve">
|
||||
<source>default (yes)</source>
|
||||
<target>默认 (是)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="deleted" xml:space="preserve">
|
||||
@ -5627,6 +5737,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="disabled" xml:space="preserve">
|
||||
<source>disabled</source>
|
||||
<target>关闭</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="duplicate message" xml:space="preserve">
|
||||
@ -5656,34 +5767,42 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption agreed" xml:space="preserve">
|
||||
<source>encryption agreed</source>
|
||||
<target>已同意加密</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption agreed for %@" xml:space="preserve">
|
||||
<source>encryption agreed for %@</source>
|
||||
<target>同意对 %@ 进行加密</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption ok" xml:space="preserve">
|
||||
<source>encryption ok</source>
|
||||
<target>可以加密</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption ok for %@" xml:space="preserve">
|
||||
<source>encryption ok for %@</source>
|
||||
<target>对 %@ 进行加密</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption re-negotiation allowed" xml:space="preserve">
|
||||
<source>encryption re-negotiation allowed</source>
|
||||
<target>允许重新进行加密协商</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption re-negotiation allowed for %@" xml:space="preserve">
|
||||
<source>encryption re-negotiation allowed for %@</source>
|
||||
<target>允许对 %@ 进行加密重新协商</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption re-negotiation required" xml:space="preserve">
|
||||
<source>encryption re-negotiation required</source>
|
||||
<target>需要重新进行加密协商</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption re-negotiation required for %@" xml:space="preserve">
|
||||
<source>encryption re-negotiation required for %@</source>
|
||||
<target>需要为 %@ 重新进行加密协商</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="ended" xml:space="preserve">
|
||||
@ -5703,6 +5822,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="event happened" xml:space="preserve">
|
||||
<source>event happened</source>
|
||||
<target>发生的事</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group deleted" xml:space="preserve">
|
||||
@ -5963,6 +6083,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="security code changed" xml:space="preserve">
|
||||
<source>security code changed</source>
|
||||
<target>安全密码已更改</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="starting…" xml:space="preserve">
|
||||
@ -6109,7 +6230,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="zh-Hans" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleName" xml:space="preserve">
|
||||
@ -6141,7 +6262,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</file>
|
||||
<file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="zh-Hans" datatype="plaintext">
|
||||
<header>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A5219j"/>
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="CFBundleDisplayName" xml:space="preserve">
|
||||
|
@ -3,7 +3,7 @@
|
||||
"project" : "SimpleX.xcodeproj",
|
||||
"targetLocale" : "zh-Hans",
|
||||
"toolInfo" : {
|
||||
"toolBuildNumber" : "15A5219j",
|
||||
"toolBuildNumber" : "15A240d",
|
||||
"toolID" : "com.apple.dt.xcode",
|
||||
"toolName" : "Xcode",
|
||||
"toolVersion" : "15.0"
|
||||
|
@ -1468,6 +1468,7 @@ public enum StoreError: Decodable {
|
||||
case userNotFoundByContactRequestId(contactRequestId: Int64)
|
||||
case contactNotFound(contactId: Int64)
|
||||
case contactNotFoundByName(contactName: ContactName)
|
||||
case contactNotFoundByMemberId(groupMemberId: Int64)
|
||||
case contactNotReady(contactName: ContactName)
|
||||
case duplicateContactLink
|
||||
case userContactLinkNotFound
|
||||
@ -1495,6 +1496,7 @@ public enum StoreError: Decodable {
|
||||
case rcvFileNotFoundXFTP(agentRcvFileId: String)
|
||||
case connectionNotFound(agentConnId: String)
|
||||
case connectionNotFoundById(connId: Int64)
|
||||
case connectionNotFoundByMemberId(groupMemberId: Int64)
|
||||
case pendingConnectionNotFound(connId: Int64)
|
||||
case introNotFound
|
||||
case uniqueID
|
||||
|
@ -1245,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "Datenbank verschlüsseln?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "Lokale Dateien verschlüsseln";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "Verschlüsselte Datenbank";
|
||||
|
||||
@ -1356,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "Fehler beim Erstellen des Profils!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "Fehler beim Entschlüsseln der Datei";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "Fehler beim Löschen der Chat-Datenbank";
|
||||
|
||||
|
@ -1117,7 +1117,7 @@
|
||||
"Direct messages between members are prohibited in this group." = "Los mensajes directos entre miembros del grupo no están permitidos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disable (keep overrides)" = "Desactivar (conservar anulaciones)";
|
||||
"Disable (keep overrides)" = "Desactivar (conservando anulaciones)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disable for all" = "Desactivar para todos";
|
||||
@ -1473,6 +1473,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Even when disabled in the conversation." = "Incluso si está desactivado para la conversación.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"event happened" = "evento ocurrido";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Exit without saving" = "Salir sin guardar";
|
||||
|
||||
|
@ -1245,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "Salaa tietokanta?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "Salaa paikalliset tiedostot";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "Salattu tietokanta";
|
||||
|
||||
@ -1356,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "Virhe profiilin luomisessa!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "Virhe tiedoston salauksen purussa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "Virhe keskustelujen tietokannan poistamisessa";
|
||||
|
||||
|
@ -1245,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "Chiffrer la base de données ?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "Chiffrer les fichiers locaux";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "Base de données chiffrée";
|
||||
|
||||
@ -1356,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "Erreur lors de la création du profil !";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "Erreur lors du déchiffrement du fichier";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "Erreur lors de la suppression de la base de données du chat";
|
||||
|
||||
|
@ -1245,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "Crittografare il database?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "Cripta i file locali";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "Database crittografato";
|
||||
|
||||
@ -1356,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "Errore nella creazione del profilo!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "Errore decifrando il file";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "Errore nell'eliminazione del database della chat";
|
||||
|
||||
|
@ -1242,6 +1242,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "データベースを暗号化しますか?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "ローカルファイルを暗号化する";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "暗号化済みデータベース";
|
||||
|
||||
@ -1353,6 +1356,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "プロフィール作成にエラー発生!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "ファイルの復号エラー";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "チャットデータベース削除にエラー発生";
|
||||
|
||||
|
@ -56,7 +56,7 @@
|
||||
"**Add new contact**: to create your one-time QR Code for your contact." = "**Nieuw contact toevoegen**: om uw eenmalige QR-code of link voor uw contact te maken.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Create link / QR code** for your contact to use." = "**Maak een link / QR-code aan** die uw contactpersoon kan gebruiken.";
|
||||
"**Create link / QR code** for your contact to use." = "**Maak een link / QR-code aan** die uw contact kan gebruiken.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**e2e encrypted** audio call" = "**e2e versleuteld** audio gesprek";
|
||||
@ -80,7 +80,7 @@
|
||||
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Aanbevolen**: apparaattoken en meldingen worden naar de SimpleX Chat-meldingsserver gestuurd, maar niet de berichtinhoud, -grootte of van wie het afkomstig is.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Scan QR code**: to connect to your contact in person or via video call." = "**Scan QR-code**: om persoonlijk of via een video gesprek verbinding te maken met uw contactpersoon.";
|
||||
"**Scan QR code**: to connect to your contact in person or via video call." = "**Scan QR-code**: om persoonlijk of via een video gesprek verbinding te maken met uw contact.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Waarschuwing**: voor directe push meldingen is een wachtwoord vereist dat is opgeslagen in de Keychain.";
|
||||
@ -297,7 +297,7 @@
|
||||
"Accept" = "Accepteer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Accept connection request?" = "Accepteer contactpersoon";
|
||||
"Accept connection request?" = "Accepteer contact";
|
||||
|
||||
/* notification body */
|
||||
"Accept contact request from %@?" = "Accepteer contactverzoek van %@?";
|
||||
@ -375,16 +375,16 @@
|
||||
"Allow" = "Toestaan";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow calls only if your contact allows them." = "Sta oproepen alleen toe als uw contact persoon dit toestaat.";
|
||||
"Allow calls only if your contact allows them." = "Sta oproepen alleen toe als uw contact dit toestaat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow disappearing messages only if your contact allows it to you." = "Sta verdwijnende berichten alleen toe als uw contactpersoon dit toestaat.";
|
||||
"Allow disappearing messages only if your contact allows it to you." = "Sta verdwijnende berichten alleen toe als uw contact dit toestaat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow irreversible message deletion only if your contact allows it to you." = "Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contactpersoon dit toestaat.";
|
||||
"Allow irreversible message deletion only if your contact allows it to you." = "Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow message reactions only if your contact allows them." = "Sta berichtreacties alleen toe als uw contactpersoon dit toestaat.";
|
||||
"Allow message reactions only if your contact allows them." = "Sta berichtreacties alleen toe als uw contact dit toestaat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow message reactions." = "Sta berichtreacties toe.";
|
||||
@ -405,7 +405,7 @@
|
||||
"Allow to send voice messages." = "Sta toe om spraak berichten te verzenden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow voice messages only if your contact allows them." = "Sta spraak berichten alleen toe als uw contactpersoon ze toestaat.";
|
||||
"Allow voice messages only if your contact allows them." = "Sta spraak berichten alleen toe als uw contact ze toestaat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow voice messages?" = "Spraak berichten toestaan?";
|
||||
@ -522,19 +522,19 @@
|
||||
"bold" = "vetgedrukt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can add message reactions." = "Zowel u als uw contactpersoon kunnen berichtreacties toevoegen.";
|
||||
"Both you and your contact can add message reactions." = "Zowel u als uw contact kunnen berichtreacties toevoegen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can irreversibly delete sent messages." = "Zowel jij als je contactpersoon kunnen verzonden berichten onherroepelijk verwijderen.";
|
||||
"Both you and your contact can irreversibly delete sent messages." = "Zowel jij als je contact kunnen verzonden berichten onherroepelijk verwijderen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can make calls." = "Zowel u als uw contact persoon kunnen bellen.";
|
||||
"Both you and your contact can make calls." = "Zowel u als uw contact kunnen bellen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can send disappearing messages." = "Zowel jij als je contactpersoon kunnen verdwijnende berichten sturen.";
|
||||
"Both you and your contact can send disappearing messages." = "Zowel jij als je contact kunnen verdwijnende berichten sturen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can send voice messages." = "Zowel jij als je contactpersoon kunnen spraak berichten verzenden.";
|
||||
"Both you and your contact can send voice messages." = "Zowel jij als je contact kunnen spraak berichten verzenden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Via chat profiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
|
||||
@ -1245,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "Database versleutelen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "Versleutel lokale bestanden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "Versleutelde database";
|
||||
|
||||
@ -1356,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "Fout bij aanmaken van profiel!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "Fout bij het ontsleutelen van bestand";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "Fout bij het verwijderen van de chat database";
|
||||
|
||||
@ -1504,10 +1510,10 @@
|
||||
"File will be deleted from servers." = "Het bestand wordt van de servers verwijderd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File will be received when your contact completes uploading it." = "Het bestand wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.";
|
||||
"File will be received when your contact completes uploading it." = "Het bestand wordt gedownload wanneer uw contact het uploaden heeft voltooid.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File will be received when your contact is online, please wait or check later!" = "Het bestand wordt ontvangen wanneer uw contact persoon online is, even geduld a.u.b. of controleer later!";
|
||||
"File will be received when your contact is online, please wait or check later!" = "Het bestand wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of controleer later!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File: %@" = "Bestand: %@";
|
||||
@ -1702,7 +1708,7 @@
|
||||
"If you can't meet in person, show QR code in a video call, or share the link." = "Als je elkaar niet persoonlijk kunt ontmoeten, laat dan de QR-code zien in een videogesprek of deel de link.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Als u elkaar niet persoonlijk kunt ontmoeten, kunt u **de QR-code scannen in het video gesprek**, of uw contactpersoon kan een uitnodiging link delen.";
|
||||
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Als u elkaar niet persoonlijk kunt ontmoeten, kunt u **de QR-code scannen in het video gesprek**, of uw contact kan een uitnodiging link delen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens onomkeerbaar verwijderd!";
|
||||
@ -1717,7 +1723,7 @@
|
||||
"Ignore" = "Negeren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Image will be received when your contact completes uploading it." = "De afbeelding wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.";
|
||||
"Image will be received when your contact completes uploading it." = "De afbeelding wordt gedownload wanneer uw contact het uploaden heeft voltooid.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Image will be received when your contact is online, please wait or check later!" = "De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!";
|
||||
@ -1756,7 +1762,7 @@
|
||||
"Incognito mode protects your privacy by using a new random profile for each contact." = "Incognito -modus beschermt uw privacy met behulp van een nieuw willekeurig profiel voor elk contact.";
|
||||
|
||||
/* chat list item description */
|
||||
"incognito via contact address link" = "incognito via contact adres link";
|
||||
"incognito via contact address link" = "incognito via contactadres link";
|
||||
|
||||
/* chat list item description */
|
||||
"incognito via group link" = "incognito via groep link";
|
||||
@ -1870,7 +1876,7 @@
|
||||
"It can happen when you or your connection used the old database backup." = "Het kan gebeuren wanneer u of de ander een oude databaseback-up gebruikt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Het kan gebeuren wanneer:\n1. De berichten zijn na 2 dagen verlopen bij de verzendende client of na 30 dagen op de server.\n2. Decodering van het bericht is mislukt, omdat u of uw contactpersoon een oude databaseback-up heeft gebruikt.\n3. De verbinding is verbroken.";
|
||||
"It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Het kan gebeuren wanneer:\n1. De berichten zijn na 2 dagen verlopen bij de verzendende client of na 30 dagen op de server.\n2. Decodering van het bericht is mislukt, omdat u of uw contact een oude databaseback-up heeft gebruikt.\n3. De verbinding is verbroken.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Het lijkt erop dat u al bent verbonden via deze link. Als dit niet het geval is, is er een fout opgetreden (%@).";
|
||||
@ -2252,7 +2258,7 @@
|
||||
"Only you can add message reactions." = "Alleen jij kunt berichtreacties toevoegen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Alleen jij kunt berichten onomkeerbaar verwijderen (je contactpersoon kan ze markeren voor verwijdering).";
|
||||
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can make calls." = "Alleen jij kunt bellen.";
|
||||
@ -2264,19 +2270,19 @@
|
||||
"Only you can send voice messages." = "Alleen jij kunt spraak berichten verzenden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can add message reactions." = "Alleen uw contactpersoon kan berichtreacties toevoegen.";
|
||||
"Only your contact can add message reactions." = "Alleen uw contact kan berichtreacties toevoegen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Alleen uw contactpersoon kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).";
|
||||
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can make calls." = "Alleen je contact kan bellen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can send disappearing messages." = "Alleen uw contactpersoon kan verdwijnende berichten verzenden.";
|
||||
"Only your contact can send disappearing messages." = "Alleen uw contact kan verdwijnende berichten verzenden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can send voice messages." = "Alleen uw contactpersoon kan spraak berichten verzenden.";
|
||||
"Only your contact can send voice messages." = "Alleen uw contact kan spraak berichten verzenden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open chat" = "Gesprekken openen";
|
||||
@ -2333,7 +2339,7 @@
|
||||
"Paste received link" = "Plak de ontvangen link";
|
||||
|
||||
/* placeholder */
|
||||
"Paste the link you received to connect with your contact." = "Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contactpersoon.";
|
||||
"Paste the link you received to connect with your contact." = "Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contact.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"peer-to-peer" = "peer-to-peer";
|
||||
@ -2354,10 +2360,10 @@
|
||||
"PING interval" = "PING interval";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please ask your contact to enable sending voice messages." = "Vraag uw contactpersoon om het verzenden van spraak berichten in te schakelen.";
|
||||
"Please ask your contact to enable sending voice messages." = "Vraag uw contact om het verzenden van spraak berichten in te schakelen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please check that you used the correct link or ask your contact to send you another one." = "Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen.";
|
||||
"Please check that you used the correct link or ask your contact to send you another one." = "Controleer of u de juiste link heeft gebruikt of vraag uw contact om u een andere te sturen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please check your network connection with %@ and try again." = "Controleer uw netwerkverbinding met %@ en probeer het opnieuw.";
|
||||
@ -2699,7 +2705,7 @@
|
||||
"Scan QR code" = "Scan QR-code";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scan security code from your contact's app." = "Scan de beveiligingscode van de app van uw contactpersoon.";
|
||||
"Scan security code from your contact's app." = "Scan de beveiligingscode van de app van uw contact.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scan server QR code" = "Scan server QR-code";
|
||||
@ -3155,7 +3161,7 @@
|
||||
"To ask any questions and to receive updates:" = "Om vragen te stellen en updates te ontvangen:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To connect, your contact can scan QR code or use the link in the app." = "Om verbinding te maken, kan uw contact persoon de QR-code scannen of de link in de app gebruiken.";
|
||||
"To connect, your contact can scan QR code or use the link in the app." = "Om verbinding te maken, kan uw contact de QR-code scannen of de link in de app gebruiken.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To make a new connection" = "Om een nieuwe verbinding te maken";
|
||||
@ -3179,7 +3185,7 @@
|
||||
"To support instant push notifications the chat database has to be migrated." = "Om directe push meldingen te ondersteunen, moet de chat database worden gemigreerd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contactpersoon te verifiëren.";
|
||||
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contact te verifiëren.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Transport isolation" = "Transport isolation";
|
||||
@ -3239,7 +3245,7 @@
|
||||
"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Schakel de modus Niet storen in om onderbrekingen te voorkomen, tenzij u de iOS-oproepinterface gebruikt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.\nOm verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft.";
|
||||
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contact 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 contact om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unlock" = "Ontgrendelen";
|
||||
@ -3329,7 +3335,7 @@
|
||||
"Via browser" = "Via browser";
|
||||
|
||||
/* chat list item description */
|
||||
"via contact address link" = "via contact adres link";
|
||||
"via contact address link" = "via contactadres link";
|
||||
|
||||
/* chat list item description */
|
||||
"via group link" = "via groep link";
|
||||
@ -3347,7 +3353,7 @@
|
||||
"video call (not e2e encrypted)" = "video gesprek (niet e2e versleuteld)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Video will be received when your contact completes uploading it." = "De video wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.";
|
||||
"Video will be received when your contact completes uploading it." = "De video wordt gedownload wanneer uw contact het uploaden heeft voltooid.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Video will be received when your contact is online, please wait or check later!" = "De video wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!";
|
||||
@ -3530,7 +3536,7 @@
|
||||
"You have to enter passphrase every time the app starts - it is not stored on the device." = "U moet elke keer dat de app start het wachtwoord invoeren, deze wordt niet op het apparaat opgeslagen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You invited a contact" = "Je hebt je contactpersoon uitgenodigd";
|
||||
"You invited a contact" = "Je hebt je contact uitgenodigd";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You joined this group" = "Je bent lid geworden van deze groep";
|
||||
@ -3614,10 +3620,10 @@
|
||||
"Your chat profiles" = "Uw chat profielen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Uw contactpersoon moet online zijn om de verbinding te voltooien.\nU kunt deze verbinding verbreken en het contact verwijderen (en later proberen met een nieuwe link).";
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Uw contact moet online zijn om de verbinding te voltooien.\nU kunt deze verbinding verbreken en het contact verwijderen en later proberen met een nieuwe link.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Uw contactpersoon heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%@).";
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Uw contact heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%@).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts can allow full message deletion." = "Uw contacten kunnen volledige verwijdering van berichten toestaan.";
|
||||
|
@ -1245,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "Zaszyfrować bazę danych?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "Zaszyfruj lokalne pliki";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "Zaszyfrowana baza danych";
|
||||
|
||||
@ -1356,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "Błąd tworzenia profilu!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "Błąd odszyfrowania pliku";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "Błąd usuwania bazy danych czatu";
|
||||
|
||||
|
@ -119,7 +119,7 @@
|
||||
"%@ and %@ connected" = "%@ 和%@ 以建立连接";
|
||||
|
||||
/* copied message info, <sender> at <time> */
|
||||
"%@ at %@:" = "%2$@:";
|
||||
"%@ at %@:" = "@ %2$@:";
|
||||
|
||||
/* notification title */
|
||||
"%@ is connected!" = "%@ 已连接!";
|
||||
@ -254,13 +254,13 @@
|
||||
"30 seconds" = "30秒";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"A few more things" = "";
|
||||
"A few more things" = "一些杂项";
|
||||
|
||||
/* notification title */
|
||||
"A new contact" = "新联系人";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"A new random profile will be shared." = "创建一个随机的共享文件";
|
||||
"A new random profile will be shared." = "创建一个随机的共享文件。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"A separate TCP connection will be used **for each chat profile you have in the app**." = "一个单独的 TCP 连接将被用于**您在应用程序中的每个聊天资料**。";
|
||||
@ -297,7 +297,7 @@
|
||||
"Accept" = "接受";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Accept connection request?" = "接受联系人";
|
||||
"Accept connection request?" = "接受联系人?";
|
||||
|
||||
/* notification body */
|
||||
"Accept contact request from %@?" = "接受来自 %@ 的联系人请求?";
|
||||
@ -344,6 +344,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Advanced network settings" = "高级网络设置";
|
||||
|
||||
/* chat item text */
|
||||
"agreeing encryption for %@…" = "正在协商将加密应用于 %@…";
|
||||
|
||||
/* chat item text */
|
||||
"agreeing encryption…" = "同意加密…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All app data is deleted." = "已删除所有应用程序数据。";
|
||||
|
||||
@ -609,6 +615,12 @@
|
||||
/* rcv group event chat item */
|
||||
"changed your role to %@" = "更改您的角色为 %@";
|
||||
|
||||
/* chat item text */
|
||||
"changing address for %@…" = "正在将变更的地址应用于 %@…";
|
||||
|
||||
/* chat item text */
|
||||
"changing address…" = "更改地址…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat archive" = "聊天档案";
|
||||
|
||||
@ -696,11 +708,17 @@
|
||||
/* server test step */
|
||||
"Connect" = "连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect directly" = "直接连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect incognito" = "在隐身状态下连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connect to SimpleX Chat developers." = "连接到 SimpleX Chat 开发者。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via contact link" = "通过联系人链接进行连接?";
|
||||
"Connect via contact link" = "通过联系人链接进行连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via group link?" = "通过群组链接连接?";
|
||||
@ -712,7 +730,7 @@
|
||||
"Connect via link / QR code" = "通过群组链接/二维码连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via one-time link" = "通过一次性链接连接?";
|
||||
"Connect via one-time link" = "通过一次性链接连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connected" = "已连接";
|
||||
@ -795,6 +813,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Contact preferences" = "联系人偏好设置";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contacts" = "联系人";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contacts can mark messages for deletion; you will be able to view them." = "联系人可以将信息标记为删除;您将可以查看这些信息。";
|
||||
|
||||
@ -930,6 +951,12 @@
|
||||
/* pref value */
|
||||
"default (%@)" = "默认 (%@)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"default (no)" = "默认(否)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"default (yes)" = "默认 (是)";
|
||||
|
||||
/* chat item action */
|
||||
"Delete" = "删除";
|
||||
|
||||
@ -1047,6 +1074,15 @@
|
||||
/* rcv group event chat item */
|
||||
"deleted group" = "已删除群组";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delivery" = "传送";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delivery receipts are disabled!" = "送达回执已禁用!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delivery receipts!" = "送达回执!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Description" = "描述";
|
||||
|
||||
@ -1080,9 +1116,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Direct messages between members are prohibited in this group." = "此群中禁止成员之间私信。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disable (keep overrides)" = "禁用(保留覆盖)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disable for all" = "全部禁用";
|
||||
|
||||
/* authentication reason */
|
||||
"Disable SimpleX Lock" = "禁用 SimpleX 锁定";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"disabled" = "关闭";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disappearing message" = "限时消息";
|
||||
|
||||
@ -1119,6 +1164,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Don't create address" = "不创建地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Don't enable" = "不要启用";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Don't show again" = "不再显示";
|
||||
|
||||
@ -1149,9 +1197,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Enable" = "启用";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable (keep overrides)" = "启用(保持覆盖)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable automatic message deletion?" = "启用自动删除消息?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable for all" = "全部启用";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable instant notifications?" = "启用即时通知?";
|
||||
|
||||
@ -1191,6 +1245,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt database?" = "加密数据库?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt local files" = "加密本地文件";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypted database" = "加密数据库";
|
||||
|
||||
@ -1212,6 +1269,30 @@
|
||||
/* notification */
|
||||
"Encrypted message: unexpected error" = "加密消息:意外错误";
|
||||
|
||||
/* chat item text */
|
||||
"encryption agreed" = "已同意加密";
|
||||
|
||||
/* chat item text */
|
||||
"encryption agreed for %@" = "同意对 %@ 进行加密";
|
||||
|
||||
/* chat item text */
|
||||
"encryption ok" = "可以加密";
|
||||
|
||||
/* chat item text */
|
||||
"encryption ok for %@" = "对 %@ 进行加密";
|
||||
|
||||
/* chat item text */
|
||||
"encryption re-negotiation allowed" = "允许重新进行加密协商";
|
||||
|
||||
/* chat item text */
|
||||
"encryption re-negotiation allowed for %@" = "允许对 %@ 进行加密重新协商";
|
||||
|
||||
/* chat item text */
|
||||
"encryption re-negotiation required" = "需要重新进行加密协商";
|
||||
|
||||
/* chat item text */
|
||||
"encryption re-negotiation required for %@" = "需要为 %@ 重新进行加密协商";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ended" = "已结束";
|
||||
|
||||
@ -1278,6 +1359,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating profile!" = "创建资料错误!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error decrypting file" = "解密文件时出错";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting chat database" = "删除聊天数据库错误";
|
||||
|
||||
@ -1302,6 +1386,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error deleting user profile" = "删除用户资料错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error enabling delivery receipts!" = "启用送达回执出错!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error enabling notifications" = "启用通知错误";
|
||||
|
||||
@ -1350,6 +1437,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error sending message" = "发送消息错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error setting delivery receipts!" = "设置送达回执出错!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error starting chat" = "启动聊天错误";
|
||||
|
||||
@ -1359,6 +1449,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile!" = "切换资料错误!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error synchronizing connection" = "同步连接错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error updating group link" = "更新群组链接错误";
|
||||
|
||||
@ -1383,6 +1476,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: URL is invalid" = "错误:URL 无效";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Even when disabled in the conversation." = "即使在对话中被禁用。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"event happened" = "发生的事";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Exit without saving" = "退出而不保存";
|
||||
|
||||
@ -1431,9 +1530,33 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Files and media prohibited!" = "禁止文件和媒体!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filter unread and favorite chats." = "过滤未读和收藏的聊天记录。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Finally, we have them! 🚀" = "终于我们有它们了! 🚀";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Find chats faster" = "更快地查找聊天记录";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix" = "修复";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix connection" = "修复连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix connection?" = "修复连接?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix encryption after restoring backups." = "修复还原备份后的加密问题。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix not supported by contact" = "修复联系人不支持的问题";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix not supported by group member" = "修复群组成员不支持的问题";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"For console" = "用于控制台";
|
||||
|
||||
@ -1626,12 +1749,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Improved server configuration" = "改进的服务器配置";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"In reply to" = "答复";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito" = "隐身聊天";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito mode" = "隐身模式";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito mode protects your privacy by using a new random profile for each contact." = "隐身模式会为每个联系人使用一个新的随机配置文件,从而保护你的隐私。";
|
||||
|
||||
/* chat list item description */
|
||||
"incognito via contact address link" = "通过联系人地址链接隐身聊天";
|
||||
|
||||
@ -1695,6 +1824,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Invalid server address!" = "无效的服务器地址!";
|
||||
|
||||
/* item status text */
|
||||
"Invalid status" = "无效状态";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Invitation expired!" = "邀请已过期!";
|
||||
|
||||
@ -1773,6 +1905,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Joining group" = "加入群组中";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keep your connections" = "保持连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keychain error" = "钥匙串错误";
|
||||
|
||||
@ -1830,6 +1965,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Make a private connection" = "建立私密连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Make one message disappear" = "使一条消息消失";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Make profile private!" = "将个人资料设为私密!";
|
||||
|
||||
@ -1881,6 +2019,9 @@
|
||||
/* item status text */
|
||||
"Message delivery error" = "消息传递错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message delivery receipts!" = "消息送达回执!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message draft" = "消息草稿";
|
||||
|
||||
@ -1947,6 +2088,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"More improvements are coming soon!" = "更多改进即将推出!";
|
||||
|
||||
/* item status description */
|
||||
"Most likely this connection is deleted." = "此连接很可能已被删除。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Most likely this contact has deleted the connection with you." = "很可能此联系人已经删除了与您的联系。";
|
||||
|
||||
@ -2019,6 +2163,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No contacts to add" = "没有联系人可添加";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No delivery information" = "无送达信息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No device token!" = "无设备令牌!";
|
||||
|
||||
@ -2031,6 +2178,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No group!" = "未找到群组!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No history" = "无历史记录";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "没有录制语音消息的权限";
|
||||
|
||||
@ -2317,12 +2467,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Protocol timeout" = "协议超时";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Protocol timeout per KB" = "每 KB 协议超时";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "推送通知";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Rate the app" = "评价此应用程序";
|
||||
|
||||
/* chat item menu */
|
||||
"React…" = "回应…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Read" = "已读";
|
||||
|
||||
@ -2341,6 +2497,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Read more in our GitHub repository." = "在我们的 GitHub 仓库中阅读更多内容。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Receipts are disabled" = "回执已禁用";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"received answer…" = "已收到回复……";
|
||||
|
||||
@ -2371,6 +2530,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Recipients see updates as you type them." = "对方会在您键入时看到更新。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reconnect all connected servers to force message delivery. It uses additional traffic." = "重新连接所有已连接的服务器以强制发送信息。这会耗费更多流量。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reconnect servers?" = "是否重新连接服务器?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Record updated at" = "记录更新于";
|
||||
|
||||
@ -2419,6 +2584,15 @@
|
||||
/* rcv group event chat item */
|
||||
"removed you" = "已将您移除";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Renegotiate" = "重新协商";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Renegotiate encryption" = "重新协商加密";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Renegotiate encryption?" = "重新协商加密?";
|
||||
|
||||
/* chat item action */
|
||||
"Reply" = "回复";
|
||||
|
||||
@ -2557,6 +2731,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Security code" = "安全码";
|
||||
|
||||
/* chat item text */
|
||||
"security code changed" = "安全密码已更改";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select" = "选择";
|
||||
|
||||
@ -2578,6 +2755,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send a live message - it will update for the recipient(s) as you type it" = "发送实时消息——它会在您键入时为收件人更新";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send delivery receipts to" = "将送达回执发送给";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send direct message" = "发送私信";
|
||||
|
||||
@ -2599,6 +2779,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send questions and ideas" = "发送问题和想法";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send receipts" = "发送回执";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send them from gallery or custom keyboards." = "发送它们来自图库或自定义键盘。";
|
||||
|
||||
@ -2608,9 +2791,27 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sender may have deleted the connection request." = "发送人可能已删除连接请求。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending delivery receipts will be enabled for all contacts in all visible chat profiles." = "将对所有可见聊天配置文件中的所有联系人启用送达回执功能。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending delivery receipts will be enabled for all contacts." = "将对所有联系人启用送达回执功能。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending file will be stopped." = "即将停止发送文件。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending receipts is disabled for %lld contacts" = "已为 %lld 联系人禁用送达回执功能";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending receipts is disabled for %lld groups" = "已为 %lld 组禁用送达回执功能";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending receipts is enabled for %lld contacts" = "已为 %lld 联系人启用送达回执功能";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending receipts is enabled for %lld groups" = "已为 %lld 组启用送达回执功能";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending via" = "发送通过";
|
||||
|
||||
@ -2695,6 +2896,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Show developer options" = "显示开发者选项";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show last messages" = "显示最近的消息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show preview" = "显示预览";
|
||||
|
||||
@ -2743,6 +2947,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Skipped messages" = "已跳过消息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Small groups (max 20)" = "小群组(最多 20 人)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "SMP 服务器";
|
||||
|
||||
@ -2878,6 +3085,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The created archive is available via app Settings / Database / Old database archive." = "创建的归档文件可以通过应用设置/数据库/旧数据库归档访问。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "加密正在运行,不需要新的加密协议。这可能会导致连接错误!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The group is fully decentralized – it is visible only to the members." = "该小组是完全分散式的——它只对成员可见。";
|
||||
|
||||
@ -2902,6 +3112,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "该资料仅与您的联系人共享。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second tick we missed! ✅" = "我们错过的第二个\"√\"!✅";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The sender will NOT be notified" = "发送者将不会收到通知";
|
||||
|
||||
@ -2917,6 +3130,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"There should be at least one visible user profile." = "应该至少有一个可见的用户资料。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"These settings are for your current profile **%@**." = "这些设置适用于您当前的配置文件 **%@**。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"They can be overridden in contact and group settings." = "可以在联系人和群组设置中覆盖它们。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。";
|
||||
|
||||
@ -2929,6 +3148,9 @@
|
||||
/* notification title */
|
||||
"this contact" = "这个联系人";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group has over %lld members, delivery receipts are not sent." = "该组有超过 %lld 个成员,不发送送货单。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "该群组已不存在。";
|
||||
|
||||
@ -3073,12 +3295,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use chat" = "使用聊天";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use current profile" = "使用当前配置文件";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use for new connections" = "用于新连接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use iOS call interface" = "使用 iOS 通话界面";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use new incognito profile" = "使用新的隐身配置文件";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use server" = "使用服务器";
|
||||
|
||||
@ -3247,6 +3475,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"You can create it later" = "您可以以后创建它";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can enable later via Settings" = "您可以稍后在设置中启用它";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can enable them later via app Privacy & Security settings." = "您可以稍后通过应用程序的 \"隐私与安全 \"设置启用它们。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right." = "您可以隐藏或静音用户个人资料——只需向右滑动。";
|
||||
|
||||
@ -3415,6 +3649,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your privacy" = "您的隐私设置";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile **%@** will be shared." = "您的个人资料 **%@** 将被共享。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "您的资料存储在您的设备上并仅与您的联系人共享。\nSimpleX 服务器无法看到您的资料。";
|
||||
|
||||
|
@ -134,7 +134,7 @@ actual object AudioPlayer: AudioPlayerInterface {
|
||||
|
||||
// Returns real duration of the track
|
||||
private fun start(fileSource: CryptoFile, seek: Int? = null, onProgressUpdate: (position: Int?, state: TrackState) -> Unit): Int? {
|
||||
val absoluteFilePath = getAppFilePath(fileSource.filePath)
|
||||
val absoluteFilePath = if (fileSource.isAbsolutePath) fileSource.filePath else getAppFilePath(fileSource.filePath)
|
||||
if (!File(absoluteFilePath).exists()) {
|
||||
Log.e(TAG, "No such file: ${fileSource.filePath}")
|
||||
return null
|
||||
@ -272,10 +272,10 @@ actual object AudioPlayer: AudioPlayerInterface {
|
||||
}
|
||||
}
|
||||
|
||||
override fun duration(filePath: String): Int? {
|
||||
override fun duration(unencryptedFilePath: String): Int? {
|
||||
var res: Int? = null
|
||||
kotlin.runCatching {
|
||||
helperPlayer.setDataSource(filePath)
|
||||
helperPlayer.setDataSource(unencryptedFilePath)
|
||||
helperPlayer.prepare()
|
||||
helperPlayer.start()
|
||||
helperPlayer.stop()
|
||||
|
@ -2089,6 +2089,10 @@ data class CryptoFile(
|
||||
val filePath: String,
|
||||
val cryptoArgs: CryptoFileArgs?
|
||||
) {
|
||||
|
||||
val isAbsolutePath: Boolean
|
||||
get() = File(filePath).isAbsolute
|
||||
|
||||
companion object {
|
||||
fun plain(f: String): CryptoFile = CryptoFile(f, null)
|
||||
}
|
||||
|
@ -3911,6 +3911,7 @@ sealed class StoreError {
|
||||
is UserNotFoundByContactRequestId -> "userNotFoundByContactRequestId"
|
||||
is ContactNotFound -> "contactNotFound"
|
||||
is ContactNotFoundByName -> "contactNotFoundByName"
|
||||
is ContactNotFoundByMemberId -> "contactNotFoundByMemberId"
|
||||
is ContactNotReady -> "contactNotReady"
|
||||
is DuplicateContactLink -> "duplicateContactLink"
|
||||
is UserContactLinkNotFound -> "userContactLinkNotFound"
|
||||
@ -3938,6 +3939,7 @@ sealed class StoreError {
|
||||
is RcvFileNotFoundXFTP -> "rcvFileNotFoundXFTP"
|
||||
is ConnectionNotFound -> "connectionNotFound"
|
||||
is ConnectionNotFoundById -> "connectionNotFoundById"
|
||||
is ConnectionNotFoundByMemberId -> "connectionNotFoundByMemberId"
|
||||
is PendingConnectionNotFound -> "pendingConnectionNotFound"
|
||||
is IntroNotFound -> "introNotFound"
|
||||
is UniqueID -> "uniqueID"
|
||||
@ -3966,6 +3968,7 @@ sealed class StoreError {
|
||||
@Serializable @SerialName("userNotFoundByContactRequestId") class UserNotFoundByContactRequestId(val contactRequestId: Long): StoreError()
|
||||
@Serializable @SerialName("contactNotFound") class ContactNotFound(val contactId: Long): StoreError()
|
||||
@Serializable @SerialName("contactNotFoundByName") class ContactNotFoundByName(val contactName: String): StoreError()
|
||||
@Serializable @SerialName("contactNotFoundByMemberId") class ContactNotFoundByMemberId(val groupMemberId: Long): StoreError()
|
||||
@Serializable @SerialName("contactNotReady") class ContactNotReady(val contactName: String): StoreError()
|
||||
@Serializable @SerialName("duplicateContactLink") object DuplicateContactLink: StoreError()
|
||||
@Serializable @SerialName("userContactLinkNotFound") object UserContactLinkNotFound: StoreError()
|
||||
@ -3993,6 +3996,7 @@ sealed class StoreError {
|
||||
@Serializable @SerialName("rcvFileNotFoundXFTP") class RcvFileNotFoundXFTP(val agentRcvFileId: String): StoreError()
|
||||
@Serializable @SerialName("connectionNotFound") class ConnectionNotFound(val agentConnId: String): StoreError()
|
||||
@Serializable @SerialName("connectionNotFoundById") class ConnectionNotFoundById(val connId: Long): StoreError()
|
||||
@Serializable @SerialName("connectionNotFoundByMemberId") class ConnectionNotFoundByMemberId(val groupMemberId: Long): StoreError()
|
||||
@Serializable @SerialName("pendingConnectionNotFound") class PendingConnectionNotFound(val connId: Long): StoreError()
|
||||
@Serializable @SerialName("introNotFound") object IntroNotFound: StoreError()
|
||||
@Serializable @SerialName("uniqueID") object UniqueID: StoreError()
|
||||
|
@ -29,7 +29,7 @@ interface AudioPlayerInterface {
|
||||
fun stop(fileName: String?)
|
||||
fun pause(audioPlaying: MutableState<Boolean>, pro: MutableState<Int>)
|
||||
fun seekTo(ms: Int, pro: MutableState<Int>, filePath: String?)
|
||||
fun duration(filePath: String): Int?
|
||||
fun duration(unencryptedFilePath: String): Int?
|
||||
}
|
||||
|
||||
expect object AudioPlayer: AudioPlayerInterface
|
||||
|
@ -76,6 +76,7 @@ fun ChatListView(chatModel: ChatModel, settingsState: SettingsViewState, setPerf
|
||||
scaffoldState = scaffoldState,
|
||||
drawerContent = { SettingsView(chatModel, setPerformLA, scaffoldState.drawerState) },
|
||||
drawerScrimColor = MaterialTheme.colors.onSurface.copy(alpha = if (isInDarkTheme()) 0.16f else 0.32f),
|
||||
drawerGesturesEnabled = appPlatform.isAndroid,
|
||||
floatingActionButton = {
|
||||
if (searchInList.isEmpty()) {
|
||||
FloatingActionButton(
|
||||
|
@ -334,12 +334,6 @@ private val versionDescriptions: List<VersionDescription> = listOf(
|
||||
)
|
||||
)
|
||||
),
|
||||
// Also in v5.1
|
||||
// preference to disable calls per contact
|
||||
// configurable SOCKS proxy port
|
||||
// access welcome message via a group profile
|
||||
// improve calls on lock screen
|
||||
// better formatting of times and dates
|
||||
VersionDescription(
|
||||
version = "v5.1",
|
||||
post = "https://simplex.chat/blog/20230523-simplex-chat-v5-1-message-reactions-self-destruct-passcode.html",
|
||||
@ -370,7 +364,7 @@ private val versionDescriptions: List<VersionDescription> = listOf(
|
||||
descrId = MR.strings.whats_new_thanks_to_users_contribute_weblate,
|
||||
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat"
|
||||
)
|
||||
),
|
||||
)
|
||||
),
|
||||
VersionDescription(
|
||||
version = "v5.2",
|
||||
@ -401,8 +395,42 @@ private val versionDescriptions: List<VersionDescription> = listOf(
|
||||
titleId = MR.strings.v5_2_more_things,
|
||||
descrId = MR.strings.v5_2_more_things_descr
|
||||
)
|
||||
),
|
||||
)
|
||||
)
|
||||
),
|
||||
VersionDescription(
|
||||
version = "v5.3",
|
||||
post = "https://simplex.chat/blog/20230925-simplex-chat-v5-3-desktop-app-local-file-encryption-directory-service.html",
|
||||
features = listOf(
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_desktop,
|
||||
titleId = MR.strings.v5_3_new_desktop_app,
|
||||
descrId = MR.strings.v5_3_new_desktop_app_descr,
|
||||
link = "https://simplex.chat/downloads/"
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_lock,
|
||||
titleId = MR.strings.v5_3_encrypt_local_files,
|
||||
descrId = MR.strings.v5_3_encrypt_local_files_descr
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_search,
|
||||
titleId = MR.strings.v5_3_discover_join_groups,
|
||||
descrId = MR.strings.v5_3_discover_join_groups_descr,
|
||||
link = "simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion"
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_theater_comedy,
|
||||
titleId = MR.strings.v5_3_simpler_incognito_mode,
|
||||
descrId = MR.strings.v5_3_simpler_incognito_mode_descr
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_translate,
|
||||
titleId = MR.strings.v5_3_new_interface_languages,
|
||||
descrId = MR.strings.v5_3_new_interface_languages_descr,
|
||||
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat"
|
||||
)
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
private val lastVersion = versionDescriptions.last().version
|
||||
|
@ -114,7 +114,7 @@
|
||||
<string name="v4_5_transport_isolation_descr">عن طريق ملف تعريف الدردشة (افتراضي) أو عن طريق الاتصال (تجريبي).</string>
|
||||
<string name="it_can_disabled_via_settings_notifications_still_shown"><![CDATA[<b> يمكن تعطيله عبر الإعدادات</b> - سيستمر عرض الإشعارات أثناء تشغيل التطبيق.]]></string>
|
||||
<string name="settings_audio_video_calls">مكالمات الصوت والفيديو</string>
|
||||
<string name="impossible_to_recover_passphrase"><![CDATA[<b> الرجاء ملاحظة </b>: لن تتمكن من استعادة عبارة المرور أو تغييرها في حالة فقدها.]]></string>
|
||||
<string name="impossible_to_recover_passphrase"><![CDATA[<b>يُرجى الملاحظة</b>: لن تتمكن من استعادة عبارة المرور أو تغييرها في حالة فقدها.]]></string>
|
||||
<string name="both_you_and_your_contacts_can_delete">يمكنك أنت وجهة اتصالك حذف الرسائل المرسلة بشكل لا رجعة فيه.</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">قبول طلبات الاتصال تلقائيًا</string>
|
||||
<string name="la_auth_failed">فشلت المصادقة</string>
|
||||
@ -794,7 +794,8 @@
|
||||
<string name="videos_limit_desc">يمكن إرسال 10 فيديوهات فقط في نفس الوقت</string>
|
||||
<string name="add_contact">رابط دعوة لمرة واحدة</string>
|
||||
<string name="network_use_onion_hosts_no">لا</string>
|
||||
<string name="network_use_onion_hosts_required_desc">سوف تكون مضيفات البصل مطلوبة للاتصال.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">سوف تكون مضيفات البصل مطلوبة للاتصال.
|
||||
\nيُرجى ملاحظة: أنك لن تتمكن من الاتصال بالخوادم بدون عنوان onion.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">سيتم استخدام مضيفات البصل عند توفرها.</string>
|
||||
<string name="network_use_onion_hosts_no_desc_in_alert">لن يتم استخدام مضيفات البصل.</string>
|
||||
<string name="self_destruct_new_display_name">اسم عرض جديد:</string>
|
||||
@ -1374,4 +1375,18 @@
|
||||
<string name="privacy_show_last_messages">إظهار الرسائل الأخيرة</string>
|
||||
<string name="rcv_group_event_n_members_connected">%s، %s و %d أعضاء آخرين متصلون</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s، %s و %s متصل</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">سيتم تشفير قاعدة البيانات وتخزين عبارة المرور في الإعدادات.</string>
|
||||
<string name="you_can_change_it_later">يُخزين عبارة المرور العشوائية في الإعدادات كنص عادي.
|
||||
\nيمكنك تغييره لاحقا.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">سيتم تحديث عبارة مرور تشفير قاعدة البيانات وتخزينها في الإعدادات.</string>
|
||||
<string name="remove_passphrase_from_settings">هل تريد إزالة عبارة المرور من الإعدادات؟</string>
|
||||
<string name="use_random_passphrase">استخدم عبارة مرور عشوائية</string>
|
||||
<string name="save_passphrase_in_settings">حفظ عبارة المرور في الإعدادات</string>
|
||||
<string name="setup_database_passphrase">إعداد كلمة المرور لقاعدة البيانات</string>
|
||||
<string name="set_database_passphrase">تعيين عبارة مرور قاعدة البيانات</string>
|
||||
<string name="open_database_folder">افتح مجلد قاعدة البيانات</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">سيتم تخزين عبارة المرور في الإعدادات كنص عادي بعد تغييرها أو إعادة تشغيل التطبيق.</string>
|
||||
<string name="settings_is_storing_in_clear_text">يُخزين عبارة المرور في الإعدادات كنص عادي.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>يُرجى الملاحظة</b>: يتم توصيل مرحلات الرسائل والملفات عبر وكيل SOCKS. تستخدم المكالمات وإرسال معاينات الارتباط الاتصال المباشر.]]></string>
|
||||
<string name="encrypt_local_files">تشفير الملفات المحلية</string>
|
||||
</resources>
|
@ -1552,6 +1552,16 @@
|
||||
<string name="v5_2_disappear_one_message_descr">Even when disabled in the conversation.</string>
|
||||
<string name="v5_2_more_things">A few more things</string>
|
||||
<string name="v5_2_more_things_descr">- more stable message delivery.\n- a bit better groups.\n- and more!</string>
|
||||
<string name="v5_3_new_desktop_app">New desktop app!</string>
|
||||
<string name="v5_3_new_desktop_app_descr">Create new profile in desktop app. 💻</string>
|
||||
<string name="v5_3_encrypt_local_files">Encrypt stored files & media</string>
|
||||
<string name="v5_3_encrypt_local_files_descr">App encrypts new local files (except videos).</string>
|
||||
<string name="v5_3_discover_join_groups">Discover and join groups</string>
|
||||
<string name="v5_3_discover_join_groups_descr">- connect to directory service (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable.</string>
|
||||
<string name="v5_3_simpler_incognito_mode">Simplified incognito mode</string>
|
||||
<string name="v5_3_simpler_incognito_mode_descr">Toggle incognito when connecting.</string>
|
||||
<string name="v5_3_new_interface_languages">6 new interface languages</string>
|
||||
<string name="v5_3_new_interface_languages_descr">Arabic, Bulgarian, Finnish, Hebrew, Thai and Ukrainian - thanks to the users and Weblate.</string>
|
||||
|
||||
<!-- CustomTimePicker -->
|
||||
<string name="custom_time_unit_seconds">seconds</string>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<string name="add_address_to_your_profile">Добавете адрес към вашия профил, така че вашите контакти да могат да го споделят с други хора. Актуализацията на профила ще бъде изпратена до вашите контакти.</string>
|
||||
<string name="color_secondary_variant">Допълнителен вторичен</string>
|
||||
<string name="users_add">Добави профил</string>
|
||||
<string name="one_time_link_short">1-кратен линк</string>
|
||||
<string name="one_time_link_short">Еднократен линк</string>
|
||||
<string name="chat_item_ttl_week">1 седмица</string>
|
||||
<string name="send_disappearing_message_5_minutes">5 минути</string>
|
||||
<string name="integrity_msg_skipped">%1$d пропуснато(и) съобщение(я)</string>
|
||||
@ -62,7 +62,7 @@
|
||||
<string name="cannot_access_keychain">Не може да се осъществи достъп до Keystore, за да се запази паролата на базата данни</string>
|
||||
<string name="cannot_receive_file">Файлът не може да бъде получен</string>
|
||||
<string name="alert_title_cant_invite_contacts">Не може да поканят контактите!</string>
|
||||
<string name="settings_notification_preview_title">Визуализация на известието</string>
|
||||
<string name="settings_notification_preview_title">Визуализация на известията</string>
|
||||
<string name="notification_preview_mode_message">Текст на съобщението</string>
|
||||
<string name="notification_preview_new_message">ново съобщение</string>
|
||||
<string name="group_welcome_preview">Визуализация</string>
|
||||
@ -177,7 +177,7 @@
|
||||
<string name="app_passcode_replaced_with_self_destruct">Кода за достъп до приложение се заменя с код за самоунищожение.</string>
|
||||
<string name="auto_accept_images">Автоматично приемане на изображения</string>
|
||||
<string name="authentication_cancelled">Идентификацията е отменена</string>
|
||||
<string name="send_link_previews">Изпрати визуализация на линка</string>
|
||||
<string name="send_link_previews">Изпрати визуализация на линковете</string>
|
||||
<string name="settings_section_title_calls">ОБАЖДАНИЯ</string>
|
||||
<string name="keychain_allows_to_receive_ntfs">Android Keystore ще се използва за сигурно съхраняване на паролата, след като рестартирате приложението или промените паролата - това ще позволи получаването на известия.</string>
|
||||
<string name="change_database_passphrase_question">Промяна на паролата на базата данни\?</string>
|
||||
@ -327,14 +327,14 @@
|
||||
<string name="share_text_database_id">ID в базата данни: %d</string>
|
||||
<string name="receipts_section_contacts">Контакти</string>
|
||||
<string name="settings_section_title_themes">ТЕМИ</string>
|
||||
<string name="set_password_to_export_desc">Базата данни е криптирана с произволна парола. Моля, променете я преди експортиране.</string>
|
||||
<string name="set_password_to_export_desc">Базата данни е криптирана с автоматично генерирана парола. Моля, променете я преди експортиране.</string>
|
||||
<string name="database_passphrase">Парола за базата данни</string>
|
||||
<string name="delete_database">Изтрий базата данни</string>
|
||||
<string name="delete_chat_profile_question">Изтриване на чат профила\?</string>
|
||||
<string name="delete_files_and_media_question">Изтрий файлове и медия\?</string>
|
||||
<string name="current_passphrase">Текуща парола…</string>
|
||||
<string name="database_encrypted">Базата данни е криптирана!</string>
|
||||
<string name="encrypted_with_random_passphrase">Базата данни е криптирана с произволна парола, можете да я промените.</string>
|
||||
<string name="encrypted_with_random_passphrase">Базата данни е криптирана с автоматично генерирана парола, можете да я промените.</string>
|
||||
<string name="database_encryption_will_be_updated">Паролата за крптиране на базата данни ще бъде актуализирана и съхранена в Keystore.</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored">Базата данни ще бъде криптирана и паролата ще бъде съхранена в Keystore.</string>
|
||||
<string name="database_passphrase_will_be_updated">Паролата за криптиране на базата данни ще бъде актуализирана.</string>
|
||||
@ -752,7 +752,7 @@
|
||||
<string name="user_unhide">Покажи</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Можете да скриете или заглушите потребителски профил - задръжте върху него за менюто.</string>
|
||||
<string name="incognito">Инкогнито</string>
|
||||
<string name="incognito_info_protects">Режимът инкогнито защитава вашата поверителност, като използва нов произволен профил за всеки контакт.</string>
|
||||
<string name="incognito_info_protects">Режимът инкогнито защитава вашата поверителност, като използва нов автоматично генериран профил за всеки контакт.</string>
|
||||
<string name="incognito_info_allows">Позволява да имате много анонимни връзки без споделени данни между тях в един чат профил .</string>
|
||||
<string name="v4_5_italian_interface">Италиански интерфейс</string>
|
||||
<string name="description_via_contact_address_link_incognito">инкогнито чрез линк с адрес за контакт</string>
|
||||
@ -808,7 +808,8 @@
|
||||
<string name="network_use_onion_hosts_no_desc_in_alert">Няма се използват Onion хостове.</string>
|
||||
<string name="network_use_onion_hosts_required">Задължително</string>
|
||||
<string name="network_use_onion_hosts_no">Не</string>
|
||||
<string name="network_use_onion_hosts_required_desc">За свързване ще са необходими Onion хостове.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">За свързване ще са необходими Onion хостове.
|
||||
\nМоля, обърнете внимание: няма да можете да се свържете със сървърите без .onion адрес.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Ще се използват Onion хостове, когато са налични.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Ще се използват Onion хостове, когато са налични.</string>
|
||||
<string name="network_use_onion_hosts_no_desc">Няма се използват Onion хостове.</string>
|
||||
@ -928,7 +929,7 @@
|
||||
<string name="button_remove_member">Острани член</string>
|
||||
<string name="member_role_will_be_changed_with_notification">Ролята ще бъде променена на \"%s\". Всички в групата ще бъдат уведомени.</string>
|
||||
<string name="users_delete_data_only">Само данни за локален профил</string>
|
||||
<string name="users_delete_with_connections">Profile and server connections</string>
|
||||
<string name="users_delete_with_connections">Профилни и сървърни връзки</string>
|
||||
<string name="user_mute">Без звук</string>
|
||||
<string name="make_profile_private">Направи профила поверителен!</string>
|
||||
<string name="muted_when_inactive">Без звук при неактивност!</string>
|
||||
@ -1032,7 +1033,7 @@
|
||||
<string name="save_auto_accept_settings">Запази настройките за автоматично приемане</string>
|
||||
<string name="save_settings_question">Запази настройките\?</string>
|
||||
<string name="save_profile_password">Запази паролата на профила</string>
|
||||
<string name="stop_chat_question">Спри чат\?</string>
|
||||
<string name="stop_chat_question">Спри чата\?</string>
|
||||
<string name="set_password_to_export">Задай парола за експортиране</string>
|
||||
<string name="stop_chat_confirmation">Спри</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">Спрете чата, за да експортирате, импортирате или изтриете чат базата данни. Няма да можете да получавате и изпращате съобщения, докато чатът е спрян.</string>
|
||||
@ -1057,7 +1058,7 @@
|
||||
<string name="smp_servers">SMP сървъри</string>
|
||||
<string name="share_address_with_contacts_question">Сподели адреса с контактите\?</string>
|
||||
<string name="share_link">Сподели линк</string>
|
||||
<string name="share_with_contacts">Сподели с контакти</string>
|
||||
<string name="share_with_contacts">Сподели с контактите</string>
|
||||
<string name="stop_sharing">Спри споделянето</string>
|
||||
<string name="stop_sharing_address">Спри споделянето на адреса\?</string>
|
||||
<string name="settings_section_title_settings">НАСТРОЙКИ</string>
|
||||
@ -1137,7 +1138,7 @@
|
||||
<string name="search_verb">Търсене</string>
|
||||
<string name="sent_message">Изпратено съобщение</string>
|
||||
<string name="share_verb">Сподели</string>
|
||||
<string name="auth_stop_chat">Спри чат</string>
|
||||
<string name="auth_stop_chat">Спри чата</string>
|
||||
<string name="reveal_verb">Покажи</string>
|
||||
<string name="stop_file__action">Спри файл</string>
|
||||
<string name="icon_descr_settings">Настройки</string>
|
||||
@ -1146,7 +1147,7 @@
|
||||
<string name="show_dev_options">Покажи:</string>
|
||||
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
|
||||
<string name="save_and_notify_contact">Запази и уведоми контакта</string>
|
||||
<string name="save_and_notify_group_members">Запази и уведоми контактите</string>
|
||||
<string name="save_and_notify_group_members">Запази и уведоми членовете на групата</string>
|
||||
<string name="save_preferences_question">Запази настройките\?</string>
|
||||
<string name="icon_descr_speaker_on">Високоговорителят е включен</string>
|
||||
<string name="icon_descr_speaker_off">Високоговорителят е изключен</string>
|
||||
@ -1287,14 +1288,14 @@
|
||||
<string name="wrong_passphrase_title">Грешна парола!</string>
|
||||
<string name="voice_messages">Гласови съобщения</string>
|
||||
<string name="your_preferences">Вашите настройки</string>
|
||||
<string name="whats_new">Какво е ново</string>
|
||||
<string name="whats_new">Какво е новото</string>
|
||||
<string name="v4_3_irreversible_message_deletion_desc">Вашите контакти могат да позволят пълното изтриване на съобщението.</string>
|
||||
<string name="update_database_passphrase">Актуализирай паролата на базата данни</string>
|
||||
<string name="snd_group_event_changed_role_for_yourself">променихте ролята си на %s</string>
|
||||
<string name="snd_group_event_user_left">вие напуснахте</string>
|
||||
<string name="snd_group_event_changed_member_role">променихте ролята на %s на %s</string>
|
||||
<string name="snd_group_event_member_deleted">премахнахте %1$s</string>
|
||||
<string name="incognito_random_profile">Вашият случаен профил</string>
|
||||
<string name="incognito_random_profile">Вашият автоматично генериран профил</string>
|
||||
<string name="user_unmute">Уведомявай</string>
|
||||
<string name="you_can_share_your_address">Можете да споделите адреса си като линк или QR код - всеки може да се свърже с вас.</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed_for_member">променихте адреса за %s</string>
|
||||
@ -1354,7 +1355,7 @@
|
||||
<string name="connect_via_link_incognito">Свързване инкогнито</string>
|
||||
<string name="turn_off_system_restriction_button">Отвори настройките на приложението</string>
|
||||
<string name="turn_off_battery_optimization_button">Позволи</string>
|
||||
<string name="connect__a_new_random_profile_will_be_shared">Нов произволен профил ще бъде споделен.</string>
|
||||
<string name="connect__a_new_random_profile_will_be_shared">Нов автоматично генериран профил ще бъде споделен.</string>
|
||||
<string name="disable_notifications_button">Деактивирай известията</string>
|
||||
<string name="system_restricted_background_in_call_title">Без фонови разговори</string>
|
||||
<string name="connect_via_member_address_alert_title">Свързване директно\?</string>
|
||||
@ -1372,5 +1373,19 @@
|
||||
<string name="rcv_group_event_n_members_connected">%s, %s и %d други членове са свързани</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s и %s са свързани</string>
|
||||
<string name="privacy_message_draft">Чернова на съобщение</string>
|
||||
<string name="privacy_show_last_messages">Показване на последните съобщения</string>
|
||||
<string name="privacy_show_last_messages">Показване на последните съобщения в листа с чатовете</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Базата данни ще бъде криптирана и паролата ще бъде съхранена в настройките.</string>
|
||||
<string name="you_can_change_it_later">Автоматично генерирана парола се съхранява в настройките като обикновен текст.
|
||||
\nМожете да я промените по-късно.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">Паролата за криптиране на базата данни ще бъде актуализирана и съхранена в настройките.</string>
|
||||
<string name="remove_passphrase_from_settings">Премахване на паролата от настройките\?</string>
|
||||
<string name="use_random_passphrase">Използвай автоматично генерирана парола</string>
|
||||
<string name="save_passphrase_in_settings">Запази паролата в настройките</string>
|
||||
<string name="setup_database_passphrase">Задай парола за базата данни</string>
|
||||
<string name="set_database_passphrase">Задай парола за базата данни</string>
|
||||
<string name="open_database_folder">Отвори папката за база данни</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">Паролата ще бъде съхранена в настройките като обикновен текст, след като я промените или рестартирате приложението.</string>
|
||||
<string name="settings_is_storing_in_clear_text">Паролата се съхранява в настройките като обикновен текст.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Моля, обърнете внимание</b>: релетата за съобщения и файлове са свързани чрез SOCKS прокси. Обажданията и изпращането на визуализации на линкове използват директна връзка.]]></string>
|
||||
<string name="encrypt_local_files">Криптиране на локални файлове</string>
|
||||
</resources>
|
@ -1072,14 +1072,14 @@
|
||||
<string name="enable_lock">Povolit zámek</string>
|
||||
<string name="lock_after">Zamknout po</string>
|
||||
<string name="lock_mode">Režim zámku</string>
|
||||
<string name="authentication_cancelled">Ověření zrušeno</string>
|
||||
<string name="authentication_cancelled">Autentizace zrušena</string>
|
||||
<string name="confirm_passcode">Potvrdit heslo</string>
|
||||
<string name="incorrect_passcode">Nesprávné heslo</string>
|
||||
<string name="new_passcode">Nové heslo</string>
|
||||
<string name="submit_passcode">Odeslat</string>
|
||||
<string name="la_mode_system">Systém</string>
|
||||
<string name="change_lock_mode">Změnit zamykání</string>
|
||||
<string name="la_mode_passcode">Heslo</string>
|
||||
<string name="la_mode_passcode">Přístupový kód</string>
|
||||
<string name="passcode_changed">Heslo změněno!</string>
|
||||
<string name="passcode_not_changed">Heslo nezměněno!</string>
|
||||
<string name="passcode_set">Heslo nastaveno!</string>
|
||||
@ -1376,4 +1376,18 @@
|
||||
<string name="privacy_show_last_messages">Zobrazit poslední zprávy</string>
|
||||
<string name="send_receipts_disabled_alert_msg">Tato skupina má více než %1$d členů, doručenky nejsou odeslány.</string>
|
||||
<string name="in_developing_desc">Tato funkce zatím není podporována. Vyzkoušejte další vydání.</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Databáze bude zašifrována a heslo bude uloženo v klíčence.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Všimněte si prosím</b>: zprávy a relé souborů jsou spojeny prostřednictvím proxy SOCKS. Volání a odesílání náhledů odkazů pomocí přímého připojení.]]></string>
|
||||
<string name="encrypt_local_files">Šifrovat místní soubory</string>
|
||||
<string name="you_can_change_it_later">Náhodné heslo je uloženo v nastavení jako prostý text.
|
||||
\nMůžete jej změnit později.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">Heslo pro šifrování databáze bude aktualizováno a uloženo v klíčence.</string>
|
||||
<string name="remove_passphrase_from_settings">Odebrat heslo z nastavení\?</string>
|
||||
<string name="use_random_passphrase">Použít náhodné heslo</string>
|
||||
<string name="save_passphrase_in_settings">Uložit heslo v nastavení</string>
|
||||
<string name="setup_database_passphrase">Nastavení hesla databáze</string>
|
||||
<string name="set_database_passphrase">Nastavit heslo databáze</string>
|
||||
<string name="open_database_folder">Otevřete složku databáze</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">Heslo bude uloženo v nastavení jako prostý text až jej změníte nebo po restartu aplikace.</string>
|
||||
<string name="settings_is_storing_in_clear_text">Heslo je uloženo v nastavení jako prostý text.</string>
|
||||
</resources>
|
@ -405,7 +405,8 @@
|
||||
<string name="network_use_onion_hosts_required">Erforderlich</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Onion-Hosts werden verwendet, wenn sie verfügbar sind.</string>
|
||||
<string name="network_use_onion_hosts_no_desc">Onion-Hosts werden nicht verwendet.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Für die Verbindung werden Onion-Hosts benötigt.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Für die Verbindung werden Onion-Hosts benötigt.
|
||||
\nBitte beachten Sie: Ohne .onion-Adresse können Sie keine Verbindung mit den Servern herstellen.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion-Hosts werden verwendet, wenn sie verfügbar sind.</string>
|
||||
<string name="network_use_onion_hosts_no_desc_in_alert">Onion-Hosts werden nicht verwendet.</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">Für die Verbindung werden Onion-Hosts benötigt.</string>
|
||||
@ -1457,4 +1458,18 @@
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s und %s wurden verbunden</string>
|
||||
<string name="privacy_message_draft">Nachrichtenentwurf</string>
|
||||
<string name="privacy_show_last_messages">Letzte Nachrichten anzeigen</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Die Datenbank wird verschlüsselt und das Passwort in den Einstellungen gespeichert.</string>
|
||||
<string name="you_can_change_it_later">Das zufällige Passwort wird in Klartext in den Einstellungen gespeichert.
|
||||
\nSie können es später ändern.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">Das Passwort für die Datenbankverschlüsselung wird aktualisiert und in den Einstellungen gespeichert.</string>
|
||||
<string name="remove_passphrase_from_settings">Passwort aus den Einstellungen entfernen\?</string>
|
||||
<string name="use_random_passphrase">Zufälliges Passwort verwenden</string>
|
||||
<string name="save_passphrase_in_settings">Passwort in den Einstellungen sichern</string>
|
||||
<string name="setup_database_passphrase">Datenbank-Passwort einrichten</string>
|
||||
<string name="set_database_passphrase">Datenbank-Passwort festlegen</string>
|
||||
<string name="open_database_folder">Datenbank-Ordner öffnen</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">Das Passwort wird in Klartext in den Einstellungen gespeichert, nachdem Sie es geändert oder die App neu gestartet haben.</string>
|
||||
<string name="settings_is_storing_in_clear_text">Das Passwort wurde in Klartext in den Einstellungen gespeichert.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Bitte beachten Sie</b>: Die Nachrichten- und Dateirelais sind per SOCKS Proxy verbunden. Anrufe und gesendete Link-Vorschaubilder nutzen eine direkte Verbindung.]]></string>
|
||||
<string name="encrypt_local_files">Lokale Dateien verschlüsseln</string>
|
||||
</resources>
|
@ -1306,7 +1306,7 @@
|
||||
<string name="sending_delivery_receipts_will_be_enabled_all_profiles">El envío de confirmaciones de entrega se activará para todos los contactos en todos los perfiles visibles.</string>
|
||||
<string name="receipts_section_contacts">Contactos</string>
|
||||
<string name="delivery_receipts_title">¡Confirmación de entrega!</string>
|
||||
<string name="receipts_contacts_disable_keep_overrides">Desactivar (conservar anulaciones)</string>
|
||||
<string name="receipts_contacts_disable_keep_overrides">Desactivar (conservando anulaciones)</string>
|
||||
<string name="v5_2_favourites_filter">Encontrar chats mas rápido</string>
|
||||
<string name="v5_2_disappear_one_message">Escribir un mensaje temporal</string>
|
||||
<string name="receipts_contacts_override_disabled">El envío de confirmaciones está desactivado para %d contactos</string>
|
||||
@ -1351,7 +1351,7 @@
|
||||
<string name="recipient_colon_delivery_status">%s: %s</string>
|
||||
<string name="send_receipts_disabled">desactivado</string>
|
||||
<string name="receipts_groups_disable_for_all">Desactivado para todos los grupos</string>
|
||||
<string name="receipts_groups_disable_keep_overrides">Desactivar (conservar anulaciones de grupo)</string>
|
||||
<string name="receipts_groups_disable_keep_overrides">Desactivar (conservando anulaciones de grupo)</string>
|
||||
<string name="receipts_groups_title_disable">¿Desactivar confirmaciones para grupos\?</string>
|
||||
<string name="receipts_groups_enable_keep_overrides">Activar (conservar anulaciones de grupo)</string>
|
||||
<string name="send_receipts_disabled_alert_title">Confirmaciones desactivadas</string>
|
||||
@ -1377,4 +1377,16 @@
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s y %s conectados</string>
|
||||
<string name="rcv_group_event_2_members_connected">%s y %s conectados</string>
|
||||
<string name="privacy_message_draft">Borrador de mensaje</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">La base de datos será cifrada y la contraseña se guardará en Configuración</string>
|
||||
<string name="you_can_change_it_later">La contraseña aleatoria se almacenará en Configuración como texto plano.
|
||||
\nPuedes cambiarlo más tarde.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">La contraseña para el cifrado de la base de datos se actualizará y almacenará en Configuración</string>
|
||||
<string name="remove_passphrase_from_settings">Eliminar contraseña de configuración\?</string>
|
||||
<string name="use_random_passphrase">Usar contraseña aleatoria</string>
|
||||
<string name="save_passphrase_in_settings">Guardar contraseña en configuración</string>
|
||||
<string name="setup_database_passphrase">Configuración contraseña base de datos</string>
|
||||
<string name="set_database_passphrase">Escribe una contraseña para la base de datos</string>
|
||||
<string name="open_database_folder">Abrir carpeta base de datos</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">La contraseña se almacenará en configuración como texto plano después de cambiarla o reiniciar la aplicación.</string>
|
||||
<string name="settings_is_storing_in_clear_text">La contraseña está almacenada en configuración como texto plano.</string>
|
||||
</resources>
|
@ -872,7 +872,8 @@
|
||||
<string name="network_use_onion_hosts_prefer_desc">Onion-isäntiä käytetään, kun niitä on saatavilla.</string>
|
||||
<string name="network_use_onion_hosts_no_desc">Onion-isäntiä ei käytetä.</string>
|
||||
<string name="network_use_onion_hosts_required">Pakollinen</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Yhteyden muodostamiseen tarvitaan Onion-isäntiä.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Yhteyden muodostamiseen tarvitaan Onion-isäntiä.
|
||||
\nHuomioi: et voi muodostaa yhteyttä palvelimiin ilman .onion-osoitetta.</string>
|
||||
<string name="callstate_received_answer">vastaus saatu…</string>
|
||||
<string name="icon_descr_call_rejected">Hylätty puhelu</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Kiitos käyttäjille – osallistu Weblaten kautta!</string>
|
||||
@ -1374,4 +1375,18 @@
|
||||
<string name="v5_2_message_delivery_receipts_descr">Toinen kuittaus, joka uupui! ✅</string>
|
||||
<string name="error_synchronizing_connection">Virhe yhteyden synkronoinnissa</string>
|
||||
<string name="no_history">Ei historiaa</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Tietokanta salataan ja tunnuslause tallennetaan asetuksiin.</string>
|
||||
<string name="you_can_change_it_later">Satunnainen tunnuslause on tallennettu asetuksiin selkokielisenä.
|
||||
\nVoit muuttaa sen myöhemmin.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">Tietokannan salaustunnuslause päivitetään ja tallennetaan asetuksiin.</string>
|
||||
<string name="remove_passphrase_from_settings">Poista tunnuslause asetuksista\?</string>
|
||||
<string name="use_random_passphrase">Käytä satunnaista tunnuslausetta</string>
|
||||
<string name="save_passphrase_in_settings">Tallenna tunnuslause asetuksiin</string>
|
||||
<string name="setup_database_passphrase">Aseta tietokannan tunnuslause</string>
|
||||
<string name="set_database_passphrase">Aseta tietokannan tunnuslause</string>
|
||||
<string name="open_database_folder">Avaa tietokantakansio</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">Tunnuslause tallennetaan asetuksiin selkokielisenä sen jälkeen, kun olet vaihtanut sen tai käynnistänyt sovelluksen uudelleen.</string>
|
||||
<string name="settings_is_storing_in_clear_text">Tunnuslause on tallennettu asetuksiin selkokielisenä.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b> Huomioi </b>: Viesti- ja tiedostovälittimet yhdistetään SOCKS-proxyn kautta. Puhelut ja linkin esikatselut käyttävät suoraa yhteyttä.]]></string>
|
||||
<string name="encrypt_local_files">Salaa paikalliset tiedostot</string>
|
||||
</resources>
|
@ -253,7 +253,7 @@
|
||||
<string name="icon_descr_server_status_pending">En attente</string>
|
||||
<string name="accept_connection_request__question">Accepter la demande de connexion \?</string>
|
||||
<string name="clear_verb">Effacer</string>
|
||||
<string name="clear_chat_button">Effacer la conversation</string>
|
||||
<string name="clear_chat_button">Effacer le chat</string>
|
||||
<string name="connect_via_link">Se connecter via un lien</string>
|
||||
<string name="clear_verification">Retirer la vérification</string>
|
||||
<string name="one_time_link">Lien d\'invitation unique</string>
|
||||
@ -1376,4 +1376,16 @@
|
||||
<string name="rcv_group_event_2_members_connected">%s et %s sont connecté.es</string>
|
||||
<string name="rcv_group_event_n_members_connected">%s, %s et %d autres membres sont connectés</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s et %s sont connecté.es</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">La base de données sera chiffrée et la phrase de passe sera stockée dans les paramètres.</string>
|
||||
<string name="you_can_change_it_later">La phrase secrète aléatoire est stockée en clair dans les paramètres.
|
||||
\nVous pouvez la modifier ultérieurement.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">La phrase de chiffrement de la base de données sera mise à jour et stockée dans les paramètres.</string>
|
||||
<string name="remove_passphrase_from_settings">Supprimer la phrase secrète des paramètres \?</string>
|
||||
<string name="use_random_passphrase">Utiliser une phrase secrète aléatoire</string>
|
||||
<string name="save_passphrase_in_settings">Enregistrer la phrase secrète dans les paramètres</string>
|
||||
<string name="setup_database_passphrase">Configurer la phrase secrète de la base de données</string>
|
||||
<string name="set_database_passphrase">Définir la phrase secrète de la base de données</string>
|
||||
<string name="open_database_folder">Ouvrir le dossier de la base de données</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">La phrase secrète sera stockée en clair dans les paramètres après que vous la modifiez ou que vous redémarrez l\'application.</string>
|
||||
<string name="settings_is_storing_in_clear_text">La phrase secrète est stockée en clair dans les paramètres.</string>
|
||||
</resources>
|
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M422.5-182v-99.5h-280q-22.969 0-40.234-17.266Q85-316.031 85-339v-439q0-22.969 17.266-40.234Q119.531-835.5 142.5-835.5h675q22.969 0 40.234 17.266Q875-800.969 875-778v439q0 22.969-17.266 40.234Q840.469-281.5 817.5-281.5h-280v99.5h57q11.675 0 20.088 8.463Q623-165.074 623-153.325q0 12.325-8.412 20.575-8.413 8.25-20.088 8.25H366q-12.25 0-20.625-8.425-8.375-8.426-8.375-20.5 0-12.075 8.375-20.325T366-182h56.5Zm-280-157h675v-439h-675v439Zm0 0v-439 439Z"/></svg>
|
After Width: | Height: | Size: 554 B |
@ -612,7 +612,8 @@
|
||||
<string name="network_and_servers">Rete e server</string>
|
||||
<string name="network_settings_title">Impostazioni di rete</string>
|
||||
<string name="network_use_onion_hosts_no">No</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Gli host Onion saranno necessari per la connessione.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Gli host Onion saranno necessari per la connessione.
|
||||
\nNota bene: non potrai connetterti ai server senza indirizzo .onion .</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">Gli host Onion saranno necessari per la connessione.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Gli host Onion verranno usati quando disponibili.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Gli host Onion verranno usati quando disponibili.</string>
|
||||
@ -1376,4 +1377,18 @@
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s e %s sono connessi/e</string>
|
||||
<string name="privacy_message_draft">Bozza</string>
|
||||
<string name="privacy_show_last_messages">Mostra gli ultimi messaggi</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Il database verrà crittografato e la password conservata nelle impostazioni.</string>
|
||||
<string name="you_can_change_it_later">La password casuale viene conservata nelle impostazioni come testo normale.
|
||||
\nPuoi cambiarla dopo.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">La password di crittografia del database verrà aggiornata e conservata nelle impostazioni.</string>
|
||||
<string name="remove_passphrase_from_settings">Rimuovere la password dalle impostazioni\?</string>
|
||||
<string name="use_random_passphrase">Usa password casuale</string>
|
||||
<string name="save_passphrase_in_settings">Salva password nelle impostazioni</string>
|
||||
<string name="setup_database_passphrase">Configura password del database</string>
|
||||
<string name="set_database_passphrase">Imposta password del database</string>
|
||||
<string name="open_database_folder">Apri cartella del database</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">La password verrà conservata nelle impostazioni come testo normale dopo averla cambiata o il riavvio dell\'app.</string>
|
||||
<string name="settings_is_storing_in_clear_text">La password viene conservata nelle impostazioni come testo normale.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Nota bene</b>: i relay di messaggi e file sono connessi via proxy SOCKS. Le chiamate e l\'invio di anteprime dei link usano una connessione diretta.]]></string>
|
||||
<string name="encrypt_local_files">Cripta i file locali</string>
|
||||
</resources>
|
@ -530,7 +530,8 @@
|
||||
<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="network_use_onion_hosts_required_desc">接続にオニオンのホストが必要となります。
|
||||
\n注意: .onion アドレスがないとサーバーに接続できません。</string>
|
||||
<string name="create_address">アドレスを作成</string>
|
||||
<string name="delete_address__question">アドレスを削除しますか?</string>
|
||||
<string name="display_name__field">表示の名前:</string>
|
||||
@ -1376,4 +1377,18 @@
|
||||
<string name="send_receipts_disabled_alert_msg">This group has over %1$d members, delivery receipts are not sent.</string>
|
||||
<string name="error_enabling_delivery_receipts">Error enabling delivery receipts!</string>
|
||||
<string name="delivery_receipts_are_disabled">Delivery receipts are disabled!</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">データベースは暗号化され、パスフレーズは設定に保存されます。</string>
|
||||
<string name="you_can_change_it_later">ランダムなパスフレーズは設定に平文として保存されます。
|
||||
\n後で変更できます。</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">データベースの暗号化パスフレーズが更新され、設定に保存されます。</string>
|
||||
<string name="remove_passphrase_from_settings">設定からパスフレーズを削除しますか?</string>
|
||||
<string name="use_random_passphrase">ランダムなパスフレーズを使用する</string>
|
||||
<string name="save_passphrase_in_settings">パスフレーズを設定に保存します</string>
|
||||
<string name="setup_database_passphrase">データベースのパスフレーズを設定する</string>
|
||||
<string name="set_database_passphrase">データベースのパスフレーズを設定する</string>
|
||||
<string name="open_database_folder">データベースフォルダを開く</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">パスフレーズを変更するかアプリを再起動すると、平文として設定に保存されます。</string>
|
||||
<string name="settings_is_storing_in_clear_text">パスフレーズは平文として設定に保存されます。</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>注意</b>: メッセージとファイルのリレーは SOCKS プロキシ経由で接続されます。 通話とリンク プレビューの送信には直接接続が使用されます。]]></string>
|
||||
<string name="encrypt_local_files">ローカルファイルを暗号化する</string>
|
||||
</resources>
|
@ -59,14 +59,14 @@
|
||||
<string name="v4_2_auto_accept_contact_requests">Contact verzoeken automatisch accepteren</string>
|
||||
<string name="bold_text">vetgedrukt</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_irreversible_message_deletion_only_if">Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact 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">Spraak berichten toestaan\?</string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>Goed voor de batterij</b>. Achtergrondservice controleert berichten elke 10 minuten. Mogelijk mist u oproepen of dringende berichten.]]></string>
|
||||
<string name="integrity_msg_bad_hash">Onjuiste bericht hash</string>
|
||||
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><![CDATA[<b>Scan QR-code</b>: om verbinding te maken met uw contactpersoon die u de QR-code laat zien.]]></string>
|
||||
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><![CDATA[<b>Scan QR-code</b>: om verbinding te maken met uw contact die u de QR-code laat zien.]]></string>
|
||||
<string name="integrity_msg_bad_id">Onjuiste bericht-ID</string>
|
||||
<string name="call_already_ended">Oproep al beëindigd!</string>
|
||||
<string name="chat_item_ttl_month">1 maand</string>
|
||||
@ -75,8 +75,8 @@
|
||||
<string name="above_then_preposition_continuation">hier boven, dan:</string>
|
||||
<string name="users_delete_all_chats_deleted">Alle gesprekken en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!</string>
|
||||
<string name="clear_chat_warning">Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd.</string>
|
||||
<string name="allow_disappearing_messages_only_if">Sta verdwijnende berichten alleen toe als uw contactpersoon dit toestaat.</string>
|
||||
<string name="allow_voice_messages_only_if">Sta spraak berichten alleen toe als uw contactpersoon ze toestaat.</string>
|
||||
<string name="allow_disappearing_messages_only_if">Sta verdwijnende berichten alleen toe als uw contact dit toestaat.</string>
|
||||
<string name="allow_voice_messages_only_if">Sta spraak berichten alleen toe als uw contact 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>
|
||||
@ -99,9 +99,9 @@
|
||||
<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"><![CDATA[<b>Het beste voor de batterij</b>. U ontvangt alleen meldingen wanneer de app wordt uitgevoerd (GEEN achtergrondservice).]]></string>
|
||||
<string name="it_can_disabled_via_settings_notifications_still_shown"><![CDATA[<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="both_you_and_your_contacts_can_delete">Zowel jij als je contact 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 jij als je contact kunnen spraak berichten verzenden.</string>
|
||||
<string name="impossible_to_recover_passphrase"><![CDATA[<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"><![CDATA[<b>Gebruikt meer batterij</b>! Achtergrondservice wordt altijd uitgevoerd - meldingen worden weergegeven zodra berichten beschikbaar zijn.]]></string>
|
||||
<string name="icon_descr_cancel_link_preview">link voorbeeld annuleren</string>
|
||||
@ -374,7 +374,7 @@
|
||||
<string name="delete_group_for_self_cannot_undo_warning">De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt!</string>
|
||||
<string name="hide_notification">Verbergen</string>
|
||||
<string name="server_error">fout</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">Het bestand wordt ontvangen wanneer uw contact persoon online is, even geduld a.u.b. of controleer later!</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">Het bestand wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of controleer later!</string>
|
||||
<string name="error_saving_file">Fout bij opslaan van bestand</string>
|
||||
<string name="file_not_found">Bestand niet gevonden</string>
|
||||
<string name="file_saved">Bestand opgeslagen</string>
|
||||
@ -420,7 +420,7 @@
|
||||
<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"><![CDATA[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_scan_QR_in_video_call_or_ask_for_invitation_link"><![CDATA[Als u elkaar niet persoonlijk kunt ontmoeten, kunt u <b> de QR-code scannen in het video gesprek </b>, of uw contact kan een uitnodiging link delen.]]></string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[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>
|
||||
@ -479,7 +479,7 @@
|
||||
<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 zijn na 2 dagen verlopen bij de verzendende client of na 30 dagen op de server.
|
||||
\n2. Decodering van het bericht is mislukt, omdat u of uw contactpersoon een oude databaseback-up heeft gebruikt.
|
||||
\n2. Decodering van het bericht is mislukt, omdat u of uw contact een oude databaseback-up heeft gebruikt.
|
||||
\n3. De verbinding is verbroken.</string>
|
||||
<string name="joining_group">Deel nemen aan groep</string>
|
||||
<string name="leave_group_button">Verlaten</string>
|
||||
@ -527,7 +527,7 @@
|
||||
<string name="rcv_group_event_invited_via_your_group_link">uitgenodigd via je groep link</string>
|
||||
<string name="incognito">Incognito</string>
|
||||
<string name="icon_descr_call_missed">Gemiste oproep</string>
|
||||
<string name="description_via_contact_address_link_incognito">incognito via contact adres link</string>
|
||||
<string name="description_via_contact_address_link_incognito">incognito via contactadres link</string>
|
||||
<string name="description_via_group_link_incognito">incognito via groep link</string>
|
||||
<string name="description_via_one_time_link_incognito">incognito via eenmalige link</string>
|
||||
<string name="invalid_chat">ongeldige gesprek</string>
|
||||
@ -537,7 +537,7 @@
|
||||
<string name="live">LIVE</string>
|
||||
<string name="ensure_smp_server_address_are_correct_format_and_unique">Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn.</string>
|
||||
<string name="marked_deleted_description">gemarkeerd als verwijderd</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen.</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Controleer of u de juiste link heeft gebruikt of vraag uw contact 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>
|
||||
@ -563,8 +563,8 @@
|
||||
<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="only_your_contact_can_send_disappearing">Alleen uw contact kan verdwijnende berichten verzenden.</string>
|
||||
<string name="only_you_can_delete_messages">Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering).</string>
|
||||
<string name="feature_offered_item_with_param">voorgesteld %s: %2s</string>
|
||||
<string name="old_database_archive">Oud database archief</string>
|
||||
<string name="enter_correct_current_passphrase">Voer het juiste huidige wachtwoord in.</string>
|
||||
@ -584,7 +584,7 @@
|
||||
<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="ask_your_contact_to_enable_voice">Vraag uw contact 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>
|
||||
@ -592,9 +592,9 @@
|
||||
<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_your_contact_can_delete">Alleen uw contact 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="only_your_contact_can_send_voice">Alleen uw contact kan spraak berichten verzenden.</string>
|
||||
<string name="prohibit_message_deletion">Verbied het onomkeerbaar verwijderen van berichten.</string>
|
||||
<string name="feature_offered_item">voorgesteld %s</string>
|
||||
<string name="store_passphrase_securely_without_recover">Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de gesprekken.</string>
|
||||
@ -641,7 +641,7 @@
|
||||
<string name="simplex_service_notification_title">SimpleX Chat 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="notification_preview_mode_contact_desc">Toon alleen contact</string>
|
||||
<string name="ntf_channel_messages">SimpleX Chat berichten</string>
|
||||
<string name="auth_simplex_lock_turned_on">SimpleX Vergrendelen ingeschakeld</string>
|
||||
<string name="auth_stop_chat">Stop chat</string>
|
||||
@ -674,28 +674,28 @@
|
||||
<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="set_contact_name">Naam contact 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_a_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="you_invited_a_contact">Je hebt je contact uitgenodigd</string>
|
||||
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Uw contact 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">SimpleX Adres</string>
|
||||
<string name="show_QR_code">Toon QR-code</string>
|
||||
<string name="image_descr_simplex_logo">SimpleX-Logo</string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">Je chat profiel wordt verzonden naar uw contactpersoon</string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">Je chat profiel wordt verzonden naar uw contact</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="scan_code_from_contacts_app">Scan de beveiligingscode van de app van uw contact.</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="to_verify_compare">Vergelijk (of scan) de code op uw apparaten om end-to-end codering met uw contact te verifiëren.</string>
|
||||
<string name="you_can_also_connect_by_clicking_the_link"><![CDATA[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_chat_profiles">Uw chat profielen</string>
|
||||
<string name="your_simplex_contact_address">Uw SimpleX adres</string>
|
||||
@ -907,8 +907,8 @@
|
||||
<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"><![CDATA[U kunt <font color="#0088ff">verbinding maken met SimpleX Chat 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="connection_error_auth_desc">Tenzij uw contact 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 contact 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">SimpleX Chat servers gebruiken\?</string>
|
||||
<string name="voice_messages_are_prohibited">Spraak berichten zijn verboden in deze groep.</string>
|
||||
@ -916,7 +916,7 @@
|
||||
<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 %1$s verwijderd</string>
|
||||
<string name="contact_sent_large_file">Je contactpersoon heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%1$s).</string>
|
||||
<string name="contact_sent_large_file">Je contact heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%1$s).</string>
|
||||
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Uw huidige chatdatabase wordt VERWIJDERD en VERVANGEN door de geïmporteerde.
|
||||
\nDeze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren.</string>
|
||||
<string name="invite_prohibited_description">Je probeert een contact met wie je een incognito profiel hebt gedeeld uit te nodigen voor de groep waarin je je hoofdprofiel gebruikt</string>
|
||||
@ -937,7 +937,7 @@
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Er wordt geprobeerd verbinding te maken met de server die wordt gebruikt om berichten van dit contact te ontvangen (fout: %1$s).</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 contact adres link</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 %1$s</string>
|
||||
@ -1014,8 +1014,8 @@
|
||||
<string name="confirm_database_upgrades">Bevestig database upgrades</string>
|
||||
<string name="mtr_error_no_down_migration">database versie is nieuwer dan de app, maar geen down migratie voor: %s</string>
|
||||
<string name="incompatible_database_version">Incompatibele database versie</string>
|
||||
<string name="file_will_be_received_when_contact_completes_uploading">Het bestand wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.</string>
|
||||
<string name="image_will_be_received_when_contact_completes_uploading">De afbeelding wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.</string>
|
||||
<string name="file_will_be_received_when_contact_completes_uploading">Het bestand wordt gedownload wanneer uw contact het uploaden heeft voltooid.</string>
|
||||
<string name="image_will_be_received_when_contact_completes_uploading">De afbeelding wordt gedownload wanneer uw contact het uploaden heeft voltooid.</string>
|
||||
<string name="show_dev_options">Toon:</string>
|
||||
<string name="developer_options">Database-ID\'s en Transport isolatie optie.</string>
|
||||
<string name="hide_dev_options">Verbergen:</string>
|
||||
@ -1034,7 +1034,7 @@
|
||||
<string name="icon_descr_waiting_for_video">Wachten op video</string>
|
||||
<string name="waiting_for_video">Wachten op video</string>
|
||||
<string name="video_descr">Video</string>
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">De video wordt gedownload wanneer uw contactpersoon het uploaden heeft voltooid.</string>
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">De video wordt gedownload wanneer uw contact het uploaden heeft voltooid.</string>
|
||||
<string name="error_saving_xftp_servers">Fout bij opslaan van XFTP-servers</string>
|
||||
<string name="error_loading_xftp_servers">Fout bij het laden van XFTP servers</string>
|
||||
<string name="error_xftp_test_server_auth">Server vereist autorisatie om te uploaden, wachtwoord controleren</string>
|
||||
@ -1104,10 +1104,10 @@
|
||||
<string name="stop_snd_file__title">Bestand verzenden stoppen\?</string>
|
||||
<string name="only_your_contact_can_make_calls">Alleen je contact kan bellen.</string>
|
||||
<string name="revoke_file__message">Het bestand wordt van de servers verwijderd.</string>
|
||||
<string name="both_you_and_your_contact_can_make_calls">Zowel u als uw contact persoon kunnen bellen.</string>
|
||||
<string name="both_you_and_your_contact_can_make_calls">Zowel u als uw contact kunnen bellen.</string>
|
||||
<string name="only_you_can_make_calls">Alleen jij kunt bellen.</string>
|
||||
<string name="stop_snd_file__message">Het verzenden van het bestand wordt gestopt.</string>
|
||||
<string name="allow_calls_only_if">Sta oproepen alleen toe als uw contact persoon dit toestaat.</string>
|
||||
<string name="allow_calls_only_if">Sta oproepen alleen toe als uw contact dit toestaat.</string>
|
||||
<string name="allow_your_contacts_to_call">Sta toe dat uw contacten u bellen.</string>
|
||||
<string name="audio_video_calls">Audio/video oproepen</string>
|
||||
<string name="available_in_v51">"
|
||||
@ -1123,7 +1123,7 @@
|
||||
<string name="auth_open_chat_profiles">Chat profielen openen</string>
|
||||
<string name="learn_more_about_address">Over SimpleX adres</string>
|
||||
<string name="learn_more">Kom meer te weten</string>
|
||||
<string name="scan_qr_to_connect_to_contact">Om verbinding te maken, kan uw contact persoon de QR-code scannen of de link in de app gebruiken.</string>
|
||||
<string name="scan_qr_to_connect_to_contact">Om verbinding te maken, kan uw contact de QR-code scannen of de link in de app gebruiken.</string>
|
||||
<string name="customize_theme_title">Thema aanpassen</string>
|
||||
<string name="group_welcome_preview">Voorbeeld</string>
|
||||
<string name="you_can_share_this_address_with_your_contacts">U kunt dit adres delen met uw contacten om ze verbinding te laten maken met %s.</string>
|
||||
@ -1196,14 +1196,14 @@
|
||||
<string name="only_you_can_add_message_reactions">Alleen jij kunt berichtreacties toevoegen.</string>
|
||||
<string name="message_reactions_are_prohibited">Reacties op berichten zijn verboden in deze groep.</string>
|
||||
<string name="prohibit_message_reactions_group">Berichten reacties verbieden.</string>
|
||||
<string name="allow_message_reactions_only_if">Sta berichtreacties alleen toe als uw contactpersoon dit toestaat.</string>
|
||||
<string name="allow_message_reactions_only_if">Sta berichtreacties alleen toe als uw contact dit toestaat.</string>
|
||||
<string name="allow_your_contacts_adding_message_reactions">Sta uw contactpersonen toe om berichtreacties toe te voegen.</string>
|
||||
<string name="allow_message_reactions">Sta berichtreacties toe.</string>
|
||||
<string name="group_members_can_add_message_reactions">Groepsleden kunnen berichtreacties toevoegen.</string>
|
||||
<string name="both_you_and_your_contact_can_add_message_reactions">Zowel u als uw contactpersoon kunnen berichtreacties toevoegen.</string>
|
||||
<string name="both_you_and_your_contact_can_add_message_reactions">Zowel u als uw contact kunnen berichtreacties toevoegen.</string>
|
||||
<string name="message_reactions">Reacties op berichten</string>
|
||||
<string name="message_reactions_prohibited_in_this_chat">Reacties op berichten zijn verboden in deze chat.</string>
|
||||
<string name="only_your_contact_can_add_message_reactions">Alleen uw contactpersoon kan berichtreacties toevoegen.</string>
|
||||
<string name="only_your_contact_can_add_message_reactions">Alleen uw contact kan berichtreacties toevoegen.</string>
|
||||
<string name="custom_time_unit_days">dagen</string>
|
||||
<string name="custom_time_unit_hours">uren</string>
|
||||
<string name="custom_time_unit_minutes">minuten</string>
|
||||
@ -1375,4 +1375,18 @@
|
||||
<string name="privacy_show_last_messages">Laat laatste berichten zien</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s en %s verbonden</string>
|
||||
<string name="rcv_group_event_2_members_connected">%s en %s verbonden</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">De database wordt versleuteld en het wachtwoord wordt opgeslagen in de instellingen.</string>
|
||||
<string name="you_can_change_it_later">Willekeurig wachtwoord wordt in de instellingen opgeslagen als platte tekst.
|
||||
\nJe kunt het later wijzigen.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">Het wachtwoord voor database versleuteling wordt bijgewerkt en opgeslagen in de instellingen.</string>
|
||||
<string name="remove_passphrase_from_settings">Wachtwoord uit instellingen verwijderen\?</string>
|
||||
<string name="use_random_passphrase">Gebruik een willekeurig wachtwoord</string>
|
||||
<string name="save_passphrase_in_settings">Bewaar het wachtwoord in de instellingen</string>
|
||||
<string name="setup_database_passphrase">Database wachtwoord instellen</string>
|
||||
<string name="set_database_passphrase">Database wachtwoord instellen</string>
|
||||
<string name="open_database_folder">Database map openen</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">Het wachtwoord wordt als platte tekst in de instellingen opgeslagen nadat u deze hebt gewijzigd of de app opnieuw hebt opgestart.</string>
|
||||
<string name="settings_is_storing_in_clear_text">Het wachtwoord wordt als leesbare tekst in de instellingen opgeslagen.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Let op</b>: bericht en bestands relais zijn verbonden via SOCKS-proxy. Voor oproepen en het verzenden van link voorbeelden wordt gebruik gemaakt van een directe verbinding.]]></string>
|
||||
<string name="encrypt_local_files">Versleutel lokale bestanden</string>
|
||||
</resources>
|
@ -347,7 +347,8 @@
|
||||
<string name="network_and_servers">Sieć i serwery</string>
|
||||
<string name="network_settings_title">Ustawienia sieci</string>
|
||||
<string name="network_use_onion_hosts_no">Nie</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Hosty onion będą wymagane do połączenia.</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Hosty onion będą wymagane do połączenia.
|
||||
\nUwaga: nie będziesz mógł połączyć się z serwerami bez adresu .onion.</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">Hosty onion będą wymagane do połączenia.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Hosty onion będą używane, gdy będą dostępne.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Hosty onion będą używane, gdy będą dostępne.</string>
|
||||
@ -1376,4 +1377,18 @@
|
||||
<string name="rcv_group_event_2_members_connected">%s i %s połączeni</string>
|
||||
<string name="rcv_group_event_n_members_connected">%s, %s i %d innych członków połączeni</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s i %s połączeni</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Baza danych zostanie zaszyfrowana, a hasło zapisane w ustawieniach.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Uwaga</b>: przekaźniki wiadomości i plików są połączone za pośrednictwem serwera proxy SOCKS. Połączenia i wysyłanie podglądów linków korzystają z połączenia bezpośredniego.]]></string>
|
||||
<string name="encrypt_local_files">Zaszyfruj lokalne pliki</string>
|
||||
<string name="you_can_change_it_later">Losowe hasło jest trzymane w ustawieniach w czystym tekście.
|
||||
\nMożesz zmienić je później.</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">Hasło szyfrowania bazy danych zostanie zaktualizowane i zapisane w ustawieniach.</string>
|
||||
<string name="remove_passphrase_from_settings">Usunąć hasło z ustawień\?</string>
|
||||
<string name="use_random_passphrase">Użyj losowego hasła</string>
|
||||
<string name="save_passphrase_in_settings">Zapisz hasło w ustawieniach</string>
|
||||
<string name="setup_database_passphrase">Ustaw hasło bazy danych</string>
|
||||
<string name="set_database_passphrase">Ustaw hasło bazy danych</string>
|
||||
<string name="open_database_folder">Otwórz folder bazy danych</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">Hasło będzie trzymane w ustawieniach jako czysty tekst po tym jak je zmienisz lub zrestartujesz aplikację.</string>
|
||||
<string name="settings_is_storing_in_clear_text">Hasło jest trzymane w ustawieniach w czystym tekście.</string>
|
||||
</resources>
|
@ -343,14 +343,14 @@
|
||||
<string name="one_time_link">Одноразовая ссылка</string>
|
||||
<!-- settings - SettingsView.kt -->
|
||||
<string name="your_settings">Настройки</string>
|
||||
<string name="your_simplex_contact_address">Ваш адрес SimpleX</string>
|
||||
<string name="database_passphrase_and_export">Пароль и экспорт базы</string>
|
||||
<string name="your_simplex_contact_address">Ваш SimpleX адрес</string>
|
||||
<string name="database_passphrase_and_export">База данных</string>
|
||||
<string name="about_simplex_chat">Информация о SimpleX Chat</string>
|
||||
<string name="how_to_use_simplex_chat">Как использовать</string>
|
||||
<string name="markdown_help">Форматирование сообщений</string>
|
||||
<string name="markdown_in_messages">Форматирование сообщений</string>
|
||||
<string name="chat_with_the_founder">Отправьте вопросы и идеи</string>
|
||||
<string name="send_us_an_email">Отправить email</string>
|
||||
<string name="chat_with_the_founder">Вопросы и предложения</string>
|
||||
<string name="send_us_an_email">Написать нам письмо</string>
|
||||
<string name="chat_lock">Блокировка SimpleX</string>
|
||||
<string name="chat_console">Консоль</string>
|
||||
<string name="smp_servers">SMP серверы</string>
|
||||
@ -862,11 +862,11 @@
|
||||
<string name="chat_preferences_always">всегда</string>
|
||||
<string name="chat_preferences_on">да</string>
|
||||
<string name="chat_preferences_off">нет</string>
|
||||
<string name="chat_preferences">Предпочтения</string>
|
||||
<string name="chat_preferences">Настройки чатов</string>
|
||||
<string name="contact_preferences">Предпочтения контакта</string>
|
||||
<string name="group_preferences">Предпочтения группы</string>
|
||||
<string name="set_group_preferences">Предпочтения группы</string>
|
||||
<string name="your_preferences">Ваши предпочтения</string>
|
||||
<string name="your_preferences">Настройки чатов</string>
|
||||
<string name="direct_messages">Прямые сообщения</string>
|
||||
<string name="full_deletion">Удаление для всех</string>
|
||||
<string name="voice_messages">Голосовые сообщения</string>
|
||||
@ -958,7 +958,7 @@
|
||||
<string name="allow_disappearing_messages_only_if">Разрешить исчезающие сообщения, только если Ваш контакт разрешает их Вам.</string>
|
||||
<string name="prohibit_sending_disappearing">Запретить посылать исчезающие сообщения.</string>
|
||||
<string name="group_members_can_send_disappearing">Члены группы могут посылать исчезающие сообщения.</string>
|
||||
<string name="whats_new">Новые функции</string>
|
||||
<string name="whats_new">Что нового</string>
|
||||
<string name="new_in_version">Новое в %s</string>
|
||||
<string name="v4_2_security_assessment">Аудит безопасности</string>
|
||||
<string name="v4_2_security_assessment_desc">Безопасность SimpleX Chat была проверена Trail of Bits.</string>
|
||||
@ -1000,7 +1000,7 @@
|
||||
<string name="users_delete_data_only">Только локальные данные профиля</string>
|
||||
<string name="messages_section_title">Сообщения</string>
|
||||
<string name="smp_servers_per_user">Серверы для новых соединений Вашего текущего профиля чата</string>
|
||||
<string name="your_chat_profiles">Ваши профили чата</string>
|
||||
<string name="your_chat_profiles">Ваши профили</string>
|
||||
<string name="users_delete_all_chats_deleted">Все чаты и сообщения будут удалены - это нельзя отменить!</string>
|
||||
<string name="app_version_code">Сборка приложения: %s</string>
|
||||
<string name="app_version_name">Версия приложения: v%s</string>
|
||||
@ -1049,7 +1049,7 @@
|
||||
<string name="smp_save_servers_question">Сохранить серверы\?</string>
|
||||
<string name="should_be_at_least_one_profile">Должен быть хотя бы один профиль пользователя.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Должен быть хотя бы один открытый профиль пользователя.</string>
|
||||
<string name="to_reveal_profile_enter_password">Чтобы показать Ваш скрытый профиль, введите пароль в поле поиска на странице Ваши профили чата.</string>
|
||||
<string name="to_reveal_profile_enter_password">Чтобы показать Ваш скрытый профиль, введите пароль в поле поиска на странице Ваши профили.</string>
|
||||
<string name="user_unmute">Уведомлять</string>
|
||||
<string name="group_welcome_title">Приветственное сообщение</string>
|
||||
<string name="confirm_password">Подтвердить пароль</string>
|
||||
@ -1082,10 +1082,10 @@
|
||||
<string name="v4_6_audio_video_calls_descr">Поддержка bluetooth и другие улучшения.</string>
|
||||
<string name="save_welcome_message_question">Сохранить приветственное сообщение\?</string>
|
||||
<string name="v4_6_group_welcome_message_descr">Установить сообщение для новых членов группы!</string>
|
||||
<string name="tap_to_activate_profile">Нажмите, чтобы сделать профиль активным.</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Благодаря пользователям – добавьте переводы через Weblate!</string>
|
||||
<string name="tap_to_activate_profile">Нажмите на профиль, чтобы переключиться на него.</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Благодаря пользователям - добавьте переводы через Weblate!</string>
|
||||
<string name="you_will_still_receive_calls_and_ntfs">Вы все равно получите звонки и уведомления в профилях без звука, когда они активные.</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Вы можете скрыть профиль или выключить уведомления - подержите, чтобы увидеть меню.</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Вы можете скрыть или отключить уведомления профиля - нажмите и удерживайте профиль, чтобы открыть меню.</string>
|
||||
<string name="image_will_be_received_when_contact_completes_uploading">Изображение будет принято когда Ваш контакт его загрузит.</string>
|
||||
<string name="file_will_be_received_when_contact_completes_uploading">Файл будет принят когда Ваш контакт загрузит его.</string>
|
||||
<string name="database_upgrade">Обновление базы данных</string>
|
||||
@ -1362,7 +1362,7 @@
|
||||
<string name="receipts_section_description">Установки для Вашего активного профиля</string>
|
||||
<string name="receipts_contacts_override_disabled">Отправка отчётов о доставке выключена для %d контактов.</string>
|
||||
<string name="sync_connection_force_desc">Шифрование работает, и новое соглашение не требуется. Это может привести к ошибкам соединения!</string>
|
||||
<string name="v5_2_message_delivery_receipts_descr">Вторая галочка - знать, что доставлено! ✅</string>
|
||||
<string name="v5_2_message_delivery_receipts_descr">Вторая галочка, когда сообщение доставлено! ✅</string>
|
||||
<string name="you_can_enable_delivery_receipts_later_alert">Вы можете включить их позже в настройках Конфиденциальности.</string>
|
||||
<string name="error_aborting_address_change">Ошибка при прекращении изменения адреса</string>
|
||||
<string name="abort_switch_receiving_address_confirm">Прекратить</string>
|
||||
@ -1396,7 +1396,7 @@
|
||||
<string name="fix_connection_not_supported_by_contact">Починка не поддерживается контактом.</string>
|
||||
<string name="fix_connection_not_supported_by_group_member">Починка не поддерживается членом группы.</string>
|
||||
<string name="renegotiate_encryption">Пересогласовать шифрование</string>
|
||||
<string name="v5_2_favourites_filter">Быстро найти чаты</string>
|
||||
<string name="v5_2_favourites_filter">Быстрый поиск чатов</string>
|
||||
<string name="v5_2_message_delivery_receipts">Отчеты о доставке сообщений!</string>
|
||||
<string name="v5_2_more_things">Еще несколько изменений</string>
|
||||
<string name="delivery_receipts_title">Отчёты о доставке!</string>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器。</string>
|
||||
<string name="network_settings">高级网络设置</string>
|
||||
<string name="accept_connection_request__question">接受连接请求?</string>
|
||||
<string name="accept_contact_incognito_button">接受隐身聊天</string>
|
||||
<string name="accept_contact_incognito_button">接受匿名聊天</string>
|
||||
<string name="v4_2_group_links_desc">管理员可以创建链接以加入群组。</string>
|
||||
<string name="smp_servers_preset_add">添加预设服务器</string>
|
||||
<string name="connect_via_link">通过链接连接</string>
|
||||
@ -67,7 +67,7 @@
|
||||
<string name="connect_via_group_link">通过群组链接连接?</string>
|
||||
<string name="connect_via_link_or_qr">通过群组链接/二维码连接</string>
|
||||
<string name="always_use_relay">总是通过中继连接</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">允许您的联系人不可撤回地删除已发送消息。</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">允许您的联系人不可逆地删除已发送消息。</string>
|
||||
<string name="chat_preferences_contact_allows">联系人允许</string>
|
||||
<string name="allow_voice_messages_only_if">仅有您的联系人许可后才允许语音消息。</string>
|
||||
<string name="group_info_member_you">您: %1$s</string>
|
||||
@ -98,7 +98,7 @@
|
||||
<string name="app_version_title">应用程序版本</string>
|
||||
<string name="full_backup">应用程序数据备份</string>
|
||||
<string name="settings_section_title_icon">应用程序图标</string>
|
||||
<string name="app_version_name">应用程序版本:v%s</string>
|
||||
<string name="app_version_name">应用版本:v%s</string>
|
||||
<string name="notifications_mode_off_desc">应用程序仅在运行时可以接受通知,没有后台服务会被启动</string>
|
||||
<string name="auth_unavailable">身份验证不可用</string>
|
||||
<string name="auto_accept_images">自动接受图像</string>
|
||||
@ -122,8 +122,8 @@
|
||||
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b> 最长续航 </b>。您只会在应用程序运行时收到通知(无后台服务)。]]></string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b> 较长续航 </b>。后台服务每 10 分钟检查一次消息。您可能会错过来电或者紧急信息。]]></string>
|
||||
<string name="bold_text">加粗</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">您和您的联系人都可以不可逆转地删除已发送的消息。</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">您和您的联系人都可以发送限时消息。</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">您和您的联系人都可以永久删除已发送的消息。</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">您和您的联系人都可以发送定时自毁消息。</string>
|
||||
<string name="both_you_and_your_contact_can_send_voice">您和您的联系人都可以发送语音消息。</string>
|
||||
<string name="it_can_disabled_via_settings_notifications_still_shown"><![CDATA[<b> 可以在设置里禁用它 </b> - 应用程序运行时仍会显示通知。]]></string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b> 使用更多电量 </b>!后台服务始终运行——一旦收到消息,就会显示通知。]]></string>
|
||||
@ -190,7 +190,7 @@
|
||||
<string name="group_invitation_tap_to_join_incognito">点击以加入隐身聊天</string>
|
||||
<string name="group_main_profile_sent">您的聊天资料将被发送给群组成员</string>
|
||||
<string name="invite_prohibited_description">您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组</string>
|
||||
<string name="incognito_info_protects">隐身模式可以保护你的主要个人资料名称和图像的隐私——对于每个新的联系人,都会创建一个新的随机个人资料。</string>
|
||||
<string name="incognito_info_protects">隐身模式通过为每个联系人使用新的随机配置文件来保护您的隐私。</string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人</string>
|
||||
<string name="description_via_one_time_link_incognito">通过一次性链接隐身</string>
|
||||
<string name="only_group_owners_can_enable_voice">只有群主可以启用语音信息。</string>
|
||||
@ -285,7 +285,7 @@
|
||||
<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="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>
|
||||
@ -531,7 +531,7 @@
|
||||
<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"><![CDATA[为了保护您的隐私,该应用程序没有推送通知,而是具有 <b>SimpleX 后台服务 </b>——它每天使用百分之几的电池。]]></string>
|
||||
<string name="your_settings">您的设置</string>
|
||||
<string name="turn_off_battery_optimization"><![CDATA[为了使用它,请 <b>禁用电池优化</b>为SimpleX在下一个对话框。否则通知将被禁用。]]></string>
|
||||
<string name="turn_off_battery_optimization"><![CDATA[要使用它,请在下一个对话框中<b>允许 SimpleX 在后台运行</b>。 否则,通知将被禁用。]]></string>
|
||||
<string name="settings_notification_preview_title">通知预览</string>
|
||||
<string name="enter_passphrase_notification_title">需要密码</string>
|
||||
<string name="periodic_notifications_disabled">定期通知被禁用!</string>
|
||||
@ -669,7 +669,8 @@
|
||||
<string name="no_contacts_selected">未选择联系人</string>
|
||||
<string name="one_time_link">一次性邀请链接</string>
|
||||
<string name="feature_off">关闭</string>
|
||||
<string name="network_use_onion_hosts_required_desc">连接需要 Onion 主机。</string>
|
||||
<string name="network_use_onion_hosts_required_desc">连接需要 Onion 主机。
|
||||
\n请注意:如果没有 .onion 地址,您将无法连接到服务器。</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion 主机将在可用时使用。</string>
|
||||
<string name="chat_item_ttl_none">从不</string>
|
||||
<string name="feature_offered_item">已提供 %s</string>
|
||||
@ -1004,7 +1005,7 @@
|
||||
<string name="you_will_still_receive_calls_and_ntfs">当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">您可以隐藏或静音用户配置文件——长按以显示菜单。</string>
|
||||
<string name="group_welcome_title">欢迎消息</string>
|
||||
<string name="confirm_database_upgrades">确认数据库升级</string>
|
||||
<string name="confirm_database_upgrades">确定升级数据库</string>
|
||||
<string name="settings_section_title_experimenta">实验性</string>
|
||||
<string name="database_upgrade">数据库升级</string>
|
||||
<string name="mtr_error_different">应用程序/数据库中的不同迁移:%s / %s</string>
|
||||
@ -1119,7 +1120,7 @@
|
||||
<string name="only_you_can_make_calls">只有您可以拨打电话。</string>
|
||||
<string name="only_your_contact_can_make_calls">只有您的联系人可以拨打电话。</string>
|
||||
<string name="allow_your_contacts_to_call">允许您的联系人与您进行语音通话。</string>
|
||||
<string name="allow_calls_only_if">仅当您的联系人许可时才允许呼叫。</string>
|
||||
<string name="allow_calls_only_if">仅当您的联系人同意才允许呼叫。</string>
|
||||
<string name="calls_prohibited_with_this_contact">禁止音频/视频通话。</string>
|
||||
<string name="send_disappearing_message_1_minute">1分钟</string>
|
||||
<string name="one_time_link_short">一次性链接</string>
|
||||
@ -1298,4 +1299,96 @@
|
||||
<string name="delivery">发送</string>
|
||||
<string name="recipient_colon_delivery_status">%s: %s</string>
|
||||
<string name="in_developing_title">敬请期待!</string>
|
||||
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">数据库将被加密,密码将存储在设置中。</string>
|
||||
<string name="you_can_enable_delivery_receipts_later">您可以稍后在“设置”中启用它</string>
|
||||
<string name="receipts_groups_disable_for_all">对所有群组关闭</string>
|
||||
<string name="no_info_on_delivery">无送货信息</string>
|
||||
<string name="connect__your_profile_will_be_shared">您的个人资料 %1$s 将被共享。</string>
|
||||
<string name="sending_delivery_receipts_will_be_enabled">将为所有联系人启用送达回执功能。</string>
|
||||
<string name="turn_off_system_restriction_button">打开应用程序设置</string>
|
||||
<string name="receipts_groups_enable_for_all">为所有组启用</string>
|
||||
<string name="rcv_group_event_n_members_connected">%s、%s 和 %d 其他成员已连接</string>
|
||||
<string name="receipts_contacts_override_enabled">已为 %d 联系人启用送达回执功能</string>
|
||||
<string name="snd_conn_event_ratchet_sync_agreed">已同意 %s 的加密</string>
|
||||
<string name="conn_event_ratchet_sync_allowed">允许重新协商加密</string>
|
||||
<string name="delivery_receipts_title">送达回执!</string>
|
||||
<string name="connect_use_new_incognito_profile">使用新的隐身个人资料</string>
|
||||
<string name="v5_2_favourites_filter_descr">过滤未读和收藏的聊天记录。</string>
|
||||
<string name="rcv_conn_event_verification_code_reset">已更改安全密码</string>
|
||||
<string name="sending_delivery_receipts_will_be_enabled_all_profiles">将为所有可见聊天配置文件中的所有联系人启用送达回执功能。</string>
|
||||
<string name="system_restricted_background_in_call_warn"><![CDATA[要在后台拨打电话,请在应用设置中选择<b>应用电池使用情况</b> / <b>无限制</b>。]]></string>
|
||||
<string name="sender_at_ts">%s 在 %s</string>
|
||||
<string name="receipts_contacts_title_disable">禁用回执?</string>
|
||||
<string name="sync_connection_force_question">重新协商加密?</string>
|
||||
<string name="receipts_section_description_1">可以在联系人和群组设置中覆盖它们。</string>
|
||||
<string name="receipts_contacts_disable_for_all">对所有联系人关闭</string>
|
||||
<string name="you_can_change_it_later">随机密码以明文形式存储在设置中。
|
||||
\n您可以稍后更改。</string>
|
||||
<string name="receipts_groups_override_disabled">已禁用 %d 组的送达回执功能</string>
|
||||
<string name="snd_conn_event_ratchet_sync_required">需要为 %s 重新协商加密</string>
|
||||
<string name="system_restricted_background_desc">SimpleX 无法在后台运行。只有在应用程序运行时,您才会收到通知。</string>
|
||||
<string name="receipts_contacts_enable_keep_overrides">启用(保留覆盖)</string>
|
||||
<string name="database_encryption_will_be_updated_in_settings">即将更新数据库加密密码并将其存储在设置中。</string>
|
||||
<string name="connect_use_current_profile">使用当前配置文件</string>
|
||||
<string name="remove_passphrase_from_settings">从设置中删除密码?</string>
|
||||
<string name="conn_event_ratchet_sync_agreed">同意加密</string>
|
||||
<string name="receipts_contacts_title_enable">启用回执?</string>
|
||||
<string name="system_restricted_background_in_call_desc">程序在后台运行 1 分钟后可能会关闭。</string>
|
||||
<string name="privacy_message_draft">留言草稿</string>
|
||||
<string name="v5_2_disappear_one_message_descr">即使在对话中禁用。</string>
|
||||
<string name="use_random_passphrase">使用随机密码</string>
|
||||
<string name="system_restricted_background_in_call_title">无后台通话</string>
|
||||
<string name="you_can_enable_delivery_receipts_later_alert">您可以稍后通过应用程序隐私和安全设置启用它们。</string>
|
||||
<string name="save_passphrase_in_settings">在设置中保存密码</string>
|
||||
<string name="enable_receipts_all">启用</string>
|
||||
<string name="send_receipts_disabled_alert_msg">该群组成员超过 %1$d ,未发送送达回执。</string>
|
||||
<string name="fix_connection_question">修复连接?</string>
|
||||
<string name="v5_2_message_delivery_receipts_descr">我们错过的第二个\"√\"!✅</string>
|
||||
<string name="setup_database_passphrase">设定数据库密码</string>
|
||||
<string name="receipts_groups_title_disable">为群组禁用回执吗?</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s、%s 和 %d 已连接</string>
|
||||
<string name="fix_connection_not_supported_by_group_member">修复群组成员不支持的问题</string>
|
||||
<string name="receipts_groups_override_enabled">已为 %d 组启用送达回执功能</string>
|
||||
<string name="sync_connection_force_confirm">重新协商</string>
|
||||
<string name="receipts_contacts_disable_keep_overrides">禁用(保留覆盖)</string>
|
||||
<string name="set_database_passphrase">设置数据库密码</string>
|
||||
<string name="receipts_contacts_override_disabled">已禁用 %d 联系人的送达回执功能</string>
|
||||
<string name="receipts_groups_enable_keep_overrides">启用(保留组覆盖)</string>
|
||||
<string name="system_restricted_background_warn"><![CDATA[要启用通知,请在应用设置中选择<b>应用电池使用情况</b> / <b>无限制</b>。]]></string>
|
||||
<string name="send_receipts_disabled_alert_title">送达回执已禁用</string>
|
||||
<string name="open_database_folder">打开数据库文件夹</string>
|
||||
<string name="no_history">无历史记录</string>
|
||||
<string name="fix_connection_confirm">修复</string>
|
||||
<string name="fix_connection">修复连接</string>
|
||||
<string name="rcv_group_event_2_members_connected">%s 和 %s 已连接</string>
|
||||
<string name="send_receipts_disabled">关闭</string>
|
||||
<string name="receipts_section_groups">小群组(最多 20 人)</string>
|
||||
<string name="privacy_show_last_messages">显示最近的消息</string>
|
||||
<string name="settings_section_title_delivery_receipts">将送达回执发送给</string>
|
||||
<string name="error_enabling_delivery_receipts">启用已读回执时出错!</string>
|
||||
<string name="passphrase_will_be_saved_in_settings">更改密码或重启应用后,密码将以明文形式保存在设置中。</string>
|
||||
<string name="paste_the_link_you_received_to_connect_with_your_contact">粘贴您收到的链接以与您的联系人联系…</string>
|
||||
<string name="send_receipts">送达回执</string>
|
||||
<string name="no_selected_chat">没有选择聊天</string>
|
||||
<string name="conn_event_ratchet_sync_ok">可以加密</string>
|
||||
<string name="renegotiate_encryption">重新协商加密</string>
|
||||
<string name="receipts_groups_disable_keep_overrides">禁用(保留组覆盖)</string>
|
||||
<string name="receipts_groups_title_enable">为群组启用回执吗?</string>
|
||||
<string name="fix_connection_not_supported_by_contact">修复联系人不支持的问题</string>
|
||||
<string name="snd_conn_event_ratchet_sync_ok">对 %s 加密正常</string>
|
||||
<string name="v5_2_fix_encryption_descr">修复还原备份后的加密问题。</string>
|
||||
<string name="sync_connection_force_desc">加密正在运行,不需要新的加密协议。此操作可能会导致连接错误!</string>
|
||||
<string name="disable_notifications_button">禁用通知</string>
|
||||
<string name="in_reply_to">回复</string>
|
||||
<string name="dont_enable_receipts">不启用</string>
|
||||
<string name="connect_via_member_address_alert_desc">连接请求将发送给该组成员。</string>
|
||||
<string name="settings_is_storing_in_clear_text">密码以明文形式存储在设置中。</string>
|
||||
<string name="error_synchronizing_connection">同步连接时出错</string>
|
||||
<string name="receipts_section_description">这些设置适用于您当前的配置文件</string>
|
||||
<string name="snd_conn_event_ratchet_sync_allowed">允许为 %s 重新协商加密</string>
|
||||
<string name="receipts_contacts_enable_for_all">为所有人启用</string>
|
||||
<string name="conn_event_ratchet_sync_required">需要重新协商加密</string>
|
||||
<string name="delivery_receipts_are_disabled">已关闭送达回执!</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>请注意</b>:消息和文件中继通过 SOCKS 代理连接。呼叫和发送链接预览使用直接连接。]]></string>
|
||||
<string name="encrypt_local_files">加密本地文件</string>
|
||||
</resources>
|
@ -42,7 +42,7 @@ actual object AudioPlayer: AudioPlayerInterface {
|
||||
/*LALAL*/
|
||||
}
|
||||
|
||||
override fun duration(filePath: String): Int? {
|
||||
override fun duration(unencryptedFilePath: String): Int? {
|
||||
/*LALAL*/
|
||||
return null
|
||||
}
|
||||
|
@ -0,0 +1,15 @@
|
||||
---
|
||||
layout: layouts/article.html
|
||||
title: "SimpleX Chat v5.3 released: desktop app, local file encryption and improved groups with directory service"
|
||||
date: 2023-09-25
|
||||
# image: images/20230925-desktop-app.png
|
||||
# previewBody: blog_previews/20230722.html
|
||||
permalink: "/blog/20230925-simplex-chat-v5-3-desktop-app-local-file-encryption-directory-service.html"
|
||||
draft: true
|
||||
---
|
||||
|
||||
# SimpleX Chat v5.3 released: desktop app, local file encryption and improved groups
|
||||
|
||||
**Published:** September 25, 2023
|
||||
|
||||
This is a placeholder for the release announcement
|
@ -24,3 +24,88 @@ MacOS comes with LibreSSL as default, OpenSSL must be installed to compile Simpl
|
||||
OpenSSL can be installed with `brew install openssl@1.1`
|
||||
|
||||
You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order to have things working properly
|
||||
|
||||
|
||||
## Project branches
|
||||
|
||||
**In simplex-chat repo**
|
||||
|
||||
- `stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.2).
|
||||
|
||||
- `stable-android` - used to build stable Android core library with Nix (GHC 8.10.7).
|
||||
|
||||
- `stable-ios` - used to build stable iOS core library with Nix (GHC 8.10.7) – this branch should be the same as `stable-android` except Nix configuration files.
|
||||
|
||||
- `master` - branch for beta version releases (GHC 9.6.2).
|
||||
|
||||
- `master-android` - used to build beta Android core library with Nix (GHC 8.10.7).
|
||||
|
||||
- `master-ios` - used to build beta iOS core library with Nix (GHC 8.10.7) – this branch should be the same as `master-android` except Nix configuration files.
|
||||
|
||||
**In simplexmq repo**
|
||||
|
||||
- `master` - uses GHC 9.6.2 its commit should be used in `master` branch of simplex-chat repo.
|
||||
|
||||
- `master-ghc8107` - its commit should be used in `master-android` (and `master-ios`) branch of simplex-chat repo.
|
||||
|
||||
## Development & release process
|
||||
|
||||
1. Make PRs to `master` branch _only_ for both simplex-chat and simplexmq repos.
|
||||
|
||||
2. If simplexmq repo was changed, to build mobile core libraries you need to merge its `master` branch into `master-ghc8107` branch.
|
||||
|
||||
3. To build Android core library:
|
||||
- merge `master` branch to `master-android` branch.
|
||||
- update code to be compatible with GHC 8.10.7 (see below).
|
||||
- update `simplexmq` commit in `master-android` branch to the commit in `master-ghc8107` branch.
|
||||
- push to GitHub.
|
||||
|
||||
4. To build iOS core library, merge `master-android` branch to `master-ios` branch, and push to GitHub.
|
||||
|
||||
5. To build Desktop and CLI apps, make tag in `master` branch, APK files should be attached to the release.
|
||||
|
||||
6. After the public release to App Store and Play Store, merge:
|
||||
- `master` to `stable`
|
||||
- `master` to `master-android` (and compile/update code)
|
||||
- `master-android` to `master-ios`
|
||||
- `master-android` to `stable-android`
|
||||
- `master-ios` to `stable-ios`
|
||||
|
||||
7. Independently, `master` branch of simplexmq repo should be merged to `stable` branch on stable releases.
|
||||
|
||||
|
||||
## Differences between GHC 8.10.7 and GHC 9.6.2
|
||||
|
||||
1. The main difference is related to `DuplicateRecordFields` extension.
|
||||
|
||||
It is no longer possible in GHC 9.6.2 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7:
|
||||
|
||||
```haskell
|
||||
{-# LANGUAGE DuplicateRecordFields #-}
|
||||
-- use this in GHC 9.6.2 when needed
|
||||
{-# LANGUAGE OverloadedRecordDot #-}
|
||||
|
||||
-- GHC 9.6.2 syntax
|
||||
let x = record.field
|
||||
|
||||
-- GHC 8.10.7 syntax removed in GHC 9.6.2
|
||||
let x = field (record :: Record)
|
||||
```
|
||||
|
||||
It is still possible to specify type when using record update syntax, use this pragma to suppress compiler warning:
|
||||
|
||||
```haskell
|
||||
-- use this in GHC 9.6.2 when needed
|
||||
{-# OPTIONS_GHC -fno-warn-ambiguous-fields #-}
|
||||
|
||||
let r' = (record :: Record) {field = value}
|
||||
```
|
||||
|
||||
2. Most monad functions now have to be imported from `Control.Monad`, and not from specific monad modules (e.g. `Control.Monad.Except`).
|
||||
|
||||
```haskell
|
||||
-- use this in GHC 9.6.2 when needed
|
||||
import Control.Monad
|
||||
```
|
||||
|
||||
[This PR](https://github.com/simplex-chat/simplex-chat/pull/2975/files) has all the differences.
|
||||
|
56
docs/rfcs/2023-09-12-group-member-contacts.md
Normal file
@ -0,0 +1,56 @@
|
||||
# Groups member contacts
|
||||
|
||||
## Problem
|
||||
|
||||
Ability to send direct messages to group members, w/t creating additional direct connections, while keeping existing UX of separate conversations.
|
||||
|
||||
## Solution
|
||||
|
||||
### Protocol
|
||||
|
||||
Same changes on chat protocol level as for direct messages:
|
||||
|
||||
```haskell
|
||||
data MessageScope = MSGroup | MSDirect
|
||||
|
||||
-- ExtMsgContent extended with scope
|
||||
data ExtMsgContent = ExtMsgContent
|
||||
{ ...
|
||||
scope :: Maybe MessageScope
|
||||
}
|
||||
```
|
||||
|
||||
Changes to MsgRef are not necessary - it would be impossible to quote group message directly to member contact.
|
||||
|
||||
### Model
|
||||
|
||||
If member doesn't have existing contact (e.g. legacy, merged or "member contact" created before), button "Send direct message" / "Open direct chat" in UI would create a new "member contact" record in contacts table that would use the same connection as group member.
|
||||
|
||||
New API:
|
||||
|
||||
```haskell
|
||||
APICreateMemberContact GroupId GroupMemberId
|
||||
```
|
||||
|
||||
- would create a new contact record and assign contact_id to group_member record
|
||||
- should be unmergeable so that the same connection is not used for member across groups
|
||||
- flag
|
||||
- or group_member_id in contacts table
|
||||
- member removal (member leaves or removed) and deletion (group is deleted) should check if "member contact" exists for the same connection, if yes connection should be kept
|
||||
- contact deletion should also check if member exists
|
||||
- due to ON DELETE CASCADE constraints entity id should be first set to null before deleting contact/member record
|
||||
|
||||
On receiving group message with MSDirect scope, if "member contact" doesn't exist it should be created (same as above).
|
||||
|
||||
What if member record already had regular contact assigned? (a contact with a separate connection and no group_member_id) It can happen if merge completed for these members previously, and one of the members deleted contact; or if merge has only completed for one of members.
|
||||
|
||||
- Assigning chat items received as "member contact" to a regular contact would mix messages from different connections in the same conversation. This would practically be indistinguishable in UI, but would further complicate understanding of connection level errors.
|
||||
- Replacing contact_id for group_members record would seem to user as if previous messages were lost when chat is entered via "open direct chat" button, unless there's an indication inside this new chat that an old contact exists separately (requires yet additional field on contact - main_contact_id?).
|
||||
|
||||
When next messages are received read connection entity based on message scope? (parameterize getConnectionEntity, toConnection with message scope). Move message scope on a level above ExtMsgContent? If it's on AChatMsgEvent level - this would allow only MSG agent messages and not make it a fully fledged connection entity. Should "member contact" be able to receive any messages other than XMsgNew and messages referring by shared msg id? If not, maybe it shouldn't be treated as connection entity and instead "member contact" record should be read ad-hoc when processing these messages (for example see processGroupScopeMsg for group direct message). For example, should "member contacts" be available for inviting to other groups? Probably not - if they were, connection established in one group would be reused in another group.
|
||||
|
||||
We could also make distinction between regular contacts and "member contacts" in chat list - e.g. show both group and member avatar/icon, or include group name in conversation name. This would also improve clarity for users which contacts were created for which reason and to better understand consequences to deleting it.
|
||||
|
||||
TODO:
|
||||
|
||||
We should also double check that removed members messages are dropped if received - right now their connections are deleted so it's practically not possible for them to send after being removed; if their connection is kept for "member contact" purpose though, they would still be able to send group messages.
|
@ -111,6 +111,7 @@ library
|
||||
Simplex.Chat.Migrations.M20230827_file_encryption
|
||||
Simplex.Chat.Migrations.M20230829_connections_chat_vrange
|
||||
Simplex.Chat.Migrations.M20230903_connections_to_subscribe
|
||||
Simplex.Chat.Migrations.M20230913_member_contacts
|
||||
Simplex.Chat.Mobile
|
||||
Simplex.Chat.Mobile.File
|
||||
Simplex.Chat.Mobile.Shared
|
||||
|
@ -1376,8 +1376,49 @@ processChatCommand = \case
|
||||
RejectContact cName -> withUser $ \User {userId} -> do
|
||||
connReqId <- withStore $ \db -> getContactRequestIdByName db userId cName
|
||||
processChatCommand $ APIRejectContact connReqId
|
||||
SendMessage chatName msg -> sendTextMessage chatName msg False
|
||||
SendLiveMessage chatName msg -> sendTextMessage chatName msg True
|
||||
SendMessage (ChatName cType name) msg -> withUser $ \user -> do
|
||||
let mc = MCText msg
|
||||
case cType of
|
||||
CTDirect ->
|
||||
withStore' (\db -> runExceptT $ getContactIdByName db user name) >>= \case
|
||||
Right ctId -> do
|
||||
let chatRef = ChatRef CTDirect ctId
|
||||
processChatCommand . APISendMessage chatRef False Nothing $ ComposedMessage Nothing Nothing mc
|
||||
Left _ ->
|
||||
withStore' (\db -> runExceptT $ getActiveMembersByName db user name) >>= \case
|
||||
Right [(gInfo, member)] -> do
|
||||
let GroupInfo {localDisplayName = gName} = gInfo
|
||||
GroupMember {localDisplayName = mName} = member
|
||||
processChatCommand $ SendMemberContactMessage gName mName msg
|
||||
Right (suspectedMember : _) ->
|
||||
throwChatError $ CEContactNotFound name (Just suspectedMember)
|
||||
_ ->
|
||||
throwChatError $ CEContactNotFound name Nothing
|
||||
CTGroup -> do
|
||||
gId <- withStore $ \db -> getGroupIdByName db user name
|
||||
let chatRef = ChatRef CTGroup gId
|
||||
processChatCommand . APISendMessage chatRef False Nothing $ ComposedMessage Nothing Nothing mc
|
||||
_ -> throwChatError $ CECommandError "not supported"
|
||||
SendMemberContactMessage gName mName msg -> withUser $ \user -> do
|
||||
(gId, mId) <- getGroupAndMemberId user gName mName
|
||||
m <- withStore $ \db -> getGroupMember db user gId mId
|
||||
let mc = MCText msg
|
||||
case memberContactId m of
|
||||
Nothing -> do
|
||||
gInfo <- withStore $ \db -> getGroupInfo db user gId
|
||||
toView $ CRNoMemberContactCreating user gInfo m
|
||||
processChatCommand (APICreateMemberContact gId mId) >>= \case
|
||||
cr@(CRNewMemberContact _ Contact {contactId} _ _) -> do
|
||||
toView cr
|
||||
processChatCommand $ APISendMemberContactInvitation contactId (Just mc)
|
||||
cr -> pure cr
|
||||
Just ctId -> do
|
||||
let chatRef = ChatRef CTDirect ctId
|
||||
processChatCommand . APISendMessage chatRef False Nothing $ ComposedMessage Nothing Nothing mc
|
||||
SendLiveMessage chatName msg -> withUser $ \user -> do
|
||||
chatRef <- getChatRef user chatName
|
||||
let mc = MCText msg
|
||||
processChatCommand . APISendMessage chatRef True Nothing $ ComposedMessage Nothing Nothing mc
|
||||
SendMessageBroadcast msg -> withUser $ \user -> do
|
||||
contacts <- withStore' (`getUserContacts` user)
|
||||
let cts = filter (\ct -> isReady ct && directOrUsed ct) contacts
|
||||
@ -1465,7 +1506,7 @@ processChatCommand = \case
|
||||
dm <- directMessage $ XGrpAcpt membership.memberId
|
||||
agentConnId <- withAgent $ \a -> joinConnection a (aUserId user) True connRequest dm subMode
|
||||
withStore' $ \db -> do
|
||||
createMemberConnection db userId fromMember agentConnId peerChatVRange subMode
|
||||
createMemberConnection db userId fromMember agentConnId (fromJVersionRange peerChatVRange) subMode
|
||||
updateGroupMemberStatus db userId fromMember GSMemAccepted
|
||||
updateGroupMemberStatus db userId membership GSMemAccepted
|
||||
updateCIGroupInvitationStatus user
|
||||
@ -1596,6 +1637,34 @@ processChatCommand = \case
|
||||
gInfo <- withStore $ \db -> getGroupInfo db user groupId
|
||||
(_, groupLink, mRole) <- withStore $ \db -> getGroupLink db user gInfo
|
||||
pure $ CRGroupLink user gInfo groupLink mRole
|
||||
APICreateMemberContact gId gMemberId -> withUser $ \user -> do
|
||||
(g, m) <- withStore $ \db -> (,) <$> getGroupInfo db user gId <*> getGroupMember db user gId gMemberId
|
||||
assertUserGroupRole g GRAuthor
|
||||
unless (groupFeatureAllowed SGFDirectMessages g) $ throwChatError $ CECommandError "direct messages not allowed"
|
||||
case memberConn m of
|
||||
Just mConn@Connection {peerChatVRange} -> do
|
||||
unless (isCompatibleRange (fromJVersionRange peerChatVRange) xGrpDirectInvVRange) $ throwChatError CEPeerChatVRangeIncompatible
|
||||
when (isJust $ memberContactId m) $ throwChatError $ CECommandError "member contact already exists"
|
||||
subMode <- chatReadVar subscriptionMode
|
||||
(connId, cReq) <- withAgent $ \a -> createConnection a (aUserId user) True SCMInvitation Nothing subMode
|
||||
-- [incognito] reuse membership incognito profile
|
||||
ct <- withStore' $ \db -> createMemberContact db user connId cReq g m mConn subMode
|
||||
pure $ CRNewMemberContact user ct g m
|
||||
_ -> throwChatError CEGroupMemberNotActive
|
||||
APISendMemberContactInvitation contactId msgContent_ -> withUser $ \user -> do
|
||||
(g, m, ct, cReq) <- withStore $ \db -> getMemberContact db user contactId
|
||||
when (contactGrpInvSent ct) $ throwChatError $ CECommandError "x.grp.direct.inv already sent"
|
||||
case memberConn m of
|
||||
Just mConn -> do
|
||||
let msg = XGrpDirectInv cReq msgContent_
|
||||
(sndMsg, _) <- sendDirectMessage mConn msg (GroupId $ groupId (g :: GroupInfo))
|
||||
withStore' $ \db -> setContactGrpInvSent db ct True
|
||||
let ct' = ct {contactGrpInvSent = True}
|
||||
forM_ msgContent_ $ \mc -> do
|
||||
ci <- saveSndChatItem user (CDDirectSnd ct') sndMsg (CISndMsgContent mc)
|
||||
toView $ CRNewChatItem user (AChatItem SCTDirect SMDSnd (DirectChat ct') ci)
|
||||
pure $ CRNewMemberContactSentInv user ct' g m
|
||||
_ -> throwChatError CEGroupMemberNotActive
|
||||
CreateGroupLink gName mRole -> withUser $ \user -> do
|
||||
groupId <- withStore $ \db -> getGroupIdByName db user gName
|
||||
processChatCommand $ APICreateGroupLink groupId mRole
|
||||
@ -2027,10 +2096,6 @@ processChatCommand = \case
|
||||
ci <- saveSndChatItem user (CDDirectSnd ct) msg content
|
||||
toView $ CRNewChatItem user (AChatItem SCTDirect SMDSnd (DirectChat ct) ci)
|
||||
setActive $ ActiveG localDisplayName
|
||||
sendTextMessage chatName msg live = withUser $ \user -> do
|
||||
chatRef <- getChatRef user chatName
|
||||
let mc = MCText msg
|
||||
processChatCommand . APISendMessage chatRef live Nothing $ ComposedMessage Nothing Nothing mc
|
||||
sndContactCITimed :: Bool -> Contact -> Maybe Int -> m (Maybe CITimed)
|
||||
sndContactCITimed live = sndCITimed_ live . contactTimedTTL
|
||||
sndGroupCITimed :: Bool -> GroupInfo -> Maybe Int -> m (Maybe CITimed)
|
||||
@ -2384,7 +2449,7 @@ acceptContactRequest user UserContactRequest {agentInvitationId = AgentInvId inv
|
||||
let profileToSend = profileToSendOnAccept user incognitoProfile
|
||||
dm <- directMessage $ XInfo profileToSend
|
||||
acId <- withAgent $ \a -> acceptContact a True invId dm subMode
|
||||
withStore' $ \db -> createAcceptedContact db user acId cReqChatVRange cName profileId cp userContactLinkId xContactId incognitoProfile subMode
|
||||
withStore' $ \db -> createAcceptedContact db user acId (fromJVersionRange cReqChatVRange) cName profileId cp userContactLinkId xContactId incognitoProfile subMode
|
||||
|
||||
acceptContactRequestAsync :: ChatMonad m => User -> UserContactRequest -> Maybe IncognitoProfile -> m Contact
|
||||
acceptContactRequestAsync user UserContactRequest {agentInvitationId = AgentInvId invId, cReqChatVRange, localDisplayName = cName, profileId, profile = p, userContactLinkId, xContactId} incognitoProfile = do
|
||||
@ -2392,7 +2457,7 @@ acceptContactRequestAsync user UserContactRequest {agentInvitationId = AgentInvI
|
||||
let profileToSend = profileToSendOnAccept user incognitoProfile
|
||||
(cmdId, acId) <- agentAcceptContactAsync user True invId (XInfo profileToSend) subMode
|
||||
withStore' $ \db -> do
|
||||
ct@Contact {activeConn = Connection {connId}} <- createAcceptedContact db user acId cReqChatVRange cName profileId p userContactLinkId xContactId incognitoProfile subMode
|
||||
ct@Contact {activeConn = Connection {connId}} <- createAcceptedContact db user acId (fromJVersionRange cReqChatVRange) cName profileId p userContactLinkId xContactId incognitoProfile subMode
|
||||
setCommandConnId db user cmdId connId
|
||||
pure ct
|
||||
|
||||
@ -2865,7 +2930,7 @@ processAgentMsgRcvFile _corrId aFileId msg =
|
||||
liftIO $ updateFileCancelled db user fileId CIFSRcvError
|
||||
getChatItemByFileId db user fileId
|
||||
agentXFTPDeleteRcvFile aFileId fileId
|
||||
toView $ CRRcvFileError user ci
|
||||
toView $ CRRcvFileError user ci e
|
||||
|
||||
processAgentMessageConn :: forall m. ChatMonad m => User -> ACorrId -> ConnId -> ACommand 'Agent 'AEConn -> m ()
|
||||
processAgentMessageConn user _ agentConnId END =
|
||||
@ -2988,16 +3053,19 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
withAckMessage' agentConnId conn msgMeta $
|
||||
directMsgReceived ct conn msgMeta msgRcpt
|
||||
CONF confId _ connInfo -> do
|
||||
-- confirming direct connection with a member
|
||||
ChatMessage {chatVRange, chatMsgEvent} <- parseChatMessage conn connInfo
|
||||
conn' <- updatePeerChatVRange conn chatVRange
|
||||
case chatMsgEvent of
|
||||
-- confirming direct connection with a member
|
||||
XGrpMemInfo _memId _memProfile -> do
|
||||
-- TODO check member ID
|
||||
-- TODO update member profile
|
||||
-- [async agent commands] no continuation needed, but command should be asynchronous for stability
|
||||
allowAgentConnectionAsync user conn' confId XOk
|
||||
_ -> messageError "CONF from member must have x.grp.mem.info"
|
||||
XOk -> do
|
||||
allowAgentConnectionAsync user conn' confId XOk
|
||||
void $ withStore' $ \db -> resetMemberContactFields db ct
|
||||
_ -> messageError "CONF for existing contact must have x.grp.mem.info or x.ok"
|
||||
INFO connInfo -> do
|
||||
ChatMessage {chatVRange, chatMsgEvent} <- parseChatMessage conn connInfo
|
||||
_conn' <- updatePeerChatVRange conn chatVRange
|
||||
@ -3033,7 +3101,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
subMode <- chatReadVar subscriptionMode
|
||||
gVar <- asks idsDrg
|
||||
groupConnIds <- createAgentConnectionAsync user CFCreateConnGrpInv True SCMInvitation subMode
|
||||
withStore $ \db -> createNewContactMemberAsync db gVar user groupId ct gLinkMemRole groupConnIds peerChatVRange subMode
|
||||
withStore $ \db -> createNewContactMemberAsync db gVar user groupId ct gLinkMemRole groupConnIds (fromJVersionRange peerChatVRange) subMode
|
||||
_ -> pure ()
|
||||
Just (gInfo@GroupInfo {membership}, m@GroupMember {activeConn}) ->
|
||||
when (maybe False ((== ConnReady) . connStatus) activeConn) $ do
|
||||
@ -3101,7 +3169,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
groupConnReq@(CRInvitationUri _ _) -> case cmdFunction of
|
||||
-- [async agent commands] XGrpMemIntro continuation on receiving INV
|
||||
CFCreateConnGrpMemInv
|
||||
| isCompatibleRange (peerChatVRange conn) groupNoDirectVRange -> sendWithDirectCReq -- sendWithoutDirectCReq
|
||||
| isCompatibleRange (fromJVersionRange $ peerChatVRange conn) groupNoDirectVRange -> sendWithDirectCReq -- sendWithoutDirectCReq
|
||||
| otherwise -> sendWithDirectCReq
|
||||
where
|
||||
sendWithoutDirectCReq = do
|
||||
@ -3239,6 +3307,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
XGrpLeave -> xGrpLeave gInfo m' msg msgMeta
|
||||
XGrpDel -> xGrpDel gInfo m' msg msgMeta
|
||||
XGrpInfo p' -> xGrpInfo gInfo m' p' msg msgMeta
|
||||
XGrpDirectInv connReq mContent_ -> canSend m' $ xGrpDirectInv gInfo m' conn' connReq mContent_ msg msgMeta
|
||||
BFileChunk sharedMsgId chunk -> bFileChunkGroup gInfo sharedMsgId chunk msgMeta
|
||||
_ -> messageError $ "unsupported message: " <> T.pack (show event)
|
||||
currentMemCount <- withStore' $ \db -> getGroupCurrentMembersCount db user gInfo
|
||||
@ -4118,7 +4187,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
dm <- directMessage $ XGrpAcpt memberId
|
||||
connIds <- joinAgentConnectionAsync user True connRequest dm subMode
|
||||
withStore' $ \db -> do
|
||||
createMemberConnectionAsync db user hostId connIds peerChatVRange subMode
|
||||
createMemberConnectionAsync db user hostId connIds (fromJVersionRange peerChatVRange) subMode
|
||||
updateGroupMemberStatusById db userId hostId GSMemAccepted
|
||||
updateGroupMemberStatus db userId membership GSMemAccepted
|
||||
toView $ CRUserAcceptedGroupSent user gInfo {membership = membership {memberStatus = GSMemAccepted}} (Just ct)
|
||||
@ -4498,6 +4567,50 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
groupMsgToView g' m ci msgMeta
|
||||
createGroupFeatureChangedItems user cd CIRcvGroupFeature g g'
|
||||
|
||||
xGrpDirectInv :: GroupInfo -> GroupMember -> Connection -> ConnReqInvitation -> Maybe MsgContent -> RcvMessage -> MsgMeta -> m ()
|
||||
xGrpDirectInv g m mConn connReq mContent_ msg msgMeta = do
|
||||
unless (groupFeatureAllowed SGFDirectMessages g) $ messageError "x.grp.direct.inv: direct messages not allowed"
|
||||
let GroupMember {memberContactId} = m
|
||||
subMode <- chatReadVar subscriptionMode
|
||||
case memberContactId of
|
||||
Nothing -> createNewContact subMode
|
||||
Just mContactId -> do
|
||||
mCt <- withStore $ \db -> getContact db user mContactId
|
||||
let Contact {activeConn = Connection {connId}, contactGrpInvSent} = mCt
|
||||
if contactGrpInvSent
|
||||
then do
|
||||
ownConnReq <- withStore $ \db -> getConnReqInv db connId
|
||||
-- in case both members sent x.grp.direct.inv before receiving other's for processing,
|
||||
-- only the one who received greater connReq joins, the other creates items and waits for confirmation
|
||||
if strEncode connReq > strEncode ownConnReq
|
||||
then joinExistingContact subMode mCt
|
||||
else createItems mCt m
|
||||
else joinExistingContact subMode mCt
|
||||
where
|
||||
joinExistingContact subMode mCt = do
|
||||
connIds <- joinConn subMode
|
||||
mCt' <- withStore' $ \db -> updateMemberContactInvited db user connIds g mConn mCt subMode
|
||||
createItems mCt' m
|
||||
securityCodeChanged mCt'
|
||||
createNewContact subMode = do
|
||||
connIds <- joinConn subMode
|
||||
-- [incognito] reuse membership incognito profile
|
||||
(mCt', m') <- withStore' $ \db -> createMemberContactInvited db user connIds g m mConn subMode
|
||||
createItems mCt' m'
|
||||
joinConn subMode = do
|
||||
dm <- directMessage XOk
|
||||
joinAgentConnectionAsync user True connReq dm subMode
|
||||
createItems mCt' m' = do
|
||||
checkIntegrityCreateItem (CDGroupRcv g m') msgMeta
|
||||
createInternalChatItem user (CDGroupRcv g m') (CIRcvGroupEvent RGEMemberCreatedContact) Nothing
|
||||
toView $ CRNewMemberContactReceivedInv user mCt' g m'
|
||||
forM_ mContent_ $ \mc -> do
|
||||
ci <- saveRcvChatItem user (CDDirectRcv mCt') msg msgMeta (CIRcvMsgContent mc)
|
||||
toView $ CRNewChatItem user (AChatItem SCTDirect SMDRcv (DirectChat mCt') ci)
|
||||
securityCodeChanged ct = do
|
||||
toView $ CRContactVerificationReset user ct
|
||||
createInternalChatItem user (CDDirectRcv ct) (CIRcvConnEvent RCEVerificationCodeReset) Nothing
|
||||
|
||||
directMsgReceived :: Contact -> Connection -> MsgMeta -> NonEmpty MsgReceipt -> m ()
|
||||
directMsgReceived ct conn@Connection {connId} msgMeta msgRcpts = do
|
||||
checkIntegrityCreateItem (CDDirectRcv ct) msgMeta
|
||||
@ -4547,11 +4660,13 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
|
||||
_ -> pure ()
|
||||
|
||||
updatePeerChatVRange :: ChatMonad m => Connection -> VersionRange -> m Connection
|
||||
updatePeerChatVRange conn@Connection {connId, peerChatVRange} msgChatVRange
|
||||
| msgChatVRange /= peerChatVRange = do
|
||||
withStore' $ \db -> setPeerChatVRange db connId msgChatVRange
|
||||
pure conn {peerChatVRange = msgChatVRange}
|
||||
| otherwise = pure conn
|
||||
updatePeerChatVRange conn@Connection {connId, peerChatVRange} msgChatVRange = do
|
||||
let jMsgChatVRange = JVersionRange msgChatVRange
|
||||
if jMsgChatVRange /= peerChatVRange
|
||||
then do
|
||||
withStore' $ \db -> setPeerChatVRange db connId msgChatVRange
|
||||
pure conn {peerChatVRange = jMsgChatVRange}
|
||||
else pure conn
|
||||
|
||||
parseFileDescription :: (ChatMonad m, FilePartyI p) => Text -> m (ValidFileDescription p)
|
||||
parseFileDescription =
|
||||
@ -5344,6 +5459,8 @@ chatCommandP =
|
||||
"/set link role #" *> (GroupLinkMemberRole <$> displayName <*> memberRole),
|
||||
"/delete link #" *> (DeleteGroupLink <$> displayName),
|
||||
"/show link #" *> (ShowGroupLink <$> displayName),
|
||||
"/_create member contact #" *> (APICreateMemberContact <$> A.decimal <* A.space <*> A.decimal),
|
||||
"/_invite member contact @" *> (APISendMemberContactInvitation <$> A.decimal <*> optional (A.space *> msgContentP)),
|
||||
(">#" <|> "> #") *> (SendGroupMessageQuote <$> displayName <* A.space <*> pure Nothing <*> quotedMsg <*> msgTextP),
|
||||
(">#" <|> "> #") *> (SendGroupMessageQuote <$> displayName <* A.space <* char_ '@' <*> (Just <$> displayName) <* A.space <*> quotedMsg <*> msgTextP),
|
||||
"/_contacts " *> (APIListContacts <$> A.decimal),
|
||||
@ -5354,6 +5471,7 @@ chatCommandP =
|
||||
("/connect" <|> "/c") *> (Connect <$> incognitoP <* A.space <*> ((Just <$> strP) <|> A.takeByteString $> Nothing)),
|
||||
("/connect" <|> "/c") *> (AddContact <$> incognitoP),
|
||||
SendMessage <$> chatNameP <* A.space <*> msgTextP,
|
||||
"@#" *> (SendMemberContactMessage <$> displayName <* A.space <* char_ '@' <*> displayName <* A.space <*> msgTextP),
|
||||
"/live " *> (SendLiveMessage <$> chatNameP <*> (A.space *> msgTextP <|> pure "")),
|
||||
(">@" <|> "> @") *> sendMsgQuote (AMsgDirection SMDRcv),
|
||||
(">>@" <|> ">> @") *> sendMsgQuote (AMsgDirection SMDSnd),
|
||||
|
@ -282,6 +282,8 @@ data ChatCommand
|
||||
| APIGroupLinkMemberRole GroupId GroupMemberRole
|
||||
| APIDeleteGroupLink GroupId
|
||||
| APIGetGroupLink GroupId
|
||||
| APICreateMemberContact GroupId GroupMemberId
|
||||
| APISendMemberContactInvitation {contactId :: ContactId, msgContent_ :: Maybe MsgContent}
|
||||
| APIGetUserProtoServers UserId AProtocolType
|
||||
| GetUserProtoServers AProtocolType
|
||||
| APISetUserProtoServers UserId AProtoServersConfig
|
||||
@ -353,6 +355,7 @@ data ChatCommand
|
||||
| AcceptContact IncognitoEnabled ContactName
|
||||
| RejectContact ContactName
|
||||
| SendMessage ChatName Text
|
||||
| SendMemberContactMessage GroupName ContactName Text
|
||||
| SendLiveMessage ChatName Text
|
||||
| SendMessageQuote {contactName :: ContactName, msgDir :: AMsgDirection, quotedMsg :: Text, message :: Text}
|
||||
| SendMessageBroadcast Text -- UserId (not used in UI)
|
||||
@ -506,7 +509,7 @@ data ChatResponse
|
||||
| CRRcvFileComplete {user :: User, chatItem :: AChatItem}
|
||||
| CRRcvFileCancelled {user :: User, chatItem :: AChatItem, rcvFileTransfer :: RcvFileTransfer}
|
||||
| CRRcvFileSndCancelled {user :: User, chatItem :: AChatItem, rcvFileTransfer :: RcvFileTransfer}
|
||||
| CRRcvFileError {user :: User, chatItem :: AChatItem}
|
||||
| CRRcvFileError {user :: User, chatItem :: AChatItem, agentError :: AgentErrorType}
|
||||
| CRSndFileStart {user :: User, chatItem :: AChatItem, sndFileTransfer :: SndFileTransfer}
|
||||
| CRSndFileComplete {user :: User, chatItem :: AChatItem, sndFileTransfer :: SndFileTransfer}
|
||||
| CRSndFileRcvCancelled {user :: User, chatItem :: AChatItem, sndFileTransfer :: SndFileTransfer}
|
||||
@ -553,6 +556,10 @@ data ChatResponse
|
||||
| CRGroupLink {user :: User, groupInfo :: GroupInfo, connReqContact :: ConnReqContact, memberRole :: GroupMemberRole}
|
||||
| CRGroupLinkDeleted {user :: User, groupInfo :: GroupInfo}
|
||||
| CRAcceptingGroupJoinRequest {user :: User, groupInfo :: GroupInfo, contact :: Contact}
|
||||
| CRNoMemberContactCreating {user :: User, groupInfo :: GroupInfo, member :: GroupMember} -- only used in CLI
|
||||
| CRNewMemberContact {user :: User, contact :: Contact, groupInfo :: GroupInfo, member :: GroupMember}
|
||||
| CRNewMemberContactSentInv {user :: User, contact :: Contact, groupInfo :: GroupInfo, member :: GroupMember}
|
||||
| CRNewMemberContactReceivedInv {user :: User, contact :: Contact, groupInfo :: GroupInfo, member :: GroupMember}
|
||||
| CRMemberSubError {user :: User, groupInfo :: GroupInfo, member :: GroupMember, chatError :: ChatError}
|
||||
| CRMemberSubSummary {user :: User, memberSubscriptions :: [MemberSubStatus]}
|
||||
| CRGroupSubscribed {user :: User, groupInfo :: GroupInfo}
|
||||
@ -877,6 +884,7 @@ data ChatErrorType
|
||||
| CEChatStoreChanged
|
||||
| CEInvalidConnReq
|
||||
| CEInvalidChatMessage {connection :: Connection, msgMeta :: Maybe MsgMetaJSON, messageData :: Text, message :: String}
|
||||
| CEContactNotFound {contactName :: ContactName, suspectedMember :: Maybe (GroupInfo, GroupMember)}
|
||||
| CEContactNotReady {contact :: Contact}
|
||||
| CEContactDisabled {contact :: Contact}
|
||||
| CEConnectionDisabled {connection :: Connection}
|
||||
@ -927,6 +935,7 @@ data ChatErrorType
|
||||
| CEAgentCommandError {message :: String}
|
||||
| CEInvalidFileDescription {message :: String}
|
||||
| CEConnectionIncognitoChangeProhibited
|
||||
| CEPeerChatVRangeIncompatible
|
||||
| CEInternalError {message :: String}
|
||||
| CEException {message :: String}
|
||||
deriving (Show, Exception, Generic)
|
||||
|
@ -190,6 +190,7 @@ ciRequiresAttention content = case msgDirection @d of
|
||||
RGEGroupDeleted -> True
|
||||
RGEGroupUpdated _ -> False
|
||||
RGEInvitedViaGroupLink -> False
|
||||
RGEMemberCreatedContact -> False
|
||||
CIRcvConnEvent _ -> True
|
||||
CIRcvChatFeature {} -> False
|
||||
CIRcvChatPreference {} -> False
|
||||
@ -213,6 +214,7 @@ data RcvGroupEvent
|
||||
-- but being RcvGroupEvent allows them to be assigned to the respective member (and so enable "send direct message")
|
||||
-- and be created as unread without adding / working around new status for sent items
|
||||
| RGEInvitedViaGroupLink -- CRSentGroupInvitationViaLink
|
||||
| RGEMemberCreatedContact -- CRNewMemberContactReceivedInv
|
||||
deriving (Show, Generic)
|
||||
|
||||
instance FromJSON RcvGroupEvent where
|
||||
@ -378,6 +380,7 @@ rcvGroupEventToText = \case
|
||||
RGEGroupDeleted -> "deleted group"
|
||||
RGEGroupUpdated _ -> "group profile updated"
|
||||
RGEInvitedViaGroupLink -> "invited via your group link"
|
||||
RGEMemberCreatedContact -> "started direct connection with you"
|
||||
|
||||
sndGroupEventToText :: SndGroupEvent -> Text
|
||||
sndGroupEventToText = \case
|
||||
|
27
src/Simplex/Chat/Migrations/M20230913_member_contacts.hs
Normal file
@ -0,0 +1,27 @@
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
|
||||
module Simplex.Chat.Migrations.M20230913_member_contacts where
|
||||
|
||||
import Database.SQLite.Simple (Query)
|
||||
import Database.SQLite.Simple.QQ (sql)
|
||||
|
||||
m20230913_member_contacts :: Query
|
||||
m20230913_member_contacts =
|
||||
[sql|
|
||||
ALTER TABLE contacts ADD COLUMN contact_group_member_id INTEGER
|
||||
REFERENCES group_members(group_member_id) ON DELETE SET NULL;
|
||||
|
||||
CREATE INDEX idx_contacts_contact_group_member_id ON contacts(contact_group_member_id);
|
||||
|
||||
ALTER TABLE contacts ADD COLUMN contact_grp_inv_sent INTEGER NOT NULL DEFAULT 0;
|
||||
|]
|
||||
|
||||
down_m20230913_member_contacts :: Query
|
||||
down_m20230913_member_contacts =
|
||||
[sql|
|
||||
ALTER TABLE contacts DROP COLUMN contact_grp_inv_sent;
|
||||
|
||||
DROP INDEX idx_contacts_contact_group_member_id;
|
||||
|
||||
ALTER TABLE contacts DROP COLUMN contact_group_member_id;
|
||||
|]
|
@ -68,6 +68,9 @@ CREATE TABLE contacts(
|
||||
deleted INTEGER NOT NULL DEFAULT 0,
|
||||
favorite INTEGER NOT NULL DEFAULT 0,
|
||||
send_rcpts INTEGER,
|
||||
contact_group_member_id INTEGER
|
||||
REFERENCES group_members(group_member_id) ON DELETE SET NULL,
|
||||
contact_grp_inv_sent INTEGER NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY(user_id, local_display_name)
|
||||
REFERENCES display_names(user_id, local_display_name)
|
||||
ON DELETE CASCADE
|
||||
@ -713,3 +716,6 @@ CREATE INDEX idx_chat_items_user_id_item_status ON chat_items(
|
||||
item_status
|
||||
);
|
||||
CREATE INDEX idx_connections_to_subscribe ON connections(to_subscribe);
|
||||
CREATE INDEX idx_contacts_contact_group_member_id ON contacts(
|
||||
contact_group_member_id
|
||||
);
|
||||
|
@ -60,6 +60,10 @@ supportedChatVRange = mkVersionRange 1 currentChatVersion
|
||||
groupNoDirectVRange :: VersionRange
|
||||
groupNoDirectVRange = mkVersionRange 2 currentChatVersion
|
||||
|
||||
-- version range that supports establishing direct connection via x.grp.direct.inv with a group member
|
||||
xGrpDirectInvVRange :: VersionRange
|
||||
xGrpDirectInvVRange = mkVersionRange 2 currentChatVersion
|
||||
|
||||
data ConnectionEntity
|
||||
= RcvDirectMsgConnection {entityConnection :: Connection, contact :: Maybe Contact}
|
||||
| RcvGroupMsgConnection {entityConnection :: Connection, groupInfo :: GroupInfo, groupMember :: GroupMember}
|
||||
@ -225,6 +229,7 @@ data ChatMsgEvent (e :: MsgEncoding) where
|
||||
XGrpLeave :: ChatMsgEvent 'Json
|
||||
XGrpDel :: ChatMsgEvent 'Json
|
||||
XGrpInfo :: GroupProfile -> ChatMsgEvent 'Json
|
||||
XGrpDirectInv :: ConnReqInvitation -> Maybe MsgContent -> ChatMsgEvent 'Json
|
||||
XInfoProbe :: Probe -> ChatMsgEvent 'Json
|
||||
XInfoProbeCheck :: ProbeHash -> ChatMsgEvent 'Json
|
||||
XInfoProbeOk :: Probe -> ChatMsgEvent 'Json
|
||||
@ -559,6 +564,7 @@ data CMEventTag (e :: MsgEncoding) where
|
||||
XGrpLeave_ :: CMEventTag 'Json
|
||||
XGrpDel_ :: CMEventTag 'Json
|
||||
XGrpInfo_ :: CMEventTag 'Json
|
||||
XGrpDirectInv_ :: CMEventTag 'Json
|
||||
XInfoProbe_ :: CMEventTag 'Json
|
||||
XInfoProbeCheck_ :: CMEventTag 'Json
|
||||
XInfoProbeOk_ :: CMEventTag 'Json
|
||||
@ -604,6 +610,7 @@ instance MsgEncodingI e => StrEncoding (CMEventTag e) where
|
||||
XGrpLeave_ -> "x.grp.leave"
|
||||
XGrpDel_ -> "x.grp.del"
|
||||
XGrpInfo_ -> "x.grp.info"
|
||||
XGrpDirectInv_ -> "x.grp.direct.inv"
|
||||
XInfoProbe_ -> "x.info.probe"
|
||||
XInfoProbeCheck_ -> "x.info.probe.check"
|
||||
XInfoProbeOk_ -> "x.info.probe.ok"
|
||||
@ -650,6 +657,7 @@ instance StrEncoding ACMEventTag where
|
||||
"x.grp.leave" -> XGrpLeave_
|
||||
"x.grp.del" -> XGrpDel_
|
||||
"x.grp.info" -> XGrpInfo_
|
||||
"x.grp.direct.inv" -> XGrpDirectInv_
|
||||
"x.info.probe" -> XInfoProbe_
|
||||
"x.info.probe.check" -> XInfoProbeCheck_
|
||||
"x.info.probe.ok" -> XInfoProbeOk_
|
||||
@ -692,6 +700,7 @@ toCMEventTag msg = case msg of
|
||||
XGrpLeave -> XGrpLeave_
|
||||
XGrpDel -> XGrpDel_
|
||||
XGrpInfo _ -> XGrpInfo_
|
||||
XGrpDirectInv _ _ -> XGrpDirectInv_
|
||||
XInfoProbe _ -> XInfoProbe_
|
||||
XInfoProbeCheck _ -> XInfoProbeCheck_
|
||||
XInfoProbeOk _ -> XInfoProbeOk_
|
||||
@ -787,6 +796,7 @@ appJsonToCM AppMessageJson {v, msgId, event, params} = do
|
||||
XGrpLeave_ -> pure XGrpLeave
|
||||
XGrpDel_ -> pure XGrpDel
|
||||
XGrpInfo_ -> XGrpInfo <$> p "groupProfile"
|
||||
XGrpDirectInv_ -> XGrpDirectInv <$> p "connReq" <*> opt "content"
|
||||
XInfoProbe_ -> XInfoProbe <$> p "probe"
|
||||
XInfoProbeCheck_ -> XInfoProbeCheck <$> p "probeHash"
|
||||
XInfoProbeOk_ -> XInfoProbeOk <$> p "probe"
|
||||
@ -843,6 +853,7 @@ chatToAppMessage ChatMessage {chatVRange, msgId, chatMsgEvent} = case encoding @
|
||||
XGrpLeave -> JM.empty
|
||||
XGrpDel -> JM.empty
|
||||
XGrpInfo p -> o ["groupProfile" .= p]
|
||||
XGrpDirectInv connReq content -> o $ ("content" .=? content) ["connReq" .= connReq]
|
||||
XInfoProbe probe -> o ["probe" .= probe]
|
||||
XInfoProbeCheck probeHash -> o ["probeHash" .= probeHash]
|
||||
XInfoProbeOk probe -> o ["probe" .= probe]
|
||||
|
@ -72,18 +72,18 @@ getConnectionEntity db user@User {userId, userContactId} agentConnId = do
|
||||
[sql|
|
||||
SELECT
|
||||
c.contact_profile_id, c.local_display_name, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, c.via_group, c.contact_used, c.enable_ntfs, c.send_rcpts, c.favorite,
|
||||
p.preferences, c.user_preferences, c.created_at, c.updated_at, c.chat_ts
|
||||
p.preferences, c.user_preferences, c.created_at, c.updated_at, c.chat_ts, c.contact_group_member_id, c.contact_grp_inv_sent
|
||||
FROM contacts c
|
||||
JOIN contact_profiles p ON c.contact_profile_id = p.contact_profile_id
|
||||
WHERE c.user_id = ? AND c.contact_id = ? AND c.deleted = 0
|
||||
|]
|
||||
(userId, contactId)
|
||||
toContact' :: Int64 -> Connection -> [(ProfileId, ContactName, Text, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Int64, Bool) :. (Maybe Bool, Maybe Bool, Bool, Maybe Preferences, Preferences, UTCTime, UTCTime, Maybe UTCTime)] -> Either StoreError Contact
|
||||
toContact' contactId activeConn [(profileId, localDisplayName, displayName, fullName, image, contactLink, localAlias, viaGroup, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs)] =
|
||||
toContact' :: Int64 -> Connection -> [(ProfileId, ContactName, Text, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Int64, Bool) :. (Maybe Bool, Maybe Bool, Bool, Maybe Preferences, Preferences, UTCTime, UTCTime, Maybe UTCTime, Maybe GroupMemberId, Bool)] -> Either StoreError Contact
|
||||
toContact' contactId activeConn [(profileId, localDisplayName, displayName, fullName, image, contactLink, localAlias, viaGroup, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent)] =
|
||||
let profile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias}
|
||||
chatSettings = ChatSettings {enableNtfs = fromMaybe True enableNtfs_, sendRcpts, favorite}
|
||||
mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito activeConn
|
||||
in Right Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs}
|
||||
in Right Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent}
|
||||
toContact' _ _ _ = Left $ SEInternalError "referenced contact not found"
|
||||
getGroupAndMember_ :: Int64 -> Connection -> ExceptT StoreError IO (GroupInfo, GroupMember)
|
||||
getGroupAndMember_ groupMemberId c = ExceptT $ do
|
||||
|
@ -147,7 +147,7 @@ getConnReqContactXContactId db user@User {userId} cReqHash = do
|
||||
SELECT
|
||||
-- Contact
|
||||
ct.contact_id, ct.contact_profile_id, ct.local_display_name, ct.via_group, cp.display_name, cp.full_name, cp.image, cp.contact_link, cp.local_alias, ct.contact_used, ct.enable_ntfs, ct.send_rcpts, ct.favorite,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts, ct.contact_group_member_id, ct.contact_grp_inv_sent,
|
||||
-- Connection
|
||||
c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.local_alias,
|
||||
c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter,
|
||||
@ -205,7 +205,7 @@ createDirectContact db user@User {userId} activeConn@Connection {connId, localAl
|
||||
let profile = toLocalProfile profileId p localAlias
|
||||
userPreferences = emptyChatPrefs
|
||||
mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito activeConn
|
||||
pure $ Contact {contactId, localDisplayName, profile, activeConn, viaGroup = Nothing, contactUsed = False, chatSettings = defaultChatSettings, userPreferences, mergedPreferences, createdAt, updatedAt = createdAt, chatTs = Just createdAt}
|
||||
pure $ Contact {contactId, localDisplayName, profile, activeConn, viaGroup = Nothing, contactUsed = False, chatSettings = defaultChatSettings, userPreferences, mergedPreferences, createdAt, updatedAt = createdAt, chatTs = Just createdAt, contactGroupMemberId = Nothing, contactGrpInvSent = False}
|
||||
|
||||
deleteContactConnectionsAndFiles :: DB.Connection -> UserId -> Contact -> IO ()
|
||||
deleteContactConnectionsAndFiles db userId Contact {contactId} = do
|
||||
@ -463,7 +463,7 @@ createOrUpdateContactRequest db user@User {userId} userContactLinkId invId (Vers
|
||||
SELECT
|
||||
-- Contact
|
||||
ct.contact_id, ct.contact_profile_id, ct.local_display_name, ct.via_group, cp.display_name, cp.full_name, cp.image, cp.contact_link, cp.local_alias, ct.contact_used, ct.enable_ntfs, ct.send_rcpts, ct.favorite,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts, ct.contact_group_member_id, ct.contact_grp_inv_sent,
|
||||
-- Connection
|
||||
c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.local_alias,
|
||||
c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter,
|
||||
@ -608,7 +608,7 @@ createAcceptedContact db user@User {userId, profile = LocalProfile {preferences}
|
||||
contactId <- insertedRowId db
|
||||
activeConn <- createConnection_ db userId ConnContact (Just contactId) agentConnId cReqChatVRange Nothing (Just userContactLinkId) customUserProfileId 0 createdAt subMode
|
||||
let mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito activeConn
|
||||
pure $ Contact {contactId, localDisplayName, profile = toLocalProfile profileId profile "", activeConn, viaGroup = Nothing, contactUsed = False, chatSettings = defaultChatSettings, userPreferences, mergedPreferences, createdAt = createdAt, updatedAt = createdAt, chatTs = Just createdAt}
|
||||
pure $ Contact {contactId, localDisplayName, profile = toLocalProfile profileId profile "", activeConn, viaGroup = Nothing, contactUsed = False, chatSettings = defaultChatSettings, userPreferences, mergedPreferences, createdAt = createdAt, updatedAt = createdAt, chatTs = Just createdAt, contactGroupMemberId = Nothing, contactGrpInvSent = False}
|
||||
|
||||
getContactIdByName :: DB.Connection -> User -> ContactName -> ExceptT StoreError IO Int64
|
||||
getContactIdByName db User {userId} cName =
|
||||
@ -627,7 +627,7 @@ getContact_ db user@User {userId} contactId deleted =
|
||||
SELECT
|
||||
-- Contact
|
||||
ct.contact_id, ct.contact_profile_id, ct.local_display_name, ct.via_group, cp.display_name, cp.full_name, cp.image, cp.contact_link, cp.local_alias, ct.contact_used, ct.enable_ntfs, ct.send_rcpts, ct.favorite,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts, ct.contact_group_member_id, ct.contact_grp_inv_sent,
|
||||
-- Connection
|
||||
c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.local_alias,
|
||||
c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter,
|
||||
|
@ -37,6 +37,7 @@ module Simplex.Chat.Store.Groups
|
||||
updateGroupProfile,
|
||||
getGroupIdByName,
|
||||
getGroupMemberIdByName,
|
||||
getActiveMembersByName,
|
||||
getGroupInfoByName,
|
||||
getGroupMember,
|
||||
getGroupMemberById,
|
||||
@ -87,6 +88,12 @@ module Simplex.Chat.Store.Groups
|
||||
getXGrpMemIntroContDirect,
|
||||
getXGrpMemIntroContGroup,
|
||||
getHostConnId,
|
||||
createMemberContact,
|
||||
getMemberContact,
|
||||
setContactGrpInvSent,
|
||||
createMemberContactInvited,
|
||||
updateMemberContactInvited,
|
||||
resetMemberContactFields,
|
||||
)
|
||||
where
|
||||
|
||||
@ -96,7 +103,9 @@ import Control.Monad.IO.Class
|
||||
import Crypto.Random (ChaChaDRG)
|
||||
import Data.Either (rights)
|
||||
import Data.Int (Int64)
|
||||
import Data.List (sortOn)
|
||||
import Data.Maybe (fromMaybe, isNothing)
|
||||
import Data.Ord (Down (..))
|
||||
import Data.Text (Text)
|
||||
import Data.Time.Clock (UTCTime (..), getCurrentTime)
|
||||
import Database.SQLite.Simple (NamedParam (..), Only (..), Query (..), (:.) (..))
|
||||
@ -110,7 +119,7 @@ import Simplex.Messaging.Agent.Protocol (ConnId, UserId)
|
||||
import Simplex.Messaging.Agent.Store.SQLite (firstRow, maybeFirstRow)
|
||||
import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB
|
||||
import qualified Simplex.Messaging.Crypto as C
|
||||
import Simplex.Messaging.Protocol (SubscriptionMode)
|
||||
import Simplex.Messaging.Protocol (SubscriptionMode (..))
|
||||
import Simplex.Messaging.Util (eitherToMaybe)
|
||||
import Simplex.Messaging.Version
|
||||
import UnliftIO.STM
|
||||
@ -625,7 +634,7 @@ createNewContactMember db gVar User {userId, userContactId} groupId Contact {con
|
||||
createWithRandomId gVar $ \memId -> do
|
||||
createdAt <- liftIO getCurrentTime
|
||||
member@GroupMember {groupMemberId} <- createMember_ (MemberId memId) createdAt
|
||||
void $ createMemberConnection_ db userId groupMemberId agentConnId peerChatVRange Nothing 0 createdAt subMode
|
||||
void $ createMemberConnection_ db userId groupMemberId agentConnId (fromJVersionRange peerChatVRange) Nothing 0 createdAt subMode
|
||||
pure member
|
||||
where
|
||||
createMember_ memberId createdAt = do
|
||||
@ -692,7 +701,7 @@ getContactViaMember db user@User {userId} GroupMember {groupMemberId} =
|
||||
SELECT
|
||||
-- Contact
|
||||
ct.contact_id, ct.contact_profile_id, ct.local_display_name, ct.via_group, cp.display_name, cp.full_name, cp.image, cp.contact_link, cp.local_alias, ct.contact_used, ct.enable_ntfs, ct.send_rcpts, ct.favorite,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts, ct.contact_group_member_id, ct.contact_grp_inv_sent,
|
||||
-- Connection
|
||||
c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.local_alias,
|
||||
c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter,
|
||||
@ -1036,7 +1045,7 @@ getViaGroupContact db user@User {userId} GroupMember {groupMemberId} =
|
||||
[sql|
|
||||
SELECT
|
||||
ct.contact_id, ct.contact_profile_id, ct.local_display_name, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, ct.via_group, ct.contact_used, ct.enable_ntfs, ct.send_rcpts, ct.favorite,
|
||||
p.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts,
|
||||
p.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts, ct.contact_group_member_id, ct.contact_grp_inv_sent,
|
||||
c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id,
|
||||
c.conn_status, c.conn_type, c.local_alias, c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter,
|
||||
c.peer_chat_min_version, c.peer_chat_max_version
|
||||
@ -1053,13 +1062,13 @@ getViaGroupContact db user@User {userId} GroupMember {groupMemberId} =
|
||||
|]
|
||||
(userId, groupMemberId)
|
||||
where
|
||||
toContact' :: ((ContactId, ProfileId, ContactName, Text, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Int64, Bool) :. (Maybe Bool, Maybe Bool, Bool, Maybe Preferences, Preferences, UTCTime, UTCTime, Maybe UTCTime)) :. ConnectionRow -> Contact
|
||||
toContact' (((contactId, profileId, localDisplayName, displayName, fullName, image, contactLink, localAlias, viaGroup, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs)) :. connRow) =
|
||||
toContact' :: ((ContactId, ProfileId, ContactName, Text, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Int64, Bool) :. (Maybe Bool, Maybe Bool, Bool, Maybe Preferences, Preferences, UTCTime, UTCTime, Maybe UTCTime, Maybe GroupMemberId, Bool)) :. ConnectionRow -> Contact
|
||||
toContact' (((contactId, profileId, localDisplayName, displayName, fullName, image, contactLink, localAlias, viaGroup, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent)) :. connRow) =
|
||||
let profile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias}
|
||||
chatSettings = ChatSettings {enableNtfs = fromMaybe True enableNtfs_, sendRcpts, favorite}
|
||||
activeConn = toConnection connRow
|
||||
mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito activeConn
|
||||
in Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs}
|
||||
in Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent}
|
||||
|
||||
updateGroupProfile :: DB.Connection -> User -> GroupInfo -> GroupProfile -> ExceptT StoreError IO GroupInfo
|
||||
updateGroupProfile db User {userId} g@GroupInfo {groupId, localDisplayName, groupProfile = GroupProfile {displayName}} p'@GroupProfile {displayName = newName, fullName, description, image, groupPreferences}
|
||||
@ -1126,6 +1135,27 @@ getGroupMemberIdByName db User {userId} groupId groupMemberName =
|
||||
ExceptT . firstRow fromOnly (SEGroupMemberNameNotFound groupId groupMemberName) $
|
||||
DB.query db "SELECT group_member_id FROM group_members WHERE user_id = ? AND group_id = ? AND local_display_name = ?" (userId, groupId, groupMemberName)
|
||||
|
||||
getActiveMembersByName :: DB.Connection -> User -> ContactName -> ExceptT StoreError IO [(GroupInfo, GroupMember)]
|
||||
getActiveMembersByName db user@User {userId} groupMemberName = do
|
||||
groupMemberIds :: [(GroupId, GroupMemberId)] <-
|
||||
liftIO $
|
||||
DB.query
|
||||
db
|
||||
[sql|
|
||||
SELECT group_id, group_member_id
|
||||
FROM group_members
|
||||
WHERE user_id = ? AND local_display_name = ?
|
||||
AND member_status IN (?,?) AND member_category != ?
|
||||
|]
|
||||
(userId, groupMemberName, GSMemConnected, GSMemComplete, GCUserMember)
|
||||
possibleMembers <- forM groupMemberIds $ \(groupId, groupMemberId) -> do
|
||||
groupInfo <- getGroupInfo db user groupId
|
||||
groupMember <- getGroupMember db user groupId groupMemberId
|
||||
pure (groupInfo, groupMember)
|
||||
pure $ sortOn (Down . ts . fst) possibleMembers
|
||||
where
|
||||
ts GroupInfo {chatTs, updatedAt} = fromMaybe updatedAt chatTs
|
||||
|
||||
getMatchingContacts :: DB.Connection -> User -> Contact -> IO [Contact]
|
||||
getMatchingContacts db user@User {userId} Contact {contactId, profile = LocalProfile {displayName, fullName, image}} = do
|
||||
contactIds <-
|
||||
@ -1361,3 +1391,156 @@ getHostConnId db user@User {userId} groupId = do
|
||||
hostMemberId <- getHostMemberId_ db user groupId
|
||||
ExceptT . firstRow fromOnly (SEConnectionNotFoundByMemberId hostMemberId) $
|
||||
DB.query db "SELECT connection_id FROM connections WHERE user_id = ? AND group_member_id = ?" (userId, hostMemberId)
|
||||
|
||||
createMemberContact :: DB.Connection -> User -> ConnId -> ConnReqInvitation -> GroupInfo -> GroupMember -> Connection -> SubscriptionMode -> IO Contact
|
||||
createMemberContact
|
||||
db
|
||||
user@User {userId, profile = LocalProfile {preferences}}
|
||||
acId
|
||||
cReq
|
||||
GroupInfo {membership = membership@GroupMember {memberProfile = membershipProfile}}
|
||||
GroupMember {groupMemberId, localDisplayName, memberProfile, memberContactProfileId}
|
||||
Connection {connLevel, peerChatVRange = peerChatVRange@(JVersionRange (VersionRange minV maxV))}
|
||||
subMode = do
|
||||
currentTs <- getCurrentTime
|
||||
let incognitoProfile = if memberIncognito membership then Just membershipProfile else Nothing
|
||||
customUserProfileId = localProfileId <$> incognitoProfile
|
||||
userPreferences = fromMaybe emptyChatPrefs $ incognitoProfile >> preferences
|
||||
DB.execute
|
||||
db
|
||||
[sql|
|
||||
INSERT INTO contacts (
|
||||
user_id, local_display_name, contact_profile_id, enable_ntfs, user_preferences, contact_used,
|
||||
contact_group_member_id, contact_grp_inv_sent, created_at, updated_at, chat_ts
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?)
|
||||
|]
|
||||
( (userId, localDisplayName, memberContactProfileId, True, userPreferences, True)
|
||||
:. (groupMemberId, False, currentTs, currentTs, currentTs)
|
||||
)
|
||||
contactId <- insertedRowId db
|
||||
DB.execute
|
||||
db
|
||||
"UPDATE group_members SET contact_id = ?, updated_at = ? WHERE group_member_id = ?"
|
||||
(contactId, currentTs, groupMemberId)
|
||||
DB.execute
|
||||
db
|
||||
[sql|
|
||||
INSERT INTO connections (
|
||||
user_id, agent_conn_id, conn_req_inv, conn_level, conn_status, conn_type, contact_id, custom_user_profile_id,
|
||||
peer_chat_min_version, peer_chat_max_version, created_at, updated_at, to_subscribe
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
|
||||
|]
|
||||
( (userId, acId, cReq, connLevel, ConnNew, ConnContact, contactId, customUserProfileId)
|
||||
:. (minV, maxV, currentTs, currentTs, subMode == SMOnlyCreate)
|
||||
)
|
||||
connId <- insertedRowId db
|
||||
let ctConn = Connection {connId, agentConnId = AgentConnId acId, peerChatVRange, connType = ConnContact, entityId = Just contactId, viaContact = Nothing, viaUserContactLink = Nothing, viaGroupLink = False, groupLinkId = Nothing, customUserProfileId, connLevel, connStatus = ConnNew, localAlias = "", createdAt = currentTs, connectionCode = Nothing, authErrCounter = 0}
|
||||
mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito ctConn
|
||||
pure Contact {contactId, localDisplayName, profile = memberProfile, activeConn = ctConn, viaGroup = Nothing, contactUsed = True, chatSettings = defaultChatSettings, userPreferences, mergedPreferences, createdAt = currentTs, updatedAt = currentTs, chatTs = Just currentTs, contactGroupMemberId = Just groupMemberId, contactGrpInvSent = False}
|
||||
|
||||
getMemberContact :: DB.Connection -> User -> ContactId -> ExceptT StoreError IO (GroupInfo, GroupMember, Contact, ConnReqInvitation)
|
||||
getMemberContact db user contactId = do
|
||||
ct <- getContact db user contactId
|
||||
let Contact {contactGroupMemberId, activeConn = Connection {connId}} = ct
|
||||
cReq <- getConnReqInv db connId
|
||||
case contactGroupMemberId of
|
||||
Just groupMemberId -> do
|
||||
m@GroupMember {groupId} <- getGroupMemberById db user groupMemberId
|
||||
g <- getGroupInfo db user groupId
|
||||
pure (g, m, ct, cReq)
|
||||
_ ->
|
||||
throwError $ SEMemberContactGroupMemberNotFound contactId
|
||||
|
||||
setContactGrpInvSent :: DB.Connection -> Contact -> Bool -> IO ()
|
||||
setContactGrpInvSent db Contact {contactId} xGrpDirectInvSent = do
|
||||
currentTs <- getCurrentTime
|
||||
DB.execute
|
||||
db
|
||||
"UPDATE contacts SET contact_grp_inv_sent = ?, updated_at = ? WHERE contact_id = ?"
|
||||
(xGrpDirectInvSent, currentTs, contactId)
|
||||
|
||||
createMemberContactInvited :: DB.Connection -> User -> (CommandId, ConnId) -> GroupInfo -> GroupMember -> Connection -> SubscriptionMode -> IO (Contact, GroupMember)
|
||||
createMemberContactInvited
|
||||
db
|
||||
user@User {userId, profile = LocalProfile {preferences}}
|
||||
connIds
|
||||
gInfo@GroupInfo {membership = membership@GroupMember {memberProfile = membershipProfile}}
|
||||
m@GroupMember {groupMemberId, localDisplayName = memberLDN, memberProfile, memberContactProfileId}
|
||||
mConn
|
||||
subMode = do
|
||||
currentTs <- liftIO getCurrentTime
|
||||
let incognitoProfile = if memberIncognito membership then Just membershipProfile else Nothing
|
||||
userPreferences = fromMaybe emptyChatPrefs $ incognitoProfile >> preferences
|
||||
contactId <- createContactUpdateMember currentTs userPreferences
|
||||
ctConn <- createMemberContactConn_ db user connIds gInfo mConn contactId subMode
|
||||
let mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito ctConn
|
||||
mCt' = Contact {contactId, localDisplayName = memberLDN, profile = memberProfile, activeConn = ctConn, viaGroup = Nothing, contactUsed = True, chatSettings = defaultChatSettings, userPreferences, mergedPreferences, createdAt = currentTs, updatedAt = currentTs, chatTs = Just currentTs, contactGroupMemberId = Just groupMemberId, contactGrpInvSent = False}
|
||||
m' = m {memberContactId = Just contactId}
|
||||
pure (mCt', m')
|
||||
where
|
||||
createContactUpdateMember :: UTCTime -> Preferences -> IO ContactId
|
||||
createContactUpdateMember currentTs userPreferences = do
|
||||
DB.execute
|
||||
db
|
||||
[sql|
|
||||
INSERT INTO contacts (
|
||||
user_id, local_display_name, contact_profile_id, enable_ntfs, user_preferences, contact_used,
|
||||
created_at, updated_at, chat_ts
|
||||
) VALUES (?,?,?,?,?,?,?,?,?)
|
||||
|]
|
||||
( (userId, memberLDN, memberContactProfileId, True, userPreferences, True)
|
||||
:. (currentTs, currentTs, currentTs)
|
||||
)
|
||||
contactId <- insertedRowId db
|
||||
DB.execute
|
||||
db
|
||||
"UPDATE group_members SET contact_id = ?, updated_at = ? WHERE group_member_id = ?"
|
||||
(contactId, currentTs, groupMemberId)
|
||||
pure contactId
|
||||
|
||||
updateMemberContactInvited :: DB.Connection -> User -> (CommandId, ConnId) -> GroupInfo -> Connection -> Contact -> SubscriptionMode -> IO Contact
|
||||
updateMemberContactInvited db user connIds gInfo mConn ct@Contact {contactId, activeConn = oldContactConn} subMode = do
|
||||
updateConnectionStatus db oldContactConn ConnDeleted
|
||||
activeConn <- createMemberContactConn_ db user connIds gInfo mConn contactId subMode
|
||||
ct' <- resetMemberContactFields db ct
|
||||
pure (ct' :: Contact) {activeConn}
|
||||
|
||||
resetMemberContactFields :: DB.Connection -> Contact -> IO Contact
|
||||
resetMemberContactFields db ct@Contact {contactId} = do
|
||||
currentTs <- liftIO getCurrentTime
|
||||
DB.execute
|
||||
db
|
||||
[sql|
|
||||
UPDATE contacts
|
||||
SET contact_group_member_id = NULL, contact_grp_inv_sent = 0, updated_at = ?
|
||||
WHERE contact_id = ?
|
||||
|]
|
||||
(currentTs, contactId)
|
||||
pure ct {contactGroupMemberId = Nothing, contactGrpInvSent = False, updatedAt = currentTs}
|
||||
|
||||
createMemberContactConn_ :: DB.Connection -> User -> (CommandId, ConnId) -> GroupInfo -> Connection -> ContactId -> SubscriptionMode -> IO Connection
|
||||
createMemberContactConn_
|
||||
db
|
||||
user@User {userId}
|
||||
(cmdId, acId)
|
||||
GroupInfo {membership = membership@GroupMember {memberProfile = membershipProfile}}
|
||||
_memberConn@Connection {connLevel, peerChatVRange = peerChatVRange@(JVersionRange (VersionRange minV maxV))}
|
||||
contactId
|
||||
subMode = do
|
||||
currentTs <- liftIO getCurrentTime
|
||||
let incognitoProfile = if memberIncognito membership then Just membershipProfile else Nothing
|
||||
customUserProfileId = localProfileId <$> incognitoProfile
|
||||
DB.execute
|
||||
db
|
||||
[sql|
|
||||
INSERT INTO connections (
|
||||
user_id, agent_conn_id, conn_level, conn_status, conn_type, contact_id, custom_user_profile_id,
|
||||
peer_chat_min_version, peer_chat_max_version, created_at, updated_at, to_subscribe
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
|
||||
|]
|
||||
( (userId, acId, connLevel, ConnNew, ConnContact, contactId, customUserProfileId)
|
||||
:. (minV, maxV, currentTs, currentTs, subMode == SMOnlyCreate)
|
||||
)
|
||||
connId <- insertedRowId db
|
||||
setCommandConnId db user cmdId connId
|
||||
pure Connection {connId, agentConnId = AgentConnId acId, peerChatVRange, connType = ConnContact, entityId = Just contactId, viaContact = Nothing, viaUserContactLink = Nothing, viaGroupLink = False, groupLinkId = Nothing, customUserProfileId, connLevel, connStatus = ConnNew, localAlias = "", createdAt = currentTs, connectionCode = Nothing, authErrCounter = 0}
|
||||
|
@ -479,7 +479,7 @@ getDirectChatPreviews_ db user@User {userId} = do
|
||||
SELECT
|
||||
-- Contact
|
||||
ct.contact_id, ct.contact_profile_id, ct.local_display_name, ct.via_group, cp.display_name, cp.full_name, cp.image, cp.contact_link, cp.local_alias, ct.contact_used, ct.enable_ntfs, ct.send_rcpts, ct.favorite,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts,
|
||||
cp.preferences, ct.user_preferences, ct.created_at, ct.updated_at, ct.chat_ts, ct.contact_group_member_id, ct.contact_grp_inv_sent,
|
||||
-- Connection
|
||||
c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.local_alias,
|
||||
c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter,
|
||||
|
@ -79,6 +79,7 @@ import Simplex.Chat.Migrations.M20230814_indexes
|
||||
import Simplex.Chat.Migrations.M20230827_file_encryption
|
||||
import Simplex.Chat.Migrations.M20230829_connections_chat_vrange
|
||||
import Simplex.Chat.Migrations.M20230903_connections_to_subscribe
|
||||
import Simplex.Chat.Migrations.M20230913_member_contacts
|
||||
import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..))
|
||||
|
||||
schemaMigrations :: [(String, Query, Maybe Query)]
|
||||
@ -157,7 +158,8 @@ schemaMigrations =
|
||||
("20230814_indexes", m20230814_indexes, Just down_m20230814_indexes),
|
||||
("20230827_file_encryption", m20230827_file_encryption, Just down_m20230827_file_encryption),
|
||||
("20230829_connections_chat_vrange", m20230829_connections_chat_vrange, Just down_m20230829_connections_chat_vrange),
|
||||
("20230903_connections_to_subscribe", m20230903_connections_to_subscribe, Just down_m20230903_connections_to_subscribe)
|
||||
("20230903_connections_to_subscribe", m20230903_connections_to_subscribe, Just down_m20230903_connections_to_subscribe),
|
||||
("20230913_member_contacts", m20230913_member_contacts, Just down_m20230913_member_contacts)
|
||||
]
|
||||
|
||||
-- | The list of migrations in ascending order by date
|
||||
|
@ -64,6 +64,7 @@ data StoreError
|
||||
| SEGroupMemberNameNotFound {groupId :: GroupId, groupMemberName :: ContactName}
|
||||
| SEGroupMemberNotFound {groupMemberId :: GroupMemberId}
|
||||
| SEGroupMemberNotFoundByMemberId {memberId :: MemberId}
|
||||
| SEMemberContactGroupMemberNotFound {contactId :: ContactId}
|
||||
| SEGroupWithoutUser
|
||||
| SEDuplicateGroupMember
|
||||
| SEGroupAlreadyJoined
|
||||
@ -145,7 +146,7 @@ toConnection :: ConnectionRow -> Connection
|
||||
toConnection ((connId, acId, connLevel, viaContact, viaUserContactLink, viaGroupLink, groupLinkId, customUserProfileId, connStatus, connType, localAlias) :. (contactId, groupMemberId, sndFileId, rcvFileId, userContactLinkId) :. (createdAt, code_, verifiedAt_, authErrCounter, minVer, maxVer)) =
|
||||
let entityId = entityId_ connType
|
||||
connectionCode = SecurityCode <$> code_ <*> verifiedAt_
|
||||
peerChatVRange = fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer
|
||||
peerChatVRange = JVersionRange $ fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer
|
||||
in Connection {connId, agentConnId = AgentConnId acId, peerChatVRange, connLevel, viaContact, viaUserContactLink, viaGroupLink, groupLinkId, customUserProfileId, connStatus, connType, localAlias, entityId, connectionCode, authErrCounter, createdAt}
|
||||
where
|
||||
entityId_ :: ConnType -> Maybe Int64
|
||||
@ -179,7 +180,7 @@ createConnection_ db userId connType entityId acId peerChatVRange@(VersionRange
|
||||
:. (minV, maxV, subMode == SMOnlyCreate)
|
||||
)
|
||||
connId <- insertedRowId db
|
||||
pure Connection {connId, agentConnId = AgentConnId acId, peerChatVRange, connType, entityId, viaContact, viaUserContactLink, viaGroupLink, groupLinkId = Nothing, customUserProfileId, connLevel, connStatus = ConnNew, localAlias = "", createdAt = currentTs, connectionCode = Nothing, authErrCounter = 0}
|
||||
pure Connection {connId, agentConnId = AgentConnId acId, peerChatVRange = JVersionRange peerChatVRange, connType, entityId, viaContact, viaUserContactLink, viaGroupLink, groupLinkId = Nothing, customUserProfileId, connLevel, connStatus = ConnNew, localAlias = "", createdAt = currentTs, connectionCode = Nothing, authErrCounter = 0}
|
||||
where
|
||||
ent ct = if connType == ct then entityId else Nothing
|
||||
|
||||
@ -240,24 +241,24 @@ deleteUnusedIncognitoProfileById_ db User {userId} profileId =
|
||||
|]
|
||||
[":user_id" := userId, ":profile_id" := profileId]
|
||||
|
||||
type ContactRow = (ContactId, ProfileId, ContactName, Maybe Int64, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Bool) :. (Maybe Bool, Maybe Bool, Bool, Maybe Preferences, Preferences, UTCTime, UTCTime, Maybe UTCTime)
|
||||
type ContactRow = (ContactId, ProfileId, ContactName, Maybe Int64, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Bool) :. (Maybe Bool, Maybe Bool, Bool, Maybe Preferences, Preferences, UTCTime, UTCTime, Maybe UTCTime, Maybe GroupMemberId, Bool)
|
||||
|
||||
toContact :: User -> ContactRow :. ConnectionRow -> Contact
|
||||
toContact user (((contactId, profileId, localDisplayName, viaGroup, displayName, fullName, image, contactLink, localAlias, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs)) :. connRow) =
|
||||
toContact user (((contactId, profileId, localDisplayName, viaGroup, displayName, fullName, image, contactLink, localAlias, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent)) :. connRow) =
|
||||
let profile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias}
|
||||
activeConn = toConnection connRow
|
||||
chatSettings = ChatSettings {enableNtfs = fromMaybe True enableNtfs_, sendRcpts, favorite}
|
||||
mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito activeConn
|
||||
in Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs}
|
||||
in Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent}
|
||||
|
||||
toContactOrError :: User -> ContactRow :. MaybeConnectionRow -> Either StoreError Contact
|
||||
toContactOrError user (((contactId, profileId, localDisplayName, viaGroup, displayName, fullName, image, contactLink, localAlias, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs)) :. connRow) =
|
||||
toContactOrError user (((contactId, profileId, localDisplayName, viaGroup, displayName, fullName, image, contactLink, localAlias, contactUsed) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent)) :. connRow) =
|
||||
let profile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias}
|
||||
chatSettings = ChatSettings {enableNtfs = fromMaybe True enableNtfs_, sendRcpts, favorite}
|
||||
in case toMaybeConnection connRow of
|
||||
Just activeConn ->
|
||||
let mergedPreferences = contactUserPreferences user userPreferences preferences $ connIncognito activeConn
|
||||
in Right Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs}
|
||||
in Right Contact {contactId, localDisplayName, profile, activeConn, viaGroup, contactUsed, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs, contactGroupMemberId, contactGrpInvSent}
|
||||
_ -> Left $ SEContactNotReady localDisplayName
|
||||
|
||||
getProfileById :: DB.Connection -> UserId -> Int64 -> ExceptT StoreError IO LocalProfile
|
||||
@ -280,7 +281,7 @@ type ContactRequestRow = (Int64, ContactName, AgentInvId, Int64, AgentConnId, In
|
||||
toContactRequest :: ContactRequestRow -> UserContactRequest
|
||||
toContactRequest ((contactRequestId, localDisplayName, agentInvitationId, userContactLinkId, agentContactConnId, profileId, displayName, fullName, image, contactLink) :. (xContactId, preferences, createdAt, updatedAt, minVer, maxVer)) = do
|
||||
let profile = Profile {displayName, fullName, image, contactLink, preferences}
|
||||
cReqChatVRange = fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer
|
||||
cReqChatVRange = JVersionRange $ fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer
|
||||
in UserContactRequest {contactRequestId, agentInvitationId, userContactLinkId, agentContactConnId, cReqChatVRange, localDisplayName, profileId, profile, xContactId, createdAt, updatedAt}
|
||||
|
||||
userQuery :: Query
|
||||
@ -305,6 +306,14 @@ toPendingContactConnection :: (Int64, ConnId, ConnStatus, Maybe ByteString, Mayb
|
||||
toPendingContactConnection (pccConnId, acId, pccConnStatus, connReqHash, viaUserContactLink, groupLinkId, customUserProfileId, connReqInv, localAlias, createdAt, updatedAt) =
|
||||
PendingContactConnection {pccConnId, pccAgentConnId = AgentConnId acId, pccConnStatus, viaContactUri = isJust connReqHash, viaUserContactLink, groupLinkId, customUserProfileId, connReqInv, localAlias, createdAt, updatedAt}
|
||||
|
||||
getConnReqInv :: DB.Connection -> Int64 -> ExceptT StoreError IO ConnReqInvitation
|
||||
getConnReqInv db connId =
|
||||
ExceptT . firstRow fromOnly (SEConnectionNotFoundById connId) $
|
||||
DB.query
|
||||
db
|
||||
"SELECT conn_req_inv FROM connections WHERE connection_id = ?"
|
||||
(Only connId)
|
||||
|
||||
-- | Saves unique local display name based on passed displayName, suffixed with _N if required.
|
||||
-- This function should be called inside transaction.
|
||||
withLocalDisplayName :: forall a. DB.Connection -> UserId -> Text -> (Text -> IO (Either StoreError a)) -> IO (Either StoreError a)
|
||||
|
@ -25,7 +25,7 @@
|
||||
module Simplex.Chat.Types where
|
||||
|
||||
import Crypto.Number.Serialize (os2ip)
|
||||
import Data.Aeson (FromJSON (..), ToJSON (..))
|
||||
import Data.Aeson (FromJSON (..), ToJSON (..), (.=))
|
||||
import qualified Data.Aeson as J
|
||||
import qualified Data.Aeson.Encoding as JE
|
||||
import qualified Data.Aeson.Types as JT
|
||||
@ -174,7 +174,9 @@ data Contact = Contact
|
||||
mergedPreferences :: ContactUserPreferences,
|
||||
createdAt :: UTCTime,
|
||||
updatedAt :: UTCTime,
|
||||
chatTs :: Maybe UTCTime
|
||||
chatTs :: Maybe UTCTime,
|
||||
contactGroupMemberId :: Maybe GroupMemberId,
|
||||
contactGrpInvSent :: Bool
|
||||
}
|
||||
deriving (Eq, Show, Generic)
|
||||
|
||||
@ -235,7 +237,7 @@ data UserContactRequest = UserContactRequest
|
||||
agentInvitationId :: AgentInvId,
|
||||
userContactLinkId :: Int64,
|
||||
agentContactConnId :: AgentConnId, -- connection id of user contact
|
||||
cReqChatVRange :: VersionRange,
|
||||
cReqChatVRange :: JVersionRange,
|
||||
localDisplayName :: ContactName,
|
||||
profileId :: Int64,
|
||||
profile :: Profile,
|
||||
@ -566,7 +568,7 @@ memberInfo :: GroupMember -> MemberInfo
|
||||
memberInfo GroupMember {memberId, memberRole, memberProfile, activeConn} =
|
||||
MemberInfo memberId memberRole memberChatVRange (fromLocalProfile memberProfile)
|
||||
where
|
||||
memberChatVRange = ChatVersionRange . peerChatVRange <$> activeConn
|
||||
memberChatVRange = ChatVersionRange . fromJVersionRange . peerChatVRange <$> activeConn
|
||||
|
||||
data ReceivedGroupInvitation = ReceivedGroupInvitation
|
||||
{ fromMember :: GroupMember,
|
||||
@ -1169,7 +1171,7 @@ type ConnReqContact = ConnectionRequestUri 'CMContact
|
||||
data Connection = Connection
|
||||
{ connId :: Int64,
|
||||
agentConnId :: AgentConnId,
|
||||
peerChatVRange :: VersionRange,
|
||||
peerChatVRange :: JVersionRange,
|
||||
connLevel :: Int,
|
||||
viaContact :: Maybe Int64, -- group member contact ID, if not direct connection
|
||||
viaUserContactLink :: Maybe Int64, -- user contact link ID, if connected via "user address"
|
||||
@ -1492,3 +1494,9 @@ instance FromJSON ChatVersionRange where
|
||||
instance ToJSON ChatVersionRange where
|
||||
toJSON (ChatVersionRange vr) = strToJSON vr
|
||||
toEncoding (ChatVersionRange vr) = strToJEncoding vr
|
||||
|
||||
newtype JVersionRange = JVersionRange {fromJVersionRange :: VersionRange} deriving (Eq, Show)
|
||||
|
||||
instance ToJSON JVersionRange where
|
||||
toJSON (JVersionRange (VersionRange minV maxV)) = J.object ["minVersion" .= minV, "maxVersion" .= maxV]
|
||||
toEncoding (JVersionRange (VersionRange minV maxV)) = J.pairs $ "minVersion" .= minV <> "maxVersion" .= maxV
|
||||
|
@ -179,7 +179,7 @@ responseToView user_ ChatConfig {logLevel, showReactions, showReceipts, testView
|
||||
CRRcvFileStart u ci -> ttyUser u $ receivingFile_' "started" ci
|
||||
CRRcvFileComplete u ci -> ttyUser u $ receivingFile_' "completed" ci
|
||||
CRRcvFileSndCancelled u _ ft -> ttyUser u $ viewRcvFileSndCancelled ft
|
||||
CRRcvFileError u ci -> ttyUser u $ receivingFile_' "error" ci
|
||||
CRRcvFileError u ci e -> ttyUser u $ receivingFile_' "error" ci <> [sShow e]
|
||||
CRSndFileStart u _ ft -> ttyUser u $ sendingFile_ "started" ft
|
||||
CRSndFileComplete u _ ft -> ttyUser u $ sendingFile_ "completed" ft
|
||||
CRSndFileStartXFTP {} -> []
|
||||
@ -231,6 +231,10 @@ responseToView user_ ChatConfig {logLevel, showReactions, showReceipts, testView
|
||||
CRGroupLink u g cReq mRole -> ttyUser u $ groupLink_ "Group link:" g cReq mRole
|
||||
CRGroupLinkDeleted u g -> ttyUser u $ viewGroupLinkDeleted g
|
||||
CRAcceptingGroupJoinRequest _ g c -> [ttyFullContact c <> ": accepting request to join group " <> ttyGroup' g <> "..."]
|
||||
CRNoMemberContactCreating u g m -> ttyUser u ["member " <> ttyGroup' g <> " " <> ttyMember m <> " does not have associated contact, creating contact"]
|
||||
CRNewMemberContact u _ g m -> ttyUser u ["contact for member " <> ttyGroup' g <> " " <> ttyMember m <> " is created"]
|
||||
CRNewMemberContactSentInv u _ct g m -> ttyUser u ["sent invitation to connect directly to member " <> ttyGroup' g <> " " <> ttyMember m]
|
||||
CRNewMemberContactReceivedInv u ct g m -> ttyUser u [ttyGroup' g <> " " <> ttyMember m <> " is creating direct contact " <> ttyContact' ct <> " with you"]
|
||||
CRMemberSubError u g m e -> ttyUser u [ttyGroup' g <> " member " <> ttyMember m <> " error: " <> sShow e]
|
||||
CRMemberSubSummary u summary -> ttyUser u $ viewErrorsSummary (filter (isJust . memberError) summary) " group member errors"
|
||||
CRGroupSubscribed u g -> ttyUser u $ viewGroupSubscribed g
|
||||
@ -663,6 +667,17 @@ viewConnReqInvitation cReq =
|
||||
"and ask them to connect: " <> highlight' "/c <invitation_link_above>"
|
||||
]
|
||||
|
||||
viewContactNotFound :: ContactName -> Maybe (GroupInfo, GroupMember) -> [StyledString]
|
||||
viewContactNotFound cName suspectedMember =
|
||||
["no contact " <> ttyContact cName <> useMessageMember]
|
||||
where
|
||||
useMessageMember = case suspectedMember of
|
||||
Just (g, m) -> do
|
||||
let GroupInfo {localDisplayName = gName} = g
|
||||
GroupMember {localDisplayName = mName} = m
|
||||
", use " <> highlight' ("@#" <> T.unpack gName <> " " <> T.unpack mName <> " <your message>")
|
||||
_ -> ""
|
||||
|
||||
viewChatCleared :: AChatInfo -> [StyledString]
|
||||
viewChatCleared (AChatInfo _ chatInfo) = case chatInfo of
|
||||
DirectChat ct -> [ttyContact' ct <> ": all messages are removed locally ONLY"]
|
||||
@ -990,8 +1005,8 @@ viewConnectionVerified :: Maybe SecurityCode -> StyledString
|
||||
viewConnectionVerified (Just _) = "connection verified" -- TODO show verification time?
|
||||
viewConnectionVerified _ = "connection not verified, use " <> highlight' "/code" <> " command to see security code"
|
||||
|
||||
viewPeerChatVRange :: VersionRange -> StyledString
|
||||
viewPeerChatVRange (VersionRange minVer maxVer) = "peer chat protocol version range: (" <> sShow minVer <> ", " <> sShow maxVer <> ")"
|
||||
viewPeerChatVRange :: JVersionRange -> StyledString
|
||||
viewPeerChatVRange (JVersionRange (VersionRange minVer maxVer)) = "peer chat protocol version range: (" <> sShow minVer <> ", " <> sShow maxVer <> ")"
|
||||
|
||||
viewConnectionStats :: ConnectionStats -> [StyledString]
|
||||
viewConnectionStats ConnectionStats {rcvQueuesInfo, sndQueuesInfo} =
|
||||
@ -1550,6 +1565,7 @@ viewChatError logLevel = \case
|
||||
<> (", connection id: " <> show connId)
|
||||
<> maybe "" (\MsgMetaJSON {rcvId} -> ", agent msg rcv id: " <> show rcvId) msgMeta_
|
||||
]
|
||||
CEContactNotFound cName m_ -> viewContactNotFound cName m_
|
||||
CEContactNotReady c -> [ttyContact' c <> ": not ready"]
|
||||
CEContactDisabled Contact {localDisplayName = c} -> [ttyContact c <> ": disabled, to enable: " <> highlight ("/enable " <> c) <> ", to delete: " <> highlight ("/d " <> c)]
|
||||
CEConnectionDisabled Connection {connId, connType} -> [plain $ "connection " <> textEncode connType <> " (" <> tshow connId <> ") is disabled" | logLevel <= CLLWarning]
|
||||
@ -1603,6 +1619,7 @@ viewChatError logLevel = \case
|
||||
CEAgentCommandError e -> ["agent command error: " <> plain e]
|
||||
CEInvalidFileDescription e -> ["invalid file description: " <> plain e]
|
||||
CEConnectionIncognitoChangeProhibited -> ["incognito mode change prohibited"]
|
||||
CEPeerChatVRangeIncompatible -> ["peer chat protocol version range incompatible"]
|
||||
CEInternalError e -> ["internal chat error: " <> plain e]
|
||||
CEException e -> ["exception: " <> plain e]
|
||||
-- e -> ["chat error: " <> sShow e]
|
||||
|
@ -262,7 +262,7 @@ getTermLine cc =
|
||||
Just s -> do
|
||||
-- remove condition to always echo virtual terminal
|
||||
when (printOutput cc) $ do
|
||||
-- when True $ do
|
||||
-- when True $ do
|
||||
name <- userName cc
|
||||
putStrLn $ name <> ": " <> s
|
||||
pure s
|
||||
|
@ -1370,6 +1370,7 @@ testXFTPRcvError tmp = do
|
||||
"started receiving file 1 (test.pdf) from alice"
|
||||
]
|
||||
bob <## "error receiving file 1 (test.pdf) from alice"
|
||||
_ <- getTermLine bob
|
||||
|
||||
bob ##> "/fs 1"
|
||||
bob <## "receiving file 1 (test.pdf) error"
|
||||
|
@ -81,6 +81,13 @@ chatGroupTests = do
|
||||
testNoDirect4 _1 _0 _1 False False False -- False False True
|
||||
testNoDirect4 _1 _1 _0 False False False
|
||||
testNoDirect4 _1 _1 _1 False False False
|
||||
describe "create member contact" $ do
|
||||
it "create contact with group member with invitation message" testMemberContactMessage
|
||||
it "create contact with group member without invitation message" testMemberContactNoMessage
|
||||
it "prohibited to create contact with group member if it already exists" testMemberContactProhibitedContactExists
|
||||
it "prohibited to repeat sending x.grp.direct.inv" testMemberContactProhibitedRepeatInv
|
||||
it "invited member replaces member contact reference if it already exists" testMemberContactInvitedConnectionReplaced
|
||||
it "share incognito profile" testMemberContactIncognito
|
||||
where
|
||||
_0 = supportedChatVRange -- don't create direct connections
|
||||
_1 = groupCreateDirectVRange
|
||||
@ -230,8 +237,12 @@ testGroupShared alice bob cath checkMessages = do
|
||||
-- delete contact
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
alice ##> "@bob hey"
|
||||
alice <## "no contact bob"
|
||||
alice `send` "@bob hey"
|
||||
alice
|
||||
<### [ "@bob hey",
|
||||
"member #team bob does not have associated contact, creating contact",
|
||||
"peer chat protocol version range incompatible"
|
||||
]
|
||||
when checkMessages $ threadDelay 1000000
|
||||
alice #> "#team checking connection"
|
||||
bob <# "#team alice> checking connection"
|
||||
@ -643,11 +654,22 @@ testGroupDeleteInvitedContact =
|
||||
bob <# "#team alice> hello"
|
||||
bob #> "#team hi there"
|
||||
alice <# "#team bob> hi there"
|
||||
alice ##> "@bob hey"
|
||||
alice <## "no contact bob"
|
||||
bob #> "@alice hey"
|
||||
bob <## "[alice, contactId: 2, connId: 1] error: connection authorization failed - this could happen if connection was deleted, secured with different credentials, or due to a bug - please re-create the connection"
|
||||
(alice </)
|
||||
alice `send` "@bob hey"
|
||||
alice
|
||||
<### [ WithTime "@bob hey",
|
||||
"member #team bob does not have associated contact, creating contact",
|
||||
"contact for member #team bob is created",
|
||||
"sent invitation to connect directly to member #team bob"
|
||||
]
|
||||
bob
|
||||
<### [ "#team alice is creating direct contact alice with you",
|
||||
WithTime "alice> hey",
|
||||
"alice: security code changed"
|
||||
]
|
||||
concurrently_
|
||||
(alice <## "bob (Bob): contact is connected")
|
||||
(bob <## "alice (Alice): contact is connected")
|
||||
alice <##> bob
|
||||
|
||||
testDeleteGroupMemberProfileKept :: HasCallStack => FilePath -> IO ()
|
||||
testDeleteGroupMemberProfileKept =
|
||||
@ -696,7 +718,7 @@ testDeleteGroupMemberProfileKept =
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
alice ##> "@bob hey"
|
||||
alice <## "no contact bob"
|
||||
alice <## "no contact bob, use @#club bob <your message>"
|
||||
bob #> "@alice hey"
|
||||
bob <## "[alice, contactId: 2, connId: 1] error: connection authorization failed - this could happen if connection was deleted, secured with different credentials, or due to a bug - please re-create the connection"
|
||||
(alice </)
|
||||
@ -2686,3 +2708,270 @@ testNoGroupDirectConns4Members hostVRange mem2VRange mem3VRange mem4VRange noCon
|
||||
cc1 <## ("no contact " <> name2)
|
||||
cc2 ##> ("@" <> name1 <> " hi")
|
||||
cc2 <## ("no contact " <> name1)
|
||||
|
||||
testMemberContactMessage :: HasCallStack => FilePath -> IO ()
|
||||
testMemberContactMessage =
|
||||
testChat3 aliceProfile bobProfile cathProfile $
|
||||
\alice bob cath -> do
|
||||
createGroup3 "team" alice bob cath
|
||||
|
||||
-- TODO here and in following tests there would be no direct contacts initially, after "no direct conns" functionality is uncommented
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
bob ##> "/d alice"
|
||||
bob <## "alice: contact is deleted"
|
||||
|
||||
alice ##> "@#team bob hi"
|
||||
alice
|
||||
<### [ "member #team bob does not have associated contact, creating contact",
|
||||
"contact for member #team bob is created",
|
||||
"sent invitation to connect directly to member #team bob",
|
||||
WithTime "@bob hi"
|
||||
]
|
||||
bob
|
||||
<### [ "#team alice is creating direct contact alice with you",
|
||||
WithTime "alice> hi"
|
||||
]
|
||||
concurrently_
|
||||
(alice <## "bob (Bob): contact is connected")
|
||||
(bob <## "alice (Alice): contact is connected")
|
||||
|
||||
bob #$> ("/_get chat #1 count=1", chat, [(0, "started direct connection with you")])
|
||||
alice <##> bob
|
||||
|
||||
testMemberContactNoMessage :: HasCallStack => FilePath -> IO ()
|
||||
testMemberContactNoMessage =
|
||||
testChat3 aliceProfile bobProfile cathProfile $
|
||||
\alice bob cath -> do
|
||||
createGroup3 "team" alice bob cath
|
||||
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
bob ##> "/d alice"
|
||||
bob <## "alice: contact is deleted"
|
||||
|
||||
alice ##> "/_create member contact #1 2"
|
||||
alice <## "contact for member #team bob is created"
|
||||
|
||||
alice ##> "/_invite member contact @4" -- cath is 3, new bob contact is 4
|
||||
alice <## "sent invitation to connect directly to member #team bob"
|
||||
bob <## "#team alice is creating direct contact alice with you"
|
||||
concurrently_
|
||||
(alice <## "bob (Bob): contact is connected")
|
||||
(bob <## "alice (Alice): contact is connected")
|
||||
|
||||
bob #$> ("/_get chat #1 count=1", chat, [(0, "started direct connection with you")])
|
||||
alice <##> bob
|
||||
|
||||
testMemberContactProhibitedContactExists :: HasCallStack => FilePath -> IO ()
|
||||
testMemberContactProhibitedContactExists =
|
||||
testChat3 aliceProfile bobProfile cathProfile $
|
||||
\alice bob cath -> do
|
||||
createGroup3 "team" alice bob cath
|
||||
|
||||
alice ##> "/_create member contact #1 2"
|
||||
alice <## "bad chat command: member contact already exists"
|
||||
|
||||
alice ##> "@#team bob hi"
|
||||
alice <# "@bob hi"
|
||||
bob <# "alice> hi"
|
||||
|
||||
testMemberContactProhibitedRepeatInv :: HasCallStack => FilePath -> IO ()
|
||||
testMemberContactProhibitedRepeatInv =
|
||||
testChat3 aliceProfile bobProfile cathProfile $
|
||||
\alice bob cath -> do
|
||||
createGroup3 "team" alice bob cath
|
||||
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
bob ##> "/d alice"
|
||||
bob <## "alice: contact is deleted"
|
||||
|
||||
alice ##> "/_create member contact #1 2"
|
||||
alice <## "contact for member #team bob is created"
|
||||
|
||||
alice ##> "/_invite member contact @4 text hi" -- cath is 3, new bob contact is 4
|
||||
alice
|
||||
<### [ "sent invitation to connect directly to member #team bob",
|
||||
WithTime "@bob hi"
|
||||
]
|
||||
alice ##> "/_invite member contact @4 text hey"
|
||||
alice <## "bad chat command: x.grp.direct.inv already sent"
|
||||
bob
|
||||
<### [ "#team alice is creating direct contact alice with you",
|
||||
WithTime "alice> hi"
|
||||
]
|
||||
concurrently_
|
||||
(alice <## "bob (Bob): contact is connected")
|
||||
(bob <## "alice (Alice): contact is connected")
|
||||
|
||||
alice <##> bob
|
||||
|
||||
testMemberContactInvitedConnectionReplaced :: HasCallStack => FilePath -> IO ()
|
||||
testMemberContactInvitedConnectionReplaced tmp = do
|
||||
withNewTestChat tmp "alice" aliceProfile $ \alice -> do
|
||||
withNewTestChat tmp "bob" bobProfile $ \bob -> do
|
||||
withNewTestChat tmp "cath" cathProfile $ \cath -> do
|
||||
createGroup3 "team" alice bob cath
|
||||
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
|
||||
alice ##> "@#team bob hi"
|
||||
alice
|
||||
<### [ "member #team bob does not have associated contact, creating contact",
|
||||
"contact for member #team bob is created",
|
||||
"sent invitation to connect directly to member #team bob",
|
||||
WithTime "@bob hi"
|
||||
]
|
||||
bob
|
||||
<### [ "#team alice is creating direct contact alice with you",
|
||||
WithTime "alice> hi",
|
||||
"alice: security code changed"
|
||||
]
|
||||
concurrently_
|
||||
(alice <## "bob (Bob): contact is connected")
|
||||
(bob <## "alice (Alice): contact is connected")
|
||||
|
||||
bob #$> ("/_get chat @2 count=100", chat, chatFeatures <> [(0, "received invitation to join group team as admin"), (0, "hi"), (0, "security code changed")] <> chatFeatures)
|
||||
|
||||
withTestChat tmp "bob" $ \bob -> do
|
||||
subscriptions bob
|
||||
|
||||
checkConnectionsWork alice bob
|
||||
|
||||
withTestChat tmp "alice" $ \alice -> do
|
||||
subscriptions alice
|
||||
|
||||
withTestChat tmp "bob" $ \bob -> do
|
||||
subscriptions bob
|
||||
|
||||
checkConnectionsWork alice bob
|
||||
|
||||
withTestChat tmp "cath" $ \cath -> do
|
||||
subscriptions cath
|
||||
|
||||
-- group messages work
|
||||
alice #> "#team hello"
|
||||
concurrently_
|
||||
(bob <# "#team alice> hello")
|
||||
(cath <# "#team alice> hello")
|
||||
bob #> "#team hi there"
|
||||
concurrently_
|
||||
(alice <# "#team bob> hi there")
|
||||
(cath <# "#team bob> hi there")
|
||||
cath #> "#team hey team"
|
||||
concurrently_
|
||||
(alice <# "#team cath> hey team")
|
||||
(bob <# "#team cath> hey team")
|
||||
where
|
||||
subscriptions cc = do
|
||||
cc <## "2 contacts connected (use /cs for the list)"
|
||||
cc <## "#team: connected to server(s)"
|
||||
checkConnectionsWork alice bob = do
|
||||
alice <##> bob
|
||||
alice @@@ [("@bob", "hey"), ("@cath", "sent invitation to join group team as admin"), ("#team", "connected")]
|
||||
bob @@@ [("@alice", "hey"), ("#team", "started direct connection with you")]
|
||||
|
||||
testMemberContactIncognito :: HasCallStack => FilePath -> IO ()
|
||||
testMemberContactIncognito =
|
||||
testChat3 aliceProfile bobProfile cathProfile $
|
||||
\alice bob cath -> do
|
||||
-- create group, bob joins incognito
|
||||
alice ##> "/g team"
|
||||
alice <## "group #team is created"
|
||||
alice <## "to add members use /a team <name> or /create link #team"
|
||||
alice ##> "/create link #team"
|
||||
gLink <- getGroupLink alice "team" GRMember True
|
||||
bob ##> ("/c i " <> gLink)
|
||||
bobIncognito <- getTermLine bob
|
||||
bob <## "connection request sent incognito!"
|
||||
alice <## (bobIncognito <> ": accepting request to join group #team...")
|
||||
_ <- getTermLine bob
|
||||
concurrentlyN_
|
||||
[ do
|
||||
alice <## (bobIncognito <> ": contact is connected")
|
||||
alice <## (bobIncognito <> " invited to group #team via your group link")
|
||||
alice <## ("#team: " <> bobIncognito <> " joined the group"),
|
||||
do
|
||||
bob <## ("alice (Alice): contact is connected, your incognito profile for this contact is " <> bobIncognito)
|
||||
bob <## "use /i alice to print out this incognito profile again"
|
||||
bob <## ("#team: you joined the group incognito as " <> bobIncognito)
|
||||
]
|
||||
-- cath joins incognito
|
||||
cath ##> ("/c i " <> gLink)
|
||||
cathIncognito <- getTermLine cath
|
||||
cath <## "connection request sent incognito!"
|
||||
alice <## (cathIncognito <> ": accepting request to join group #team...")
|
||||
_ <- getTermLine cath
|
||||
concurrentlyN_
|
||||
[ do
|
||||
alice <## (cathIncognito <> ": contact is connected")
|
||||
alice <## (cathIncognito <> " invited to group #team via your group link")
|
||||
alice <## ("#team: " <> cathIncognito <> " joined the group"),
|
||||
do
|
||||
cath <## ("alice (Alice): contact is connected, your incognito profile for this contact is " <> cathIncognito)
|
||||
cath <## "use /i alice to print out this incognito profile again"
|
||||
cath <## ("#team: you joined the group incognito as " <> cathIncognito)
|
||||
cath <## ("#team: member " <> bobIncognito <> " is connected"),
|
||||
do
|
||||
bob <## ("#team: alice added " <> cathIncognito <> " to the group (connecting...)")
|
||||
bob <## ("#team: new member " <> cathIncognito <> " is connected")
|
||||
]
|
||||
|
||||
alice `hasContactProfiles` ["alice", T.pack bobIncognito, T.pack cathIncognito]
|
||||
bob `hasContactProfiles` ["bob", "alice", T.pack bobIncognito, T.pack cathIncognito]
|
||||
cath `hasContactProfiles` ["cath", "alice", T.pack bobIncognito, T.pack cathIncognito]
|
||||
|
||||
-- bob creates member contact with cath - both share incognito profile
|
||||
bob ##> ("/d " <> cathIncognito)
|
||||
bob <## (cathIncognito <> ": contact is deleted")
|
||||
cath ##> ("/d " <> bobIncognito)
|
||||
cath <## (bobIncognito <> ": contact is deleted")
|
||||
|
||||
bob ##> ("@#team " <> cathIncognito <> " hi")
|
||||
bob
|
||||
<### [ ConsoleString ("member #team " <> cathIncognito <> " does not have associated contact, creating contact"),
|
||||
ConsoleString ("contact for member #team " <> cathIncognito <> " is created"),
|
||||
ConsoleString ("sent invitation to connect directly to member #team " <> cathIncognito),
|
||||
WithTime ("i @" <> cathIncognito <> " hi")
|
||||
]
|
||||
cath
|
||||
<### [ ConsoleString ("#team " <> bobIncognito <> " is creating direct contact " <> bobIncognito <> " with you"),
|
||||
WithTime ("i " <> bobIncognito <> "> hi")
|
||||
]
|
||||
_ <- getTermLine bob
|
||||
_ <- getTermLine cath
|
||||
concurrentlyN_
|
||||
[ do
|
||||
bob <## (cathIncognito <> ": contact is connected, your incognito profile for this contact is " <> bobIncognito)
|
||||
bob <## ("use /i " <> cathIncognito <> " to print out this incognito profile again"),
|
||||
do
|
||||
cath <## (bobIncognito <> ": contact is connected, your incognito profile for this contact is " <> cathIncognito)
|
||||
cath <## ("use /i " <> bobIncognito <> " to print out this incognito profile again")
|
||||
]
|
||||
|
||||
bob `hasContactProfiles` ["bob", "alice", T.pack bobIncognito, T.pack cathIncognito]
|
||||
cath `hasContactProfiles` ["cath", "alice", T.pack bobIncognito, T.pack cathIncognito]
|
||||
|
||||
bob ?#> ("@" <> cathIncognito <> " hi, I'm incognito")
|
||||
cath ?<# (bobIncognito <> "> hi, I'm incognito")
|
||||
cath ?#> ("@" <> bobIncognito <> " hey, me too")
|
||||
bob ?<# (cathIncognito <> "> hey, me too")
|
||||
|
||||
-- members still use incognito profile for group
|
||||
alice #> "#team hello"
|
||||
concurrentlyN_
|
||||
[ bob ?<# "#team alice> hello",
|
||||
cath ?<# "#team alice> hello"
|
||||
]
|
||||
bob ?#> "#team hi there"
|
||||
concurrentlyN_
|
||||
[ alice <# ("#team " <> bobIncognito <> "> hi there"),
|
||||
cath ?<# ("#team " <> bobIncognito <> "> hi there")
|
||||
]
|
||||
cath ?#> "#team hey"
|
||||
concurrentlyN_
|
||||
[ alice <# ("#team " <> cathIncognito <> "> hey"),
|
||||
bob ?<# ("#team " <> cathIncognito <> "> hey")
|
||||
]
|
||||
|
@ -270,6 +270,12 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do
|
||||
it "x.grp.del" $
|
||||
"{\"v\":\"1\",\"event\":\"x.grp.del\",\"params\":{}}"
|
||||
==# XGrpDel
|
||||
it "x.grp.direct.inv" $
|
||||
"{\"v\":\"1\",\"event\":\"x.grp.direct.inv\",\"params\":{\"connReq\":\"https://simplex.chat/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D1-2%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\", \"content\":{\"text\":\"hello\",\"type\":\"text\"}}}"
|
||||
#==# XGrpDirectInv testConnReq (Just $ MCText "hello")
|
||||
it "x.grp.direct.inv without content" $
|
||||
"{\"v\":\"1\",\"event\":\"x.grp.direct.inv\",\"params\":{\"connReq\":\"https://simplex.chat/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D1-2%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"}}"
|
||||
#==# XGrpDirectInv testConnReq Nothing
|
||||
it "x.info.probe" $
|
||||
"{\"v\":\"1\",\"event\":\"x.info.probe\",\"params\":{\"probe\":\"AQIDBA==\"}}"
|
||||
#==# XInfoProbe (Probe "\1\2\3\4")
|
||||
|
@ -1 +1,3 @@
|
||||
{}
|
||||
{
|
||||
"developers": "Разработчици"
|
||||
}
|
||||
|
@ -53,5 +53,195 @@
|
||||
"chat-bot-example": "チャットボットの例",
|
||||
"donate": "寄付",
|
||||
"copyright-label": "© 2020-2023 SimpleX | Open-Source Project",
|
||||
"hero-p-1": "他のアプリにはユーザー ID があります: Signal、Matrix、Session、Briar、Jami、Cwtch など。<br> SimpleX にはありません。<strong>乱数さえもありません</strong>。<br> これにより、プライバシーが大幅に向上します。"
|
||||
"hero-p-1": "他のアプリにはユーザー ID があります: Signal、Matrix、Session、Briar、Jami、Cwtch など。<br> SimpleX にはありません。<strong>乱数さえもありません</strong>。<br> これにより、プライバシーが大幅に向上します。",
|
||||
"copy-the-command-below-text": "以下のコマンドをコピーしてチャットで使用します:",
|
||||
"simplex-private-card-9-point-1": "各メッセージ キューは、異なる送信アドレスと受信アドレスを使用してメッセージを一方向に渡します。",
|
||||
"simplex-private-card-1-point-2": "各キューのNaCL cryptoboxは、TLSが侵害された場合にメッセージキュー間のトラフィック相関を防止します。",
|
||||
"contact-hero-p-1": "このページを表示したときに、このリンク内の公開キーとメッセージ キュー アドレスはネットワーク経由で送信されません。 それらはリンク URL のハッシュ フラグメントに含まれています。",
|
||||
"scan-the-qr-code-with-the-simplex-chat-app": "SimpleX Chat アプリで QR コードをスキャン",
|
||||
"simplex-private-card-9-point-2": "従来のメッセージ ブローカーと比較して、攻撃ベクトルが減少し、利用可能なメタデータが減少します。",
|
||||
"feature-7-title": "ポータブルな暗号化データベース — プロファイルを別のデバイスに移動する",
|
||||
"no-federated": "いいえ - 連合型",
|
||||
"simplex-unique-overlay-card-3-p-3": "電子メール、XMPP、Matrixなどの連携ネットワークサーバーとは異なり、SimpleXサーバーはユーザーアカウントを保存せず、メッセージの中継のみを行い、双方のプライバシーを保護します。",
|
||||
"privacy-matters-overlay-card-3-p-2": "最も衝撃的な話の 1 つは、<a href='https://en.wikipedia.org/wiki/Mohamedou_Ould_Slahi' target='_blank'>Mohamedou Ould Salahi</a>の経験であり、彼の回顧録に記述され、『モーリタニア映画』で紹介されました。 彼は裁判も受けずにグアンタナモ収容所に入れられ、それまで10年間ドイツに住んでいたにも関わらず、9/11攻撃への関与の疑いでアフガニスタンの親戚に電話をかけた後、そこで15年間拷問を受けました。",
|
||||
"signing-key-fingerprint": "署名キーのフィンガープリント (SHA-256)",
|
||||
"simplex-network-2-desc": "SimpleX リレー サーバーは、ユーザー プロファイル、連絡先、配信されたメッセージを保存せず、相互に接続せず、サーバー ディレクトリもありません。",
|
||||
"docs-dropdown-5": "ホストXFTPサーバー",
|
||||
"simplex-private-card-3-point-2": "サーバーのフィンガープリントとチャネル バインディングにより、MITM 攻撃やリプレイ攻撃を防止します。",
|
||||
"docs-dropdown-3": "チャットのデータベースへのアクセス",
|
||||
"installing-simplex-chat-to-terminal": "SimpleX チャットをターミナルにインストールする",
|
||||
"use-this-command": "次のコマンドを使用してください:",
|
||||
"to-make-a-connection": "接続するには:",
|
||||
"comparison-section-list-point-6": "P2P は分散されていますが、統合されておらず、単一のネットワークとして動作します",
|
||||
"simplex-chat-via-f-droid": "F-Droid 経由の SimpleX チャット",
|
||||
"privacy-matters-overlay-card-1-p-1": "多くの大企業は、あなたの収入を見積もり、本当に必要のない製品を販売し、価格を決定するために、あなたのつながりに関する情報を使用します。",
|
||||
"privacy-matters-1-overlay-1-title": "プライバシーの保護はコストを削減します",
|
||||
"simplex-private-card-5-point-1": "SimpleX は、各暗号化レイヤーにコンテンツ パディングを使用して、メッセージ サイズ攻撃を阻止します。",
|
||||
"privacy-matters-2-overlay-1-linkText": "プライバシーはあなたに力を与えます",
|
||||
"enter-your-email-address": "Eメールアドレスを入力してください",
|
||||
"tap-to-close": "タップして閉じる",
|
||||
"feature-1-title": "マークダウンと編集を使用可能なE2E 暗号化メッセージ",
|
||||
"comparison-point-4-text": "単一または集中型ネットワーク",
|
||||
"guide-dropdown-9": "コネクションを作る",
|
||||
"simplex-unique-1-overlay-1-title": "ID、プロフィール、連絡先、メタデータの完全なプライバシー",
|
||||
"hero-overlay-card-2-p-4": "SimpleX は、その設計にユーザー ID を持たないことで、これらの攻撃から保護します。 また、シークレット モードを使用すると、連絡先ごとに異なる表示名が付けられ、連絡先間でデータが共有されることがなくなります。",
|
||||
"privacy-matters-overlay-card-2-p-2": "客観的であり、独立した意思決定を行うには、情報空間を制御する必要があります。 これは、ソーシャル グラフにアクセスできないプライベート コミュニケーション プラットフォームを使用している場合にのみ可能です。",
|
||||
"hero-overlay-card-2-p-1": "ユーザーが永続的な ID を持っている場合、それがセッション ID などの単なる乱数であっても、プロバイダーや攻撃者がユーザーの接続方法や送信するメッセージの数を監視できるリスクがあります。",
|
||||
"feature-3-title": "分散型シークレットグループ —<br>ユーザーのみがその存在を知っています",
|
||||
"simplex-network-overlay-1-title": "P2Pメッセージングプロトコルとの比較",
|
||||
"comparison-section-list-point-7": "P2Pネットワークには中央当局が存在するか、ネットワーク全体が侵害される可能性がある",
|
||||
"docs-dropdown-1": "SimpleXプラットフォーム",
|
||||
"hero-overlay-card-1-p-5": "クライアント デバイスのみがユーザー プロファイル、連絡先、およびグループを保存します。 メッセージは 2 レイヤーのエンドツーエンド暗号化を使用して送信されます。",
|
||||
"simplex-chat-for-the-terminal": "ターミナル用 SimpleX チャット",
|
||||
"simplex-network-overlay-card-1-li-3": "P2P は <a href='https://en.wikipedia.org/wiki/Man-in-the-middle_ Attack'>MITM 攻撃</a> 問題を解決せず、既存の実装のほとんどは最初の鍵交換に帯域外メッセージを使用していません 。 SimpleX は、最初のキー交換に帯域外メッセージを使用するか、場合によっては既存の安全で信頼できる接続を使用します。",
|
||||
"the-instructions--source-code": "ソース コードからダウンロードまたはコンパイルする方法を説明します。",
|
||||
"simplex-network-section-desc": "Simplex Chat は、P2P とフェデレーション ネットワークの利点を組み合わせて最高のプライバシーを提供します。",
|
||||
"privacy-matters-section-subheader": "メタデータのプライバシーを保護する — <span class='text-active-blue'>話す相手</span> — 以下のことからあなたを守ります:",
|
||||
"if-you-already-installed": "すでにインストールしている場合",
|
||||
"join": "参加",
|
||||
"privacy-matters-section-header": "プライバシーが<span class='gradient-text'>重要である理由</span>",
|
||||
"on-this-page": "このページでは",
|
||||
"privacy-matters-overlay-card-1-p-2": "オンライン小売業者は、収入が低い人ほど急ぎの買い物をする可能性が高いことを知っているため、より高い価格を請求したり、割引を廃止したりすることがあります。",
|
||||
"simplex-unique-3-overlay-1-title": "データの所有権、管理、セキュリティ",
|
||||
"protocol-3-text": "P2Pプロトコル",
|
||||
"simplex-private-card-6-point-2": "これを防ぐために、SimpleX アプリは、アドレスをリンクまたは QR コードとして共有するときに、ワンタイム キーを帯域外で渡します。",
|
||||
"no": "いいえ",
|
||||
"contact-hero-header": "SimpleX Chatで接続するためのアドレスを受信しました",
|
||||
"feature-8-title": "シークレット モード — <br>SimpleX Chat に固有の",
|
||||
"simplex-private-card-4-point-2": "Tor経由でSimpleXを使用するには、<a href=\"https://guardianproject.info/apps/org.torproject.android/\" target=\"_blank\">Orbotアプリ</a>をインストールし、SOCKS5プロキシを有効にしてください(iOSの場合は<a href=\"https://apps.apple.com/us/app/orbot/id1609461599?platform=iphone\" target=\"_blank\">VPN</a>)。",
|
||||
"contact-hero-subheader": "スマホ・タブレットのSimpleX ChatアプリでQRコードを読み取ってください。",
|
||||
"simplex-unique-2-overlay-1-title": "スパムと悪用からの最高の保護",
|
||||
"simplex-private-6-title": "帯域外の<br>鍵交換",
|
||||
"join-us-on-GitHub": "GitHubで参加する",
|
||||
"comparison-section-header": "他のプロトコルとの比較",
|
||||
"invitation-hero-header": "SimpleX Chatで接続するための使い捨てのリンクを受信しました",
|
||||
"no-secure": "いいえ - 安全",
|
||||
"hero-overlay-card-1-p-2": "メッセージを配信するために、SimpleX は、他のすべてのプラットフォームで使用されるユーザー ID の代わりに、接続ごとに個別のメッセージ キューの一時的な匿名ペア識別子を使用します — 長期的な識別子はありません。",
|
||||
"simplex-network-1-header": "P2Pネットワークとは異なります",
|
||||
"simplex-private-card-7-point-2": "メッセージが追加、削除、または変更されると、受信者に警告が表示されます。",
|
||||
"simplex-unique-3-title": "データを管理するのはあなたです",
|
||||
"no-resilient": "いいえ - 弾力性",
|
||||
"hide-info": "情報を隠す",
|
||||
"privacy-matters-overlay-card-3-p-4": "エンドツーエンドで暗号化されたメッセンジャーを使用するだけでは十分ではありません。私たちは皆、個人ネットワークのプライバシーを保護するメッセンジャーを使用する必要があります — 私たちがつながっているのは誰なのか。",
|
||||
"releases-to-this-repo-are-done-1-2-days-later": "このリポジトリへのリリースは 1 ~ 2 日後に行われます",
|
||||
"comparison-point-1-text": "グローバル ID が必要",
|
||||
"comparison-section-list-point-5": "ユーザーのメタデータのプライバシーを保護しない",
|
||||
"hero-overlay-card-2-p-2": "その後、この情報を既存の公開ソーシャル ネットワークと関連付けて、本当の身元を特定することができます。",
|
||||
"privacy-matters-overlay-card-1-p-3": "一部の金融会社や保険会社は、ソーシャル グラフを使用して金利や保険料を決定しています。 多くの場合、収入の低い人にはより多くの料金を支払わなければなりません。 —これは、<a href='https://fairbydesign.com/povertypremium/' target='_blank'>「貧困プレミアム」</a> として知られています。",
|
||||
"comparison-point-3-text": "DNS への依存",
|
||||
"yes": "はい",
|
||||
"docs-dropdown-6": "WebRTC サーバー",
|
||||
"newer-version-of-eng-msg": "このページには英語版の新しいバージョンがあります。",
|
||||
"install-simplex-app": "SimpleX アプリをインストールする",
|
||||
"comparison-point-2-text": "MITMの可能性",
|
||||
"scan-the-qr-code-with-the-simplex-chat-app-description": "このリンクの公開キーとメッセージ キュー アドレスは、このページを表示するときにネットワーク経由で送信されません。<br> これらはリンク URL のハッシュ フラグメントに含まれています。",
|
||||
"open-simplex-app": "SimpleXアプリを開く",
|
||||
"see-simplex-chat": "SimpleX チャットを見る",
|
||||
"comparison-section-list-point-1": "通常は電話番号に基づいていますが、場合によってはユーザー名に基づいています",
|
||||
"github-repository": "GitHub リポジトリ",
|
||||
"feature-5-title": "消えるメッセージ",
|
||||
"connect-in-app": "アプリで接続する",
|
||||
"simplex-private-card-4-point-1": "IP アドレスを保護するために、Tor またはその他のトランスポート オーバーレイ ネットワーク経由でサーバーにアクセスできます。",
|
||||
"privacy-matters-3-title": "無実の交際による起訴",
|
||||
"comparison-point-5-text": "中央コンポーネントまたはその他のネットワーク全体の攻撃",
|
||||
"click-to-see": "クリックして見る",
|
||||
"donate-here-to-help-us": "寄付はこちらから",
|
||||
"simplex-private-1-title": "2レイヤーの<br>エンドツーエンド暗号化",
|
||||
"privacy-matters-2-overlay-1-title": "プライバシーはあなたに力を与えます",
|
||||
"simplex-unique-overlay-card-2-p-2": "オプションのユーザー アドレスを使用しても、スパムの連絡先リクエストの送信に使用される可能性がありますが、接続を失うことなく変更または完全に削除できます。",
|
||||
"simplex-unique-4-overlay-1-title": "完全に分散化されています — ユーザーは SimpleX ネットワークを所有します",
|
||||
"simplex-network-overlay-card-1-li-5": "すべての既知の P2P ネットワークは、各ノードが検出可能であり、ネットワーク全体が動作するため、<a href='https://en.wikipedia.org/wiki/Sybil_question'>Sybil 攻撃</a>に対して脆弱である可能性があります。 この問題を軽減する既知の対策には、一元化されたコンポーネントか、高価な<a href='https://en.wikipedia.org/wiki/Proof_of_work'>作業証明</a>が必要です。 SimpleX ネットワークにはサーバーの検出機能がなく、断片化されており、複数の分離されたサブネットワークとして動作するため、ネットワーク全体への攻撃は不可能です。",
|
||||
"simplex-private-2-title": "追加レイヤーの<br>サーバー暗号化",
|
||||
"hero-overlay-card-1-p-4": "この設計により、ユーザーの情報の漏洩が防止されます' アプリケーションレベルのメタデータ。 プライバシーをさらに向上させ、IP アドレスを保護するために、Tor 経由でメッセージング サーバーに接続できます。",
|
||||
"f-droid-org-repo": "F-Droid.org リポジトリ",
|
||||
"simplex-network-2-header": "連合型ネットワークとは異なります",
|
||||
"simplex-private-3-title": "セキュアな認証付き<br>TLSトランスポート",
|
||||
"comparison-section-list-point-3": "公開キーまたはその他のグローバルに一意な ID",
|
||||
"hero-overlay-card-2-p-3": "Tor v3 サービスを使用する最もプライベートなアプリであっても、同じプロファイルを介して 2 人の異なる連絡先と会話すると、それらが同じ人物に接続していることが証明される可能性があります。",
|
||||
"simplex-private-4-title": "オプション<br>Tor経由のアクセス",
|
||||
"privacy-matters-1-title": "広告と価格差別",
|
||||
"hero-overlay-1-title": "SimpleXの仕組みは?",
|
||||
"stable-versions-built-by-f-droid-org": "F-Droid.org によって構築された安定バージョン",
|
||||
"contact-hero-p-3": "以下のリンクを使用してアプリをダウンロードしてください。",
|
||||
"privacy-matters-3-overlay-1-title": "プライバシーはあなたの自由を守ります",
|
||||
"docs-dropdown-7": "SimpleX チャットを翻訳する",
|
||||
"simplex-network-1-desc": "すべてのメッセージはサーバー経由で送信され、メタデータのプライバシーが向上し、信頼性の高い非同期メッセージ配信が提供されると同時に、多くが回避されます",
|
||||
"simplex-chat-repo": "SimpleX チャット リポジトリ",
|
||||
"simplex-private-card-6-point-1": "多くの通信プラットフォームは、サーバーやネットワーク プロバイダーによる MITM 攻撃に対して脆弱です。",
|
||||
"privacy-matters-3-overlay-1-linkText": "プライバシーはあなたの自由を守ります",
|
||||
"simplex-unique-overlay-card-1-p-2": "メッセージを配信するために、SimpleX は一方向メッセージ キューの<a href='https://csrc.nist.gov/glossary/term/Pairwise_Pseudonymous_Identifier'>ペアワイズ匿名アドレス</a>を使用し、受信メッセージと送信メッセージに分けて、通常は異なるサーバーを経由します。 SimpleX を使用することは、<strong>別の「バーナー」 を使用するようなものです。 連絡先ごとにメールまたは電話</strong>を使用できるため、管理に手間がかかりません。",
|
||||
"simplex-unique-overlay-card-3-p-4": "送受信されるサーバー トラフィックの間に共通の識別子や暗号文はありません。 — 誰かがそれを観察している場合、たとえ TLS が侵害されたとしても、誰が誰と通信しているのかを簡単に判断することはできません。",
|
||||
"docs-dropdown-2": "Android ファイルへのアクセス",
|
||||
"get-simplex": "SimpleXを入手する",
|
||||
"privacy-matters-overlay-card-3-p-1": "誰もが通信のプライバシーとセキュリティに気を配る必要があります。 たとえ何も隠すものがなかったとしても、無害な会話はあなたを危険にさらす可能性があります。",
|
||||
"simplex-unique-2-title": "スパムや悪用から<br>保護されています",
|
||||
"comparison-section-list-point-2": "DNSベースのアドレス",
|
||||
"stable-and-beta-versions-built-by-developers": "開発者によって構築された安定版とベータ版",
|
||||
"simplex-network-3-header": "SimpleX ネットワーク",
|
||||
"comparison-section-list-point-4": "オペレーターのサーバーが侵害された場合。 Signal およびその他の一部のアプリでセキュリティ コードを検証して緩和する",
|
||||
"simplex-private-card-2-point-1": "TLSが侵害された場合、受信したサーバー・トラフィックと送信したサーバー・トラフィックの相関を防ぐため、受信者に配信するサーバー暗号化レイヤーを追加します。",
|
||||
"f-droid-page-simplex-chat-repo-section-text": "F-Droid クライアントに追加するには、<span class='hide-on-mobile'>QR コードをスキャンするか</span>、次の URL を使用します:",
|
||||
"join-the-REDDIT-community": "REDDITコミュニティに参加する",
|
||||
"simplex-private-card-10-point-2": "ユーザー プロファイル識別子なしでメッセージを配信できるため、他の方法よりも優れたメタデータ プライバシーが提供されます。",
|
||||
"privacy-matters-2-title": "選挙操作",
|
||||
"simplex-private-card-5-point-2": "これにより、異なるサイズのメッセージがサーバーやネットワーク オブザーバーには同じように見えます。",
|
||||
"hero-overlay-card-1-p-1": "多くのユーザーは、<em>SimpleX にユーザー識別子がない場合、メッセージの配信先をどのようにして知ることができるのでしょうか?</em> と質問しました",
|
||||
"feature-6-title": "E2E暗号化された<br>音声通話とビデオ通話",
|
||||
"simplex-network-overlay-card-1-li-2": "SimpleX 設計は、ほとんどの P2P ネットワークとは異なり、一時的であってもいかなる種類のグローバル ユーザー識別子も持たず、一時的なペアごとの識別子のみを使用するため、より優れた匿名性とメタデータ保護が提供されます。",
|
||||
"simplex-unique-4-title": "SimpleX ネットワークを所有",
|
||||
"privacy-matters-overlay-card-3-p-3": "一般の人が、たとえ「匿名」アカウント経由であっても、オンラインで共有した内容で逮捕されます。<a href='https://www.dailymail.co.uk/news/article-11282263/Moment-police-swoop-house-devout -catholic-mother-malicious-online-posts.html' target='_blank'>たとえ民主主義国家であったとしても</a>。",
|
||||
"simplex-unique-overlay-card-3-p-2": "エンドツーエンドで暗号化されたメッセージは、SimpleXのリレーサーバーで受信するまで一時的に保持され、その後永久に削除されます。",
|
||||
"simplex-private-card-7-point-1": "整合性を保証するために、メッセージには連続した番号が付けられ、前のメッセージのハッシュが含まれます。",
|
||||
"contact-hero-p-2": "SimpleX Chat をまだダウンロードしていませんか?",
|
||||
"why-simplex-is": "なぜSimpleXなのか",
|
||||
"simplex-network-section-header": "SimpleX <span class='gradient-text'>ネットワーク</span>",
|
||||
"simplex-private-10-title": "一時的な匿名のペア識別子",
|
||||
"privacy-matters-1-overlay-1-linkText": "プライバシーの保護はコストを削減します",
|
||||
"tap-the-connect-button-in-the-app": "アプリの <span class='text-active-blue'>「接続」</span> ボタンをタップします",
|
||||
"comparison-section-list-point-4a": "SimpleX リレーは e2e 暗号化を侵害できません。 セキュリティ コードを検証して帯域外チャネルへの攻撃を軽減します",
|
||||
"unique": "唯一",
|
||||
"simplex-network-1-overlay-linktext": "P2Pネットワークの問題点",
|
||||
"no-private": "いいえ - プライベート",
|
||||
"simplex-unique-1-title": "プライバシーが完全に守られます",
|
||||
"protocol-2-text": "XMPP、Matrix",
|
||||
"guide": "ガイド",
|
||||
"simplex-network-overlay-card-1-li-4": "P2P の実装は、一部のインターネット プロバイダー (<a href='https://en.wikipedia.org/wiki/BitTorrent'>BitTorrent</a> など) によってブロックされる場合があります。 SimpleX はトランスポートに依存しません- WebSocketのような標準的な Web プロトコル上で動作します。",
|
||||
"hero-overlay-2-title": "ユーザー ID がプライバシーに悪影響を与えるのはなぜですか?",
|
||||
"docs-dropdown-4": "ホストSMPサーバー",
|
||||
"feature-4-title": "E2E暗号化された音声メッセージ",
|
||||
"privacy-matters-overlay-card-2-p-1": "つい最近まで、私たちは主要な選挙が <a href='https://en.wikipedia.org/wiki/Facebook–Cambridge_Analytica_data_scandal' target='_blank'>評判の高いコンサルティング会社</a>によって操作されているのを観察しました。 ソーシャルグラフは私たちの現実世界の見方を歪め、私たちの投票を操作します。",
|
||||
"privacy-matters-overlay-card-2-p-3": "SimpleX は、設計上ユーザー識別子を持たない最初のプラットフォームであり、この方法で既知の代替手段よりも接続グラフを保護します。",
|
||||
"learn-more": "さらに詳しく",
|
||||
"simplex-private-8-title": "メッセージのミキシング<br>相関性を減らす",
|
||||
"scan-qr-code-from-mobile-app": "モバイルアプリからQRコードをスキャン",
|
||||
"simplex-private-card-3-point-3": "セッション攻撃を防ぐために、接続の再開は無効になっています。",
|
||||
"simplex-private-card-10-point-1": "SimpleX は、ユーザー連絡先またはグループ メンバーごとに、一時的な匿名のペアごとのアドレスと資格情報を使用します。",
|
||||
"more-info": "詳細情報",
|
||||
"no-decentralized": "いいえ - 分散型",
|
||||
"protocol-1-text": "Signal、大きなプラットフォーム",
|
||||
"simplex-network-overlay-card-1-li-6": "P2P ネットワークは、<a href='https://www.usenix.org/conference/woot15/workshop-program/presentation/p2p-file-sharing-hell-exploiting-bittorrent'>DRDoS 攻撃</a>に対して脆弱になる可能性があります。 クライアントがトラフィックを再ブロードキャストして増幅する可能性があり、その結果、ネットワーク全体のサービス拒否が発生する可能性があります。 SimpleX クライアントは既知の接続からのトラフィックのみを中継するため、攻撃者がネットワーク全体のトラフィックを増幅するために使用することはできません。",
|
||||
"if-you-already-installed-simplex-chat-for-the-terminal": "すでにターミナルに SimpleX Chat をインストールしている場合",
|
||||
"docs-dropdown-8": "SimpleX ディレクトリ サービス",
|
||||
"simplex-private-card-1-point-1": "ダブルラチェットプロトコル —<br>完全な前方秘匿性と侵入回復機能を備えたOTRメッセージング。",
|
||||
"simplex-private-card-8-point-1": "SimpleX サーバーは、低遅延の混合ノードとして機能します — 受信メッセージと送信メッセージの順序が異なります。",
|
||||
"simplex-unique-overlay-card-2-p-1": "SimpleX プラットフォームには識別子がないため、ワンタイムまたは一時的なユーザー アドレスを QR コードまたはリンクとして共有しない限り、誰もあなたに連絡することはできません。",
|
||||
"sign-up-to-receive-our-updates": "最新情報を受け取る",
|
||||
"simplex-private-section-header": "SimpleX を<span class='gradient-text'>プライベート</span>にするもの",
|
||||
"we-invite-you-to-join-the-conversation": "ぜひ会話にご参加ください",
|
||||
"feature-2-title": "E2E暗号化された<br>画像とファイル",
|
||||
"simplex-private-9-title": "単方向<br>メッセージキュー",
|
||||
"simplex-unique-overlay-card-1-p-3": "この設計により、通信相手のプライバシーが保護され、SimpleX プラットフォーム サーバーや監視者からプライバシーが隠されます。 IP アドレスをサーバーから隠すには、<strong>Tor 経由で SimpleX サーバーに接続</strong>します。",
|
||||
"simplex-private-7-title": "メッセージの整合性<br>検証",
|
||||
"privacy-matters-overlay-card-1-p-4": "SimpleX プラットフォームは、他のどのプラットフォームよりも接続のプライバシーを保護し、ソーシャル グラフが企業や組織に利用されることを完全に防ぎます。 SimpleX Chat が提供するサーバーを使用している場合でも、ユーザーの数や接続数はわかりません。",
|
||||
"hero-overlay-card-1-p-6": "詳細については、<a href='https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md' target='_blank'>SimpleX ホワイトペーパー</a>をご覧ください。",
|
||||
"simplex-network-overlay-card-1-p-1": "<a href='https://en.wikipedia.org/wiki/Peer-to-peer'>P2P</a> メッセージング プロトコルとアプリには、SimpleX よりも信頼性が低く、分析がより複雑になるさまざまな問題があり、 いくつかの種類の攻撃に対して脆弱です。",
|
||||
"simplex-network-overlay-card-1-li-1": "P2P ネットワークは、メッセージをルーティングするために <a href='https://en.wikipedia.org/wiki/Distributed_hash_table'>DHT</a> の一部の変種に依存します。 DHT の設計では、配信保証と遅延のバランスを取る必要があります。 SimpleX は、受信者が選択したサーバーを使用して、メッセージを複数のサーバーを介して並行して冗長的に渡すことができるため、P2P よりも優れた配信保証と低い遅延の両方を備えています。 P2P ネットワークでは、メッセージはアルゴリズムによって選択されたノードを使用して、<em>O(log N)</em> 個のノードを順番に通過します。",
|
||||
"privacy-matters-section-label": "メッセンジャーがあなたのデータにアクセスできないようにしてください!",
|
||||
"simplex-unique-overlay-card-3-p-1": "SimpleX Chat は、サポートされているデバイスにエクスポートして転送できる<strong>ポータブル暗号化データベース形式</strong>を使用して、すべてのユーザー データをクライアント デバイスにのみ保存します。",
|
||||
"simplex-network-3-desc": "サーバーはユーザーを接続するための<span class='text-active-blue'>一方向キュー</span>を提供しますが、ネットワーク接続グラフは表示されません— ユーザーだけがそうします。",
|
||||
"simplex-private-card-3-point-1": "クライアント/サーバー接続には、強力なアルゴリズムを備えた TLS 1.2/1.3 のみが使用されます。",
|
||||
"hero-overlay-card-1-p-3": "メッセージの受信に使用するサーバー、連絡先を定義します —メッセージを送信するために使用するサーバー。 すべての会話では 2 つの異なるサーバーが使用される可能性があります。",
|
||||
"simplex-unique-overlay-card-1-p-1": "他のメッセージング プラットフォームとは異なり、SimpleX には<strong>ユーザーに割り当てられる識別子がありません</strong>。 ユーザーを識別するために、電話番号、ドメインベースのアドレス (電子メールや XMPP など)、ユーザー名、公開キー、さらには乱数にも依存しません。 —我々もSimpleX サーバーを何人が使用しているかはわかりません。",
|
||||
"f-droid-page-f-droid-org-repo-section-text": "SimpleX Chat と F-Droid.org リポジトリは、異なるキーを使用してビルドに署名します。 切り替えるには、チャット データベースを<a href='/docs/guide/chat-profiles.html#move-your-chat-profiles-to-another-device'>エクスポート</a>し、アプリを再インストールしてください。",
|
||||
"simplex-private-5-title": "何レイヤーもの<br>コンテンツパディング"
|
||||
}
|
||||
|
@ -58,7 +58,7 @@
|
||||
"simplex-explained-tab-2-p-1": "Voor elke verbinding gebruikt u twee afzonderlijke berichten wachtrijen om berichten via verschillende servers te verzenden en te ontvangen.",
|
||||
"simplex-explained-tab-2-p-2": "Servers geven berichten slechts in één richting door, zonder een volledig beeld te hebben van het gesprek of de connecties van de gebruiker.",
|
||||
"hero-p-1": "Andere apps hebben gebruikers-ID's: Signal, Matrix, Session, Briar, Jami, Cwtch, enz.<br> SimpleX niet, <strong>zelfs geen willekeurige getallen</strong>.<br> Dit verbetert uw privacy.",
|
||||
"hero-2-header-desc": "De video laat zien hoe je verbinding maakt met een vriend via een eenmalige QR-code, persoonlijk of via een videolink. U kunt ook verbinding maken door een uitnodigingslink te delen.",
|
||||
"hero-2-header-desc": "De video laat zien hoe je verbinding maakt met een vriend via een persoonlijk of video link eenmalige gedeelde QR-code. U kunt ook verbinding maken door een uitnodigingslink te delen.",
|
||||
"hero-header": "Privacy opnieuw gedefinieerd",
|
||||
"feature-7-title": "Portable versleutelde database — verplaats je profiel naar een ander apparaat",
|
||||
"simplex-private-card-1-point-1": "Protocol met double-ratchet -<br>OTR-berichten met perfecte voorwaartse geheimhouding en inbraak herstel.",
|
||||
@ -204,8 +204,8 @@
|
||||
"simplex-unique-card-1-p-2": "In tegenstelling tot elk ander bestaand berichten platform, heeft SimpleX geen identificatiecodes toegewezen aan de gebruikers — <strong>zelfs geen willekeurige nummers </strong>.",
|
||||
"comparison-section-list-point-1": "Meestal op basis van een telefoonnummer, in sommige gevallen op gebruikersnamen",
|
||||
"comparison-section-list-point-2": "Op DNS gebaseerde adressen",
|
||||
"comparison-section-list-point-4": "Als de servers van de operator zijn aangetast",
|
||||
"comparison-section-list-point-5": "Beschermt de metadata van gebruikers niet",
|
||||
"comparison-section-list-point-4": "Als de servers van de operator zijn gecompromitteerd. Controleer de beveiligingscode in Signal en enkele andere apps om dit te beperken",
|
||||
"comparison-section-list-point-5": "Beschermt de privacy van metagegevens van gebruikers niet",
|
||||
"comparison-section-list-point-6": "Hoewel P2P wordt gedistribueerd, zijn ze niet federatief - ze werken als een enkel netwerk",
|
||||
"see-here": "kijk hier",
|
||||
"comparison-section-list-point-7": "P2P netwerken hebben een centrale autoriteit of het hele netwerk kan worden aangetast",
|
||||
@ -242,5 +242,6 @@
|
||||
"stable-versions-built-by-f-droid-org": "Stabiele versies gebouwd door F-Droid.org",
|
||||
"releases-to-this-repo-are-done-1-2-days-later": "De releases voor deze repository vinden 1-2 dagen later plaats",
|
||||
"f-droid-page-f-droid-org-repo-section-text": "SimpleX Chat- en F-Droid.org-repository's ondertekenen builds met de verschillende sleutels. Om over te stappen, alstublieft <a href='/docs/guide/chat-profiles.html#move-your-chat-profiles-to-another-device'>exporteer</a> de chatdatabase en installeer de app opnieuw.",
|
||||
"docs-dropdown-8": "SimpleX Directory Service"
|
||||
}
|
||||
"docs-dropdown-8": "SimpleX Directory Service",
|
||||
"comparison-section-list-point-4a": "SimpleX relais kunnen de e2e-versleuteling niet in gevaar brengen. Controleer de beveiligingscode om aanvallen op out-of-band kanalen te beperken"
|
||||
}
|
||||
|
@ -98,7 +98,7 @@
|
||||
"no-federated": "Nie - sfederowany",
|
||||
"comparison-section-list-point-1": "Zazwyczaj na podstawie numeru telefonu, w niektórych przypadkach na podstawie nazwy użytkownika",
|
||||
"comparison-section-list-point-2": "Adresy oparte na DNS",
|
||||
"comparison-section-list-point-5": "Nie chroni metadanych użytkowników",
|
||||
"comparison-section-list-point-5": "Nie chroni prywatności metadanych użytkowników",
|
||||
"see-here": "zobacz tutaj",
|
||||
"simplex-unique-1-title": "Masz pełną prywatność",
|
||||
"hero-overlay-card-1-p-3": "Ty określasz, którego serwera (serwerów) użyć do odbierania wiadomości, Twoje kontakty — serwery, których używasz do wysyłania do nich wiadomości. Każda rozmowa prawdopodobnie będzie korzystać z dwóch różnych serwerów.",
|
||||
@ -208,7 +208,7 @@
|
||||
"protocol-2-text": "XMPP, Matrix",
|
||||
"protocol-3-text": "Protokoły sieci P2P",
|
||||
"comparison-section-list-point-6": "Podczas gdy sieci P2P są rozproszone, nie są sfederowane - działają jako jedna sieć",
|
||||
"comparison-section-list-point-4": "Jeśli bezpieczeństwo serwerów operatora zostało naruszone",
|
||||
"comparison-section-list-point-4": "Jeśli bezpieczeństwo serwerów operatora zostało naruszone. Zweryfikuj kody bezpieczeństwa w Signalu lub innej aplikacji aby to złagodzić",
|
||||
"comparison-section-list-point-7": "Sieci P2P albo mają centralny organ, albo cała sieć może zostać skompromitowana",
|
||||
"guide-dropdown-1": "Szybki start",
|
||||
"guide-dropdown-2": "Wysyłanie wiadomości",
|
||||
@ -242,5 +242,6 @@
|
||||
"signing-key-fingerprint": "Odcisk klucza podpisu (SHA-256)",
|
||||
"f-droid-org-repo": "Repo F-Droid.org",
|
||||
"stable-versions-built-by-f-droid-org": "Wersje stabilne zbudowane przez F-Droid.org",
|
||||
"releases-to-this-repo-are-done-1-2-days-later": "Wydania na tym repo są 1-2 dni później"
|
||||
"releases-to-this-repo-are-done-1-2-days-later": "Wydania na tym repo są 1-2 dni później",
|
||||
"comparison-section-list-point-4a": "Przekaźniki SimpleX nie mogą skompromitować szyfrowania e2e. Zweryfikuj kody bezpieczeństwa aby złagodzić atak na kanał pozapasmowy"
|
||||
}
|
||||
|
@ -194,7 +194,7 @@
|
||||
"no-resilient": "不需要 - 有抗御力",
|
||||
"no-decentralized": "不需要 - 去中心化的",
|
||||
"comparison-section-list-point-3": "公钥或其他一些全球唯一的 ID",
|
||||
"comparison-section-list-point-4": "如果运营商的服务器受到威胁",
|
||||
"comparison-section-list-point-4": "如果运营商的服务器受到威胁。 验证 Signal 和其他一些应用程序中的安全代码以缓解该问题",
|
||||
"comparison-section-list-point-1": "通常基于电话号码,在某些情况下基于用户名",
|
||||
"comparison-section-list-point-2": "基于 DNS 的地址",
|
||||
"comparison-section-list-point-6": "P2P 是分布式的,而非联邦式的 - 它们作为单个网络运行",
|
||||
@ -232,5 +232,16 @@
|
||||
"guide-dropdown-9": "建立连接",
|
||||
"back-to-top": "回到页首",
|
||||
"on-this-page": "在此页面上",
|
||||
"glossary": "术语表"
|
||||
"glossary": "术语表",
|
||||
"signing-key-fingerprint": "签名密钥指纹 (SHA-256)",
|
||||
"simplex-chat-via-f-droid": "通过 F-Droid 下载 SimpleX",
|
||||
"releases-to-this-repo-are-done-1-2-days-later": "此存储库的版本将延迟 1-2 天发布",
|
||||
"f-droid-org-repo": "F-Droid.org 存储库",
|
||||
"stable-versions-built-by-f-droid-org": "由 F-Droid.org 构建的稳定版本",
|
||||
"simplex-chat-repo": "SimpleX 存储库",
|
||||
"stable-and-beta-versions-built-by-developers": "开发人员构建的稳定版和测试版",
|
||||
"f-droid-page-simplex-chat-repo-section-text": "要将其添加到您的 F-Droid 客户端,请<span class='hide-on-mobile'>扫描二维码或</span>使用以下 URL:",
|
||||
"comparison-section-list-point-4a": "SimpleX 中继无法破坏 e2e 加密。 验证安全代码以减轻对带外通道的攻击",
|
||||
"docs-dropdown-8": "SimpleX 目录服务",
|
||||
"f-droid-page-f-droid-org-repo-section-text": "SimpleX Chat 和 F-Droid.org 存储库使用不同的密钥对构建进行签名。 如需切换,请<a href='/docs/guide/chat-profiles.html#move-your-chat-profiles-to-another-device'>导出</a>聊天数据库并重新安装应用。"
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
"details": [
|
||||
{
|
||||
"appIDs": [
|
||||
"5NN7GUYB6.chat.simplex.app"
|
||||
"5NN7GUYB6T.chat.simplex.app"
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
|
BIN
website/src/img/simplex-desktop-dark-1.png
Normal file
After Width: | Height: | Size: 556 KiB |
BIN
website/src/img/simplex-desktop-dark-2.png
Normal file
After Width: | Height: | Size: 550 KiB |
BIN
website/src/img/simplex-desktop-light.png
Normal file
After Width: | Height: | Size: 545 KiB |
BIN
website/src/img/simplex-desktop-linux-dark-1.png
Normal file
After Width: | Height: | Size: 556 KiB |
BIN
website/src/img/simplex-desktop-linux-dark-2.png
Normal file
After Width: | Height: | Size: 550 KiB |
BIN
website/src/img/simplex-desktop-linux-light.png
Normal file
After Width: | Height: | Size: 545 KiB |