mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-09 13:56:06 +00:00
Merge branch 'master' into weblate/website
This commit is contained in:
@@ -142,6 +142,7 @@ class OpenChatAlertViewController: UIViewController {
|
||||
private let profileBadge: LocalBadge?
|
||||
private let subtitle: String?
|
||||
private let information: String?
|
||||
private let secondaryInformation: Bool
|
||||
private let cancelTitle: String
|
||||
private let confirmTitle: String?
|
||||
private let secondTitle: String?
|
||||
@@ -156,6 +157,7 @@ class OpenChatAlertViewController: UIViewController {
|
||||
profileBadge: LocalBadge? = nil,
|
||||
subtitle: String? = nil,
|
||||
information: String? = nil,
|
||||
secondaryInformation: Bool = false,
|
||||
cancelTitle: String = "Cancel",
|
||||
confirmTitle: String? = "Open",
|
||||
secondTitle: String? = nil,
|
||||
@@ -169,6 +171,7 @@ class OpenChatAlertViewController: UIViewController {
|
||||
self.profileBadge = profileBadge
|
||||
self.subtitle = subtitle
|
||||
self.information = information
|
||||
self.secondaryInformation = secondaryInformation
|
||||
self.cancelTitle = cancelTitle
|
||||
self.confirmTitle = confirmTitle
|
||||
self.secondTitle = secondTitle
|
||||
@@ -248,7 +251,7 @@ class OpenChatAlertViewController: UIViewController {
|
||||
let infoLabel = UILabel()
|
||||
infoLabel.text = information
|
||||
infoLabel.font = UIFont.preferredFont(forTextStyle: .footnote)
|
||||
infoLabel.textColor = .label
|
||||
infoLabel.textColor = secondaryInformation ? .secondaryLabel : .label
|
||||
infoLabel.numberOfLines = 3
|
||||
infoLabel.textAlignment = .center
|
||||
infoLabel.translatesAutoresizingMaskIntoConstraints = false
|
||||
@@ -426,6 +429,7 @@ func showOpenChatAlert<Content: View>(
|
||||
theme: AppTheme,
|
||||
subtitle: String? = nil,
|
||||
information: String? = nil,
|
||||
secondaryInformation: Bool = false,
|
||||
cancelTitle: String = "Cancel",
|
||||
confirmTitle: String? = "Open",
|
||||
secondTitle: String? = nil,
|
||||
@@ -446,6 +450,7 @@ func showOpenChatAlert<Content: View>(
|
||||
profileBadge: profileBadge,
|
||||
subtitle: subtitle,
|
||||
information: information,
|
||||
secondaryInformation: secondaryInformation,
|
||||
cancelTitle: cancelTitle,
|
||||
confirmTitle: confirmTitle,
|
||||
secondTitle: secondTitle,
|
||||
|
||||
@@ -1195,8 +1195,8 @@ private func showPrepareGroupAlert(
|
||||
information: ownerVerificationMessage(ownerVerification),
|
||||
cancelTitle: NSLocalizedString("Cancel", comment: "new chat action"),
|
||||
confirmTitle: isChannel
|
||||
? NSLocalizedString("Open new channel", comment: "new chat action")
|
||||
: NSLocalizedString("Open new group", comment: "new chat action"),
|
||||
? NSLocalizedString("Open channel", comment: "new chat action")
|
||||
: NSLocalizedString("Open group", comment: "new chat action"),
|
||||
secondTitle: connectOtherButton,
|
||||
onCancel: { cleanup?() },
|
||||
onConfirm: {
|
||||
@@ -1259,6 +1259,20 @@ private func showOpenKnownContactAlert(
|
||||
)
|
||||
}
|
||||
|
||||
private func memberRoleInformation(_ role: GroupMemberRole, isChannel: Bool) -> String {
|
||||
switch role {
|
||||
case .observer: isChannel
|
||||
? NSLocalizedString("You are a subscriber", comment: "new chat alert")
|
||||
: NSLocalizedString("You are an observer", comment: "new chat alert")
|
||||
case .moderator: NSLocalizedString("You are a moderator", comment: "new chat alert")
|
||||
case .admin: NSLocalizedString("You are an admin", comment: "new chat alert")
|
||||
case .owner: NSLocalizedString("You are an owner", comment: "new chat alert")
|
||||
default: isChannel
|
||||
? NSLocalizedString("You are a contributor", comment: "new chat alert")
|
||||
: NSLocalizedString("You are a member", comment: "new chat alert")
|
||||
}
|
||||
}
|
||||
|
||||
private func showOpenKnownGroupAlert(
|
||||
_ groupInfo: GroupInfo,
|
||||
theme: AppTheme,
|
||||
@@ -1278,18 +1292,16 @@ private func showOpenKnownGroupAlert(
|
||||
),
|
||||
theme: theme,
|
||||
subtitle: groupInfo.useRelays ? subscriberCount : nil,
|
||||
information: groupInfo.nextConnectPrepared || groupInfo.businessChat != nil
|
||||
? nil
|
||||
: memberRoleInformation(groupInfo.membership.memberRole, isChannel: groupInfo.useRelays),
|
||||
secondaryInformation: true,
|
||||
cancelTitle: NSLocalizedString("Cancel", comment: "new chat action"),
|
||||
confirmTitle:
|
||||
groupInfo.useRelays
|
||||
? ( groupInfo.nextConnectPrepared
|
||||
? NSLocalizedString("Open new channel", comment: "new chat action")
|
||||
: NSLocalizedString("Open channel", comment: "new chat action")
|
||||
)
|
||||
? NSLocalizedString("Open channel", comment: "new chat action")
|
||||
: groupInfo.businessChat == nil
|
||||
? ( groupInfo.nextConnectPrepared
|
||||
? NSLocalizedString("Open new group", comment: "new chat action")
|
||||
: NSLocalizedString("Open group", comment: "new chat action")
|
||||
)
|
||||
? NSLocalizedString("Open group", comment: "new chat action")
|
||||
: ( groupInfo.nextConnectPrepared
|
||||
? NSLocalizedString("Open new chat", comment: "new chat action")
|
||||
: NSLocalizedString("Open chat", comment: "new chat action")
|
||||
|
||||
@@ -802,6 +802,8 @@ private func saveAddressSettings(_ settings: AddressSettingsState, _ savedSettin
|
||||
}
|
||||
}
|
||||
|
||||
private let simplexNameSaleStart = Calendar(identifier: .gregorian).date(from: DateComponents(timeZone: TimeZone(identifier: "UTC"), year: 2026, month: 12, day: 12, hour: 18))!
|
||||
|
||||
struct SetSimplexDomainView: View {
|
||||
let title: LocalizedStringKey
|
||||
let footer: LocalizedStringKey
|
||||
@@ -815,6 +817,8 @@ struct SetSimplexDomainView: View {
|
||||
@State private var original = ""
|
||||
@State private var didSave = false
|
||||
@State private var editing = false
|
||||
@State private var timeToSaleStart = simplexNameSaleStart.timeIntervalSinceNow
|
||||
@State private var saleTimer: Timer? = nil
|
||||
@FocusState private var nameFocused: Bool
|
||||
|
||||
init(title: LocalizedStringKey, footer: LocalizedStringKey, prompt: String, simplexName: String, broadcastWarning: String? = nil, save: @escaping (String?) async -> Bool) {
|
||||
@@ -873,7 +877,7 @@ struct SetSimplexDomainView: View {
|
||||
Section {
|
||||
if editing {
|
||||
Button {
|
||||
openBrowserAlert(uri: "https://github.com/simplex-chat/simplex-chat/blob/master/docs/guide/register-simplex-name.md")
|
||||
openBrowserAlert(uri: "https://simplex.domains/#testing")
|
||||
} label: {
|
||||
HStack {
|
||||
Text("How to register a test name")
|
||||
@@ -901,15 +905,39 @@ struct SetSimplexDomainView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
Section {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(verbatim: saleCountdown(timeToSaleStart))
|
||||
Text(timeToSaleStart > 0 ? "until you can register a SimpleX domain" : "Update the app to register a SimpleX domain")
|
||||
.font(.caption)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
} header: {
|
||||
Text("SimpleX name sale starts in")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
} footer: {
|
||||
Text("Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
.padding(.bottom)
|
||||
}
|
||||
}
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.navigationTitle(title)
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.onAppear {
|
||||
if editing {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { nameFocused = true }
|
||||
}
|
||||
if timeToSaleStart > 0 {
|
||||
saleTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { t in
|
||||
timeToSaleStart = simplexNameSaleStart.timeIntervalSinceNow
|
||||
if timeToSaleStart <= 0 { t.invalidate() }
|
||||
}
|
||||
}
|
||||
}
|
||||
.onDisappear {
|
||||
saleTimer?.invalidate()
|
||||
saleTimer = nil
|
||||
if !didSave, !saving, changed, isValid {
|
||||
let domain = normalized(simplexName)
|
||||
let saveName = save
|
||||
@@ -948,6 +976,21 @@ struct SetSimplexDomainView: View {
|
||||
: addSimplexTLD((t.hasPrefix("@") || t.hasPrefix("#") ? String(t.dropFirst()) : t).lowercased())
|
||||
}
|
||||
|
||||
private func saleCountdown(_ remaining: TimeInterval) -> String {
|
||||
let total = max(0, Int(remaining))
|
||||
let days = total / 86400
|
||||
let dayStr = String.localizedStringWithFormat(
|
||||
days == 1
|
||||
? NSLocalizedString("%d day", comment: "time interval")
|
||||
: NSLocalizedString("%d days", comment: "time interval"),
|
||||
days
|
||||
)
|
||||
return dayStr + " " + String.localizedStringWithFormat(
|
||||
NSLocalizedString("%02d hrs %02d min %02d sec", comment: "countdown"),
|
||||
total / 3600 % 24, total / 60 % 60, total % 60
|
||||
)
|
||||
}
|
||||
|
||||
private func addSimplexTLD(_ d: String) -> String {
|
||||
if d.contains(".") { d } else { "\(d).simplex" }
|
||||
}
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -152,6 +156,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d дни</target>
|
||||
@@ -2603,6 +2611,10 @@ This is your own one-time link!</source>
|
||||
<target>Линкът се създава…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6311,18 +6323,10 @@ alert button</note>
|
||||
<target>Отвори миграцията към друго устройство</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -8287,6 +8291,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Еднократна покана за SimpleX</target>
|
||||
@@ -9325,6 +9333,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<source>Update settings?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -9841,6 +9853,23 @@ alert title</note>
|
||||
<target>Вече имате чат профил със същото име. Моля, изберете друго име.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Вие сте член</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Вече сте вече свързани с %@.</target>
|
||||
@@ -9882,6 +9911,21 @@ Repeat join request?</source>
|
||||
Изпрати отново заявката за присъединяване?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Вие сте админ</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Вие сте наблюдател</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Вие сте собственик</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -10815,6 +10859,10 @@ pref value</note>
|
||||
<target>препратено</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<note>shown on group welcome message</note>
|
||||
@@ -11194,9 +11242,9 @@ time to disappear</note>
|
||||
<target>запазено</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>запазено от %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>запазено от</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -11286,6 +11334,10 @@ last received msg: %2$@</source>
|
||||
<source>unprotected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -152,6 +156,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d dní</target>
|
||||
@@ -2499,6 +2507,10 @@ Toto je váš vlastní jednorázový odkaz!</target>
|
||||
<source>Creating link…</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6120,18 +6132,10 @@ alert button</note>
|
||||
<source>Open migration to another device</source>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -8056,6 +8060,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Jednorázová pozvánka SimpleX</target>
|
||||
@@ -9074,6 +9082,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
|
||||
<source>Update settings?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -9567,6 +9579,23 @@ alert title</note>
|
||||
<target>Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Jste člen</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Již jste připojeni k %@.</target>
|
||||
@@ -9601,6 +9630,21 @@ alert title</note>
|
||||
Repeat join request?</source>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Jste správce</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Jste pozorovatel</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Jste vlastník</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -10519,6 +10563,10 @@ pref value</note>
|
||||
<source>forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<note>shown on group welcome message</note>
|
||||
@@ -10892,8 +10940,8 @@ time to disappear</note>
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -10978,6 +11026,10 @@ last received msg: %2$@</source>
|
||||
<source>unprotected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ hat SimpleX Chat unterstützt. Das Abzeichen ist am %2$@ abgelaufen.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d Tage</target>
|
||||
@@ -2715,6 +2723,10 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Link wird erstellt…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6744,21 +6756,11 @@ alert button</note>
|
||||
<target>Migration auf ein anderes Gerät öffnen</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Neuen Kanal öffnen</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Neuen Chat öffnen</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Neue Gruppe öffnen</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Zum Akzeptieren öffnen</target>
|
||||
@@ -8945,6 +8947,10 @@ copied message info</note>
|
||||
<target>SimpleX-Name ist nicht verifiziert</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX-Einmal-Einladung</target>
|
||||
@@ -10098,6 +10104,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
|
||||
<target>Einstellungen aktualisieren?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Aktualisierte Nutzungsbedingungen</target>
|
||||
@@ -10664,6 +10674,26 @@ alert title</note>
|
||||
<target>Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>Sie sind Mitwirkender</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Sie sind Mitglied</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Sie sind Moderator</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>Sie sind Abonnent</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Sie sind bereits mit %@ verbunden.</target>
|
||||
@@ -10706,6 +10736,21 @@ Repeat join request?</source>
|
||||
Verbindungsanfrage wiederholen?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Sie sind Admin</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Sie sind Beobachter</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Sie sind Eigentümer</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten dieser Verbindung genutzt wird.</target>
|
||||
@@ -11708,6 +11753,10 @@ pref value</note>
|
||||
<target>weitergeleitet</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>Gruppe</target>
|
||||
@@ -12116,9 +12165,9 @@ time to disappear</note>
|
||||
<target>abgespeichert</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>abgespeichert von %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>abgespeichert von</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12215,6 +12264,10 @@ Zuletzt empfangene Nachricht: %2$@</target>
|
||||
<target>Ungeschützt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>Kanalprofil aktualisiert</target>
|
||||
|
||||
@@ -40,6 +40,11 @@
|
||||
<target>%1$@ supported SimpleX Chat. The badge expired on %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<target>%1$02d hrs %2$02d min %3$02d sec</target>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +160,11 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<target>%d day</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d days</target>
|
||||
@@ -2715,6 +2725,11 @@ This is your own one-time link!</target>
|
||||
<target>Creating link…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<target>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<target>Crowdfunding on Wefunder</target>
|
||||
@@ -6747,21 +6762,11 @@ alert button</note>
|
||||
<target>Open migration to another device</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Open new channel</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Open new chat</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Open new group</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Open to accept</target>
|
||||
@@ -8948,6 +8953,11 @@ copied message info</note>
|
||||
<target>SimpleX name not verified</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<target>SimpleX name sale starts in</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX one-time invitation</target>
|
||||
@@ -10101,6 +10111,11 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>Update settings?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<target>Update the app to register a SimpleX domain</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Updated conditions</target>
|
||||
@@ -10667,6 +10682,26 @@ alert title</note>
|
||||
<target>You already have a chat profile with the same display name. Please choose another name.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>You are a contributor</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>You are a member</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>You are a moderator</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>You are a subscriber</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>You are already connected to %@.</target>
|
||||
@@ -10709,6 +10744,21 @@ Repeat join request?</source>
|
||||
Repeat join request?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>You are an admin</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>You are an observer</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>You are an owner</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>You are connected to the server used to receive messages from this connection.</target>
|
||||
@@ -11713,6 +11763,11 @@ pref value</note>
|
||||
<target>forwarded</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<target>forwarded from</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>group</target>
|
||||
@@ -12121,9 +12176,9 @@ time to disappear</note>
|
||||
<target>saved</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>saved from %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>saved from</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12220,6 +12275,11 @@ last received msg: %2$@</target>
|
||||
<target>unprotected</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<target>until you can register a SimpleX domain</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>updated channel profile</target>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ ha apoyado a SimpleX Chat. La insignia caducó el %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d día(s)</target>
|
||||
@@ -2715,6 +2723,10 @@ This is your own one-time link!</source>
|
||||
<target>Creando enlace…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6744,21 +6756,11 @@ alert button</note>
|
||||
<target>Abrir menú migración a otro dispositivo</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Abrir canal nuevo</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Abrir chat nuevo</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Abrir grupo nuevo</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Abrir para aceptar</target>
|
||||
@@ -8945,6 +8947,10 @@ copied message info</note>
|
||||
<target>Nombre SimpleX no verificado</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Invitación SimpleX de un uso</target>
|
||||
@@ -10098,6 +10104,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
|
||||
<target>¿Actualizar configuración?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Condiciones actualizadas</target>
|
||||
@@ -10664,6 +10674,26 @@ alert title</note>
|
||||
<target>Ya tienes un perfil con este nombre mostrado. Por favor, elige otro nombre.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>Eres colaborador</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Eres miembro</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Eres moderador</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>Eres suscriptor</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Ya estás conectado con %@.</target>
|
||||
@@ -10706,6 +10736,21 @@ Repeat join request?</source>
|
||||
¿Repetir solicitud de admisión?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Eres administrador</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Eres observador</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Eres propietario</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Estás conectado al servidor usado para recibir mensajes de esta conexión.</target>
|
||||
@@ -11708,6 +11753,10 @@ pref value</note>
|
||||
<target>reenviado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>grupo</target>
|
||||
@@ -12116,9 +12165,9 @@ time to disappear</note>
|
||||
<target>guardado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>Guardado desde %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>Guardado desde</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12215,6 +12264,10 @@ last received msg: %2$@</source>
|
||||
<target>desprotegida</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>perfil del canal actualizado</target>
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>% @</target>
|
||||
@@ -144,6 +148,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d päivää</target>
|
||||
@@ -2386,6 +2394,10 @@ This is your own one-time link!</source>
|
||||
<source>Creating link…</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6000,18 +6012,10 @@ alert button</note>
|
||||
<source>Open migration to another device</source>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -7935,6 +7939,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX-kertakutsu</target>
|
||||
@@ -8948,6 +8956,10 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote
|
||||
<source>Update settings?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -9441,6 +9453,23 @@ alert title</note>
|
||||
<target>Sinulla on jo keskusteluprofiili samalla näyttönimellä. Valitse toinen nimi.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Olet jäsen</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Olet jo muodostanut yhteyden %@:n kanssa.</target>
|
||||
@@ -9475,6 +9504,21 @@ alert title</note>
|
||||
Repeat join request?</source>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Olet ylläpitäjä</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Olet tarkkailija</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Olet omistaja</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -10391,6 +10435,10 @@ pref value</note>
|
||||
<source>forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<note>shown on group welcome message</note>
|
||||
@@ -10764,8 +10812,8 @@ time to disappear</note>
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -10850,6 +10898,10 @@ last received msg: %2$@</source>
|
||||
<source>unprotected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ a soutenu SimpleX Chat. Le badge a expiré le %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@ :</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d jours</target>
|
||||
@@ -2715,6 +2723,10 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Création d'un lien…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6744,21 +6756,11 @@ alert button</note>
|
||||
<target>Ouvrir le transfert vers un autre appareil</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Ouvrir un nouveau canal</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Ouvrir une nouvelle conversation</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Ouvrir le nouveau groupe</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Ouvrir pour accepter</target>
|
||||
@@ -8945,6 +8947,10 @@ copied message info</note>
|
||||
<target>Nom SimpleX non vérifié</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Invitation unique SimpleX</target>
|
||||
@@ -10098,6 +10104,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
|
||||
<target>Mettre à jour les paramètres ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Conditions mises à jour</target>
|
||||
@@ -10664,6 +10674,26 @@ alert title</note>
|
||||
<target>Vous avez déjà un profil de messagerie avec le même nom d’affichage. Veuillez choisir un autre nom.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>Vous êtes contributeur</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Vous êtes membre</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Vous êtes modérateur</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>Vous êtes abonné·e</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Vous êtes déjà connecté·e à %@ via ce lien.</target>
|
||||
@@ -10706,6 +10736,21 @@ Repeat join request?</source>
|
||||
Répéter la demande d'adhésion ?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Vous êtes admin</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Vous êtes observateur</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Vous êtes propriétaire</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Vous êtes connecté au serveur utilisé pour recevoir les messages de cette connexion.</target>
|
||||
@@ -11708,6 +11753,10 @@ pref value</note>
|
||||
<target>transféré</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>groupe</target>
|
||||
@@ -12116,9 +12165,9 @@ time to disappear</note>
|
||||
<target>enregistré</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>enregistré à partir de %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>enregistré à partir de</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12215,6 +12264,10 @@ dernier message reçu : %2$@</target>
|
||||
<target>non protégé</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>profil du canal mis à jour</target>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ támogatta a SimpleX Chatet. A kitűző lejárt ekkor: %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d nap</target>
|
||||
@@ -2715,6 +2723,10 @@ Ez a saját egyszer használható meghívója!</target>
|
||||
<target>Hivatkozás létrehozása…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6744,21 +6756,11 @@ alert button</note>
|
||||
<target>Átköltöztetés indítása egy másik eszközre</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Új csatorna megnyitása</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Új csevegés megnyitása</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Új csoport megnyitása</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Megnyitás az elfogadáshoz</target>
|
||||
@@ -8945,6 +8947,10 @@ copied message info</note>
|
||||
<target>Nincs ellenőrizve a SimpleX-név</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Egyszer használható SimpleX meghívó</target>
|
||||
@@ -10098,6 +10104,10 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
|
||||
<target>Frissíti a beállításokat?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Frissített feltételek</target>
|
||||
@@ -10664,6 +10674,26 @@ alert title</note>
|
||||
<target>Már van egy csevegési profil ugyanezzel a megjelenítendő névvel. Válasszon egy másik nevet.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>Ön közreműködő</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Ön tag</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Ön moderátor</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>Ön feliratkozó</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Ön már kapcsolódott a következőhöz: %@.</target>
|
||||
@@ -10706,6 +10736,21 @@ Repeat join request?</source>
|
||||
Megismétli a csatlakozási kérést?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Ön adminisztrátor</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Ön megfigyelő</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Ön tulajdonos</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Ön kapcsolódott ahhoz a kiszolgálóhoz, amely az adott partnerétől érkező üzenetek fogadására szolgál.</target>
|
||||
@@ -11708,6 +11753,10 @@ pref value</note>
|
||||
<target>továbbított</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>csoport</target>
|
||||
@@ -12116,9 +12165,9 @@ time to disappear</note>
|
||||
<target>mentett</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>mentve innen: %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>mentve innen:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12215,6 +12264,10 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
<target>nem védett</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>frissítette a csatorna profilját</target>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ ha sostenuto SimpleX Chat. La targhetta è scaduta il %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d giorni</target>
|
||||
@@ -2715,6 +2723,10 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Creazione link…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6744,21 +6756,11 @@ alert button</note>
|
||||
<target>Apri migrazione ad un altro dispositivo</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Apri il nuovo canale</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Apri la nuova chat</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Apri il nuovo gruppo</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Apri per accettare</target>
|
||||
@@ -8945,6 +8947,10 @@ copied message info</note>
|
||||
<target>Nome SimpleX non verificato</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Invito SimpleX una tantum</target>
|
||||
@@ -10098,6 +10104,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
|
||||
<target>Aggiornare le impostazioni?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Condizioni aggiornate</target>
|
||||
@@ -10664,6 +10674,26 @@ alert title</note>
|
||||
<target>Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>Sei un collaboratore</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Sei un membro</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Sei un moderatore</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>Sei iscritto/a</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Sei già connesso/a a %@.</target>
|
||||
@@ -10706,6 +10736,21 @@ Repeat join request?</source>
|
||||
Ripetere la richiesta di ingresso?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Sei un amministratore</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Sei un osservatore</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Sei un proprietario</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Sei connesso/a al server usato per ricevere messaggi da questa connessione.</target>
|
||||
@@ -11708,6 +11753,10 @@ pref value</note>
|
||||
<target>inoltrato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>gruppo</target>
|
||||
@@ -12116,9 +12165,9 @@ time to disappear</note>
|
||||
<target>salvato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>salvato da %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>salvato da</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12215,6 +12264,10 @@ ultimo msg ricevuto: %2$@</target>
|
||||
<target>non protetto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>profilo del canale aggiornato</target>
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -152,6 +156,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d 日</target>
|
||||
@@ -2491,6 +2499,10 @@ This is your own one-time link!</source>
|
||||
<source>Creating link…</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6120,18 +6132,10 @@ alert button</note>
|
||||
<source>Open migration to another device</source>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -8048,6 +8052,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX使い捨て招待リンク</target>
|
||||
@@ -9061,6 +9069,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<source>Update settings?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -9554,6 +9566,23 @@ alert title</note>
|
||||
<target>同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>あなたはメンバーです</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>すでに %@ に接続されています。</target>
|
||||
@@ -9588,6 +9617,21 @@ alert title</note>
|
||||
Repeat join request?</source>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>あなたは管理者です</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>あなたはオブザーバーです</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>あなたはオーナーです</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -10506,6 +10550,10 @@ pref value</note>
|
||||
<source>forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<note>shown on group welcome message</note>
|
||||
@@ -10879,8 +10927,8 @@ time to disappear</note>
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -10965,6 +11013,10 @@ last received msg: %2$@</source>
|
||||
<source>unprotected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -152,6 +156,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d dagen</target>
|
||||
@@ -2603,6 +2611,10 @@ Dit is uw eigen eenmalige link!</target>
|
||||
<target>Link maken…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6508,18 +6520,10 @@ alert button</note>
|
||||
<target>Open de migratie naar een ander apparaat</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -8613,6 +8617,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Eenmalige SimpleX uitnodiging</target>
|
||||
@@ -9705,6 +9713,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
|
||||
<target>Instellingen actualiseren?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Bijgewerkte voorwaarden</target>
|
||||
@@ -10248,6 +10260,24 @@ alert title</note>
|
||||
<target>Je hebt al een chatprofiel met dezelfde weergave naam. Kies een andere naam.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Je bent lid</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Je bent moderator</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>U bent al verbonden met %@.</target>
|
||||
@@ -10290,6 +10320,21 @@ Repeat join request?</source>
|
||||
Deelnameverzoek herhalen?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Je bent beheerder</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Je bent waarnemer</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Je bent eigenaar</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -11254,6 +11299,10 @@ pref value</note>
|
||||
<target>doorgestuurd</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<note>shown on group welcome message</note>
|
||||
@@ -11651,9 +11700,9 @@ time to disappear</note>
|
||||
<target>opgeslagen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>opgeslagen van %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>opgeslagen van</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -11749,6 +11798,10 @@ laatst ontvangen bericht: %2$@</target>
|
||||
<target>onbeschermd</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -152,6 +156,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d dni</target>
|
||||
@@ -2622,6 +2630,10 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Tworzenie linku…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6565,20 +6577,11 @@ alert button</note>
|
||||
<target>Otwórz migrację na innym urządzeniu</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Otwórz nowy czat</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Otwórz nową grupę</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Otwórz by zaakceptować</target>
|
||||
@@ -8699,6 +8702,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Zaproszenie jednorazowe SimpleX</target>
|
||||
@@ -9805,6 +9812,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
|
||||
<target>Zaktualizować ustawienia?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Zaktualizowane warunki</target>
|
||||
@@ -10357,6 +10368,24 @@ alert title</note>
|
||||
<target>Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Jesteś członkiem</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Jesteś moderatorem</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Jesteś już połączony z %@.</target>
|
||||
@@ -10399,6 +10428,21 @@ Repeat join request?</source>
|
||||
Powtórzyć prośbę dołączenia?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Jesteś administratorem</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Jesteś obserwatorem</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Jesteś właścicielem</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Jesteś połączony z serwerem służącym do odbierania wiadomości z tego połączenia.</target>
|
||||
@@ -11374,6 +11418,10 @@ pref value</note>
|
||||
<target>przekazane dalej</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>grupa</target>
|
||||
@@ -11776,9 +11824,9 @@ time to disappear</note>
|
||||
<target>zapisane</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>zapisane od %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>zapisane od</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -11874,6 +11922,10 @@ ostatnia otrzymana wiadomość: %2$@</target>
|
||||
<target>niezabezpieczony</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ поддерживал(а) SimpleX Chat. Срок действия значка истёк %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d дней</target>
|
||||
@@ -2715,6 +2723,10 @@ This is your own one-time link!</source>
|
||||
<target>Создаётся ссылка…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6743,21 +6755,11 @@ alert button</note>
|
||||
<target>Открытие миграции на другое устройство</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>Открыть новый канал</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Открыть новый чат</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Открыть новую группу</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Откройте чтобы принять</target>
|
||||
@@ -8944,6 +8946,10 @@ copied message info</note>
|
||||
<target>SimpleX имя не проверено</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX одноразовая ссылка</target>
|
||||
@@ -10097,6 +10103,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="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Обновлённые условия</target>
|
||||
@@ -10663,6 +10673,26 @@ alert title</note>
|
||||
<target>У Вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<target>Вы соавтор</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Вы член группы</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Вы модератор</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>Вы подписчик</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Вы уже соединены с контактом %@.</target>
|
||||
@@ -10705,6 +10735,21 @@ Repeat join request?</source>
|
||||
Повторить запрос на вступление?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Вы админ</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Вы читатель</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Вы владелец</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>Вы подключены к серверу, используемому для приёма сообщений от этого соединения.</target>
|
||||
@@ -11707,6 +11752,10 @@ pref value</note>
|
||||
<target>переслано</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>группа</target>
|
||||
@@ -12115,9 +12164,9 @@ time to disappear</note>
|
||||
<target>сохранено</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>сохранено из %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>сохранено из</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12214,6 +12263,10 @@ last received msg: %2$@</source>
|
||||
<target>незащищённый</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>обновил профиль канала</target>
|
||||
|
||||
@@ -36,6 +36,10 @@
|
||||
<source>%1$@ supported SimpleX Chat. The badge expired on %2$@.</source>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -139,6 +143,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d วัน</target>
|
||||
@@ -2375,6 +2383,10 @@ This is your own one-time link!</source>
|
||||
<source>Creating link…</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5979,18 +5991,10 @@ alert button</note>
|
||||
<source>Open migration to another device</source>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -7907,6 +7911,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>คำเชิญ SimpleX แบบครั้งเดียว</target>
|
||||
@@ -8918,6 +8926,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<source>Update settings?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -9409,6 +9421,23 @@ alert title</note>
|
||||
<target>คุณมีโปรไฟล์แชทที่ใช้ชื่อแสดงเดียวกันอยู่แล้ว กรุณาเลือกชื่ออื่น</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>คุณเป็นสมาชิก</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>คุณได้เชื่อมต่อกับ %@ แล้ว</target>
|
||||
@@ -9443,6 +9472,21 @@ alert title</note>
|
||||
Repeat join request?</source>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>คุณเป็นผู้ดูแลระบบ</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>คุณเป็นผู้สังเกตการณ์</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>คุณเป็นเจ้าของ</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -10356,6 +10400,10 @@ pref value</note>
|
||||
<source>forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<note>shown on group welcome message</note>
|
||||
@@ -10729,8 +10777,8 @@ time to disappear</note>
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -10815,6 +10863,10 @@ last received msg: %2$@</source>
|
||||
<source>unprotected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@, SimpleX Chat'i destekledi. Rozetin süresi %2$@ tarihinde doldu.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d gün</target>
|
||||
@@ -2633,6 +2641,10 @@ Bu senin kendi tek kullanımlık bağlantın!</target>
|
||||
<target>Link oluşturuluyor…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6561,20 +6573,11 @@ alert button</note>
|
||||
<target>Başka bir cihaza açık geçiş</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Yeni sohbet aç</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Yeni grup aç</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Kabul etmek için aç</target>
|
||||
@@ -8689,6 +8692,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX tek kullanımlık davet</target>
|
||||
@@ -9791,6 +9798,10 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec
|
||||
<target>Ayarları güncelleyelim mi?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Güncellenmiş koşullar</target>
|
||||
@@ -10342,6 +10353,24 @@ alert title</note>
|
||||
<target>Aynı görünen ada sahip bir konuşma profilin zaten var. Lütfen başka bir ad seç.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Üyesiniz</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Moderatörsünüz</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Zaten %@'a bağlısınız.</target>
|
||||
@@ -10384,6 +10413,21 @@ Repeat join request?</source>
|
||||
Katılma isteği tekrarlansın mı?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Yöneticisiniz</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Gözlemcisiniz</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Sahipsiniz</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -11354,6 +11398,10 @@ pref value</note>
|
||||
<target>iletildi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>grup</target>
|
||||
@@ -11755,9 +11803,9 @@ time to disappear</note>
|
||||
<target>kaydedildi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>%@ tarafından kaydedildi</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>kaydedildi:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -11853,6 +11901,10 @@ son alınan msj: %2$@</target>
|
||||
<target>korumasız</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ підтримував SimpleX Chat. Термін дії значка вичерпався %2$@.</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d днів</target>
|
||||
@@ -2654,6 +2662,10 @@ This is your own one-time link!</source>
|
||||
<target>Створення посилання…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6573,20 +6585,11 @@ alert button</note>
|
||||
<target>Відкрита міграція на інший пристрій</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>Відкрити новий чат</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>Відкрити нову групу</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>Відкрити для прийняття</target>
|
||||
@@ -8699,6 +8702,10 @@ copied message info</note>
|
||||
<source>SimpleX name not verified</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>Одноразове запрошення SimpleX</target>
|
||||
@@ -9799,6 +9806,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="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>Оновлені умови</target>
|
||||
@@ -10350,6 +10361,24 @@ alert title</note>
|
||||
<target>Ви вже маєте профіль у чаті з таким самим іменем. Будь ласка, виберіть інше ім'я.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>Ви учасник</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>Ви модератор</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>Ви вже підключені до %@.</target>
|
||||
@@ -10392,6 +10421,21 @@ Repeat join request?</source>
|
||||
Повторити запит на приєднання?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>Ви адмін</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>Ви спостерігач</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>Ви власник</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<note>subscription status explanation</note>
|
||||
@@ -11362,6 +11406,10 @@ pref value</note>
|
||||
<target>переслано</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>група</target>
|
||||
@@ -11762,9 +11810,9 @@ time to disappear</note>
|
||||
<target>збережено</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>збережено з %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>збережено з</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -11860,6 +11908,10 @@ last received msg: %2$@</source>
|
||||
<target>незахищені</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<note>rcv group event chat item</note>
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
<target>%1$@ 曾是 SimpleX Chat 支持者。徽章已于 %2$@ 过期。</target>
|
||||
<note>badge alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%02d hrs %02d min %02d sec" xml:space="preserve">
|
||||
<source>%1$02d hrs %2$02d min %3$02d sec</source>
|
||||
<note>countdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<source>%@</source>
|
||||
<target>%@</target>
|
||||
@@ -155,6 +159,10 @@
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d day" xml:space="preserve">
|
||||
<source>%d day</source>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<source>%d days</source>
|
||||
<target>%d 天</target>
|
||||
@@ -2710,6 +2718,10 @@ This is your own one-time link!</source>
|
||||
<target>创建链接中…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)" xml:space="preserve">
|
||||
<source>Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Crowdfunding on Wefunder" xml:space="preserve">
|
||||
<source>Crowdfunding on Wefunder</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6725,21 +6737,11 @@ alert button</note>
|
||||
<target>打开迁移到另一台设备</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new channel" xml:space="preserve">
|
||||
<source>Open new channel</source>
|
||||
<target>打开新频道</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new chat" xml:space="preserve">
|
||||
<source>Open new chat</source>
|
||||
<target>打开新聊天</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open new group" xml:space="preserve">
|
||||
<source>Open new group</source>
|
||||
<target>打开新群</target>
|
||||
<note>new chat action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Open to accept" xml:space="preserve">
|
||||
<source>Open to accept</source>
|
||||
<target>打开以接受</target>
|
||||
@@ -8913,6 +8915,10 @@ copied message info</note>
|
||||
<target>SimpleX 名称未验证</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX name sale starts in" xml:space="preserve">
|
||||
<source>SimpleX name sale starts in</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
<source>SimpleX one-time invitation</source>
|
||||
<target>SimpleX 一次性邀请</target>
|
||||
@@ -10056,6 +10062,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="Update the app to register a SimpleX domain" xml:space="preserve">
|
||||
<source>Update the app to register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Updated conditions" xml:space="preserve">
|
||||
<source>Updated conditions</source>
|
||||
<target>条款已更新</target>
|
||||
@@ -10620,6 +10630,25 @@ alert title</note>
|
||||
<target>您已经有一个显示名相同的聊天资料。请选择另一个名字。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a contributor" xml:space="preserve">
|
||||
<source>You are a contributor</source>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a member" xml:space="preserve">
|
||||
<source>You are a member</source>
|
||||
<target>你是成员</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a moderator" xml:space="preserve">
|
||||
<source>You are a moderator</source>
|
||||
<target>你是协管</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are a subscriber" xml:space="preserve">
|
||||
<source>You are a subscriber</source>
|
||||
<target>你是订阅者</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connected to %@." xml:space="preserve">
|
||||
<source>You are already connected to %@.</source>
|
||||
<target>您已经连接到 %@。</target>
|
||||
@@ -10662,6 +10691,21 @@ Repeat join request?</source>
|
||||
重复加入请求?</target>
|
||||
<note>new chat sheet title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an admin" xml:space="preserve">
|
||||
<source>You are an admin</source>
|
||||
<target>你是管理员</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an observer" xml:space="preserve">
|
||||
<source>You are an observer</source>
|
||||
<target>你是观察者</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are an owner" xml:space="preserve">
|
||||
<source>You are an owner</source>
|
||||
<target>你是群主</target>
|
||||
<note>new chat alert</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this connection." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this connection.</source>
|
||||
<target>你已连接到用于接收该连接消息的服务器。</target>
|
||||
@@ -11662,6 +11706,10 @@ pref value</note>
|
||||
<target>已转发</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded from" xml:space="preserve">
|
||||
<source>forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group" xml:space="preserve">
|
||||
<source>group</source>
|
||||
<target>群</target>
|
||||
@@ -12070,9 +12118,9 @@ time to disappear</note>
|
||||
<target>已保存</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>保存自 %@</target>
|
||||
<trans-unit id="saved from" xml:space="preserve">
|
||||
<source>saved from</source>
|
||||
<target>保存自</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="search" xml:space="preserve">
|
||||
@@ -12168,6 +12216,10 @@ last received msg: %2$@</source>
|
||||
<target>未受保护</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="until you can register a SimpleX domain" xml:space="preserve">
|
||||
<source>until you can register a SimpleX domain</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="updated channel profile" xml:space="preserve">
|
||||
<source>updated channel profile</source>
|
||||
<target>频道更新了频道资料</target>
|
||||
|
||||
@@ -3516,10 +3516,10 @@ chat item action */
|
||||
"Saved" = "Запазено";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Запазено от";
|
||||
"saved from" = "запазено от";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "запазено от";
|
||||
"Saved from" = "Запазено от";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Запазено съобщение";
|
||||
@@ -4393,6 +4393,9 @@ server test failure */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Вече имате чат профил със същото име. Моля, изберете друго име.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Вие сте член";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Вече сте вече свързани с %@.";
|
||||
|
||||
@@ -4414,6 +4417,15 @@ server test failure */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Вече се присъединихте към групата!\nИзпрати отново заявката за присъединяване?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Вие сте админ";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Вие сте наблюдател";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Вие сте собственик";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Поканени сте в групата";
|
||||
|
||||
|
||||
@@ -3505,9 +3505,21 @@ server test failure */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Jste člen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Již jste připojeni k %@.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Jste správce";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Jste pozorovatel";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Jste vlastník";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Jste pozváni do skupiny";
|
||||
|
||||
|
||||
@@ -4464,15 +4464,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "Migration auf ein anderes Gerät öffnen";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "Neuen Kanal öffnen";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "Neuen Chat öffnen";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Neue Gruppe öffnen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Geräte-Einstellungen öffnen";
|
||||
|
||||
@@ -5343,10 +5337,10 @@ chat item action */
|
||||
"Saved" = "Abgespeichert";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Abgespeichert von";
|
||||
"saved from" = "abgespeichert von";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "abgespeichert von";
|
||||
"Saved from" = "Abgespeichert von";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Gespeicherte Nachricht";
|
||||
@@ -7013,6 +7007,18 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a contributor" = "Sie sind Mitwirkender";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Sie sind Mitglied";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Sie sind Moderator";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "Sie sind Abonnent";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Sie sind bereits mit %@ verbunden.";
|
||||
|
||||
@@ -7037,6 +7043,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Sie sind bereits Mitglied dieser Gruppe!\nVerbindungsanfrage wiederholen?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Sie sind Admin";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Sie sind Beobachter";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Sie sind Eigentümer";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten dieser Verbindung genutzt wird.";
|
||||
|
||||
|
||||
@@ -4464,15 +4464,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "Abrir menú migración a otro dispositivo";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "Abrir canal nuevo";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "Abrir chat nuevo";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Abrir grupo nuevo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Abrir Configuración";
|
||||
|
||||
@@ -5343,10 +5337,10 @@ chat item action */
|
||||
"Saved" = "Guardado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Guardado desde";
|
||||
"saved from" = "Guardado desde";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "Guardado desde";
|
||||
"Saved from" = "Guardado desde";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Mensaje guardado";
|
||||
@@ -7013,6 +7007,18 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Ya tienes un perfil con este nombre mostrado. Por favor, elige otro nombre.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a contributor" = "Eres colaborador";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Eres miembro";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Eres moderador";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "Eres suscriptor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Ya estás conectado con %@.";
|
||||
|
||||
@@ -7037,6 +7043,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "¡En proceso de unirte al grupo!\n¿Repetir solicitud de admisión?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Eres administrador";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Eres observador";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Eres propietario";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Estás conectado al servidor usado para recibir mensajes de esta conexión.";
|
||||
|
||||
|
||||
@@ -3141,9 +3141,21 @@ server test failure */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Sinulla on jo keskusteluprofiili samalla näyttönimellä. Valitse toinen nimi.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Olet jäsen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Olet jo muodostanut yhteyden %@:n kanssa.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Olet ylläpitäjä";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Olet tarkkailija";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Olet omistaja";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Sinut on kutsuttu ryhmään";
|
||||
|
||||
|
||||
@@ -4464,15 +4464,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "Ouvrir le transfert vers un autre appareil";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "Ouvrir un nouveau canal";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "Ouvrir une nouvelle conversation";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Ouvrir le nouveau groupe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Ouvrir les Paramètres";
|
||||
|
||||
@@ -5343,10 +5337,10 @@ chat item action */
|
||||
"Saved" = "Enregistré";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Enregistré depuis";
|
||||
"saved from" = "enregistré à partir de";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "enregistré à partir de";
|
||||
"Saved from" = "Enregistré depuis";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Message enregistré";
|
||||
@@ -7013,6 +7007,18 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Vous avez déjà un profil de messagerie avec le même nom d’affichage. Veuillez choisir un autre nom.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a contributor" = "Vous êtes contributeur";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Vous êtes membre";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Vous êtes modérateur";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "Vous êtes abonné·e";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Vous êtes déjà connecté·e à %@ via ce lien.";
|
||||
|
||||
@@ -7037,6 +7043,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Vous êtes déjà membre de ce groupe !\nRépéter la demande d'adhésion ?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Vous êtes admin";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Vous êtes observateur";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Vous êtes propriétaire";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Vous êtes connecté au serveur utilisé pour recevoir les messages de cette connexion.";
|
||||
|
||||
|
||||
@@ -4464,15 +4464,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "Átköltöztetés indítása egy másik eszközre";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "Új csatorna megnyitása";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "Új csevegés megnyitása";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Új csoport megnyitása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Beállítások megnyitása";
|
||||
|
||||
@@ -5343,10 +5337,10 @@ chat item action */
|
||||
"Saved" = "Mentett";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Mentve innen";
|
||||
"saved from" = "mentve innen:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "mentve innen:";
|
||||
"Saved from" = "Mentve innen";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Mentett üzenet";
|
||||
@@ -7013,6 +7007,18 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Már van egy csevegési profil ugyanezzel a megjelenítendő névvel. Válasszon egy másik nevet.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a contributor" = "Ön közreműködő";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Ön tag";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Ön moderátor";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "Ön feliratkozó";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Ön már kapcsolódott a következőhöz: %@.";
|
||||
|
||||
@@ -7037,6 +7043,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "A csatlakozás már folyamatban van a csoporthoz!\nMegismétli a csatlakozási kérést?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Ön adminisztrátor";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Ön megfigyelő";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Ön tulajdonos";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Ön kapcsolódott ahhoz a kiszolgálóhoz, amely az adott partnerétől érkező üzenetek fogadására szolgál.";
|
||||
|
||||
|
||||
@@ -4464,15 +4464,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "Apri migrazione ad un altro dispositivo";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "Apri il nuovo canale";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "Apri la nuova chat";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Apri il nuovo gruppo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Apri le impostazioni";
|
||||
|
||||
@@ -5343,10 +5337,10 @@ chat item action */
|
||||
"Saved" = "Salvato";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Salvato da";
|
||||
"saved from" = "salvato da";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "salvato da";
|
||||
"Saved from" = "Salvato da";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Messaggio salvato";
|
||||
@@ -7013,6 +7007,18 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a contributor" = "Sei un collaboratore";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Sei un membro";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Sei un moderatore";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "Sei iscritto/a";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Sei già connesso/a a %@.";
|
||||
|
||||
@@ -7037,6 +7043,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Stai già entrando nel gruppo!\nRipetere la richiesta di ingresso?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Sei un amministratore";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Sei un osservatore";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Sei un proprietario";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Sei connesso/a al server usato per ricevere messaggi da questa connessione.";
|
||||
|
||||
|
||||
@@ -3475,9 +3475,21 @@ server test failure */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "あなたはメンバーです";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "すでに %@ に接続されています。";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "あなたは管理者です";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "あなたはオブザーバーです";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "あなたはオーナーです";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "グループ招待が届きました";
|
||||
|
||||
|
||||
@@ -4408,10 +4408,10 @@ chat item action */
|
||||
"Saved" = "Opgeslagen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Opgeslagen van";
|
||||
"saved from" = "opgeslagen van";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "opgeslagen van";
|
||||
"Saved from" = "Opgeslagen van";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Opgeslagen bericht";
|
||||
@@ -5706,6 +5706,12 @@ server test failure */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Je hebt al een chatprofiel met dezelfde weergave naam. Kies een andere naam.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Je bent lid";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Je bent moderator";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "U bent al verbonden met %@.";
|
||||
|
||||
@@ -5730,6 +5736,15 @@ server test failure */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Je sluit je al aan bij de groep!\nDeelnameverzoek herhalen?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Je bent beheerder";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Je bent waarnemer";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Je bent eigenaar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Je bent uitgenodigd voor de groep";
|
||||
|
||||
|
||||
@@ -3900,9 +3900,6 @@ alert button */
|
||||
/* new chat action */
|
||||
"Open new chat" = "Otwórz nowy czat";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Otwórz nową grupę";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Otwórz Ustawienia";
|
||||
|
||||
@@ -4643,10 +4640,10 @@ chat item action */
|
||||
"Saved" = "Zapisane";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Zapisane od";
|
||||
"saved from" = "zapisane od";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "zapisane od";
|
||||
"Saved from" = "Zapisane od";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Zachowano wiadomość";
|
||||
@@ -6056,6 +6053,12 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Jesteś członkiem";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Jesteś moderatorem";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Jesteś już połączony z %@.";
|
||||
|
||||
@@ -6080,6 +6083,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Już dołączasz do grupy!\nPowtórzyć prośbę dołączenia?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Jesteś administratorem";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Jesteś obserwatorem";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Jesteś właścicielem";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Jesteś połączony z serwerem służącym do odbierania wiadomości z tego połączenia.";
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ Establishing contact between two SimpleX Chat users. SimpleX uses no user identi
|
||||
1. When connecting to a channel link (`GroupShortLinkInfo.direct == false`):
|
||||
2. `apiPrepareGroup(connLink:directLink:groupShortLinkData:)` is called with `directLink: false`, preparing the channel locally.
|
||||
3. `groupShortLinkInfo.groupRelays` (hostnames) stored in `ChatModel.shared.channelRelayHostnames[groupId]`.
|
||||
4. Pre-join UI shows channel icon and "Open new channel" (not "Open new group").
|
||||
4. Pre-join UI shows channel icon and "Open channel" (not "Open group").
|
||||
5. `apiConnectPreparedGroup(groupId:incognito:msg:)` returns `(GroupInfo, [RelayConnectionResult])`.
|
||||
6. `RelayConnectionResult` contains `relayMember: GroupMember` and optional `relayError: ChatError?` per relay.
|
||||
7. Relay members are upserted to `chatModel.groupMembers`; `channelRelayHostnames` entry is cleared.
|
||||
|
||||
@@ -118,10 +118,18 @@ When `planAndConnect` encounters a `.simplexLink(_, .relay, _, _)`, it shows a "
|
||||
| Context | Channel behavior | Group behavior |
|
||||
|---|---|---|
|
||||
| Prepare alert icon | `antenna.radiowaves.left.and.right.circle.fill` | `person.2.circle.fill` |
|
||||
| Prepare alert title | "Open new channel" | "Open new group" |
|
||||
| Prepare alert title | "Open channel" | "Open group" |
|
||||
| Error text | "Error opening channel" | "Error opening group" |
|
||||
| Own-link confirm | "This is your link for channel" with only "Open channel" + "Cancel" (no incognito/profile options) | Full incognito/profile selection |
|
||||
| Known group alert | "Open channel" / "Open new channel" | "Open group" / "Open new group" |
|
||||
| Known group alert | "Open channel", with the membership role line | "Open group", with the membership role line |
|
||||
|
||||
The known group alert shows an information line with the user's role, in the
|
||||
secondary color (matching the subscriber count): "You are a subscriber" /
|
||||
"You are a contributor" for channels, "You are an observer" / "You are a
|
||||
member" for groups, and "You are a moderator" / "You are an admin" /
|
||||
"You are an owner" for both. The line is omitted for prepared chats
|
||||
(`nextConnectPrepared`) and business chats, so the prepare and known alerts
|
||||
differ only by this line.
|
||||
|
||||
### Pre-Join Relay Info
|
||||
|
||||
|
||||
@@ -4464,15 +4464,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "Открытие миграции на другое устройство";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "Открыть новый канал";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "Открыть новый чат";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Открыть новую группу";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Открыть Настройки";
|
||||
|
||||
@@ -5343,10 +5337,10 @@ chat item action */
|
||||
"Saved" = "Сохранено";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Сохранено из";
|
||||
"saved from" = "сохранено из";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "сохранено из";
|
||||
"Saved from" = "Сохранено из";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Сохранённое сообщение";
|
||||
@@ -7013,6 +7007,18 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "У Вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a contributor" = "Вы соавтор";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Вы член группы";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Вы модератор";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "Вы подписчик";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Вы уже соединены с контактом %@.";
|
||||
|
||||
@@ -7037,6 +7043,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Вы уже вступаете в группу!\nПовторить запрос на вступление?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Вы админ";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Вы читатель";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Вы владелец";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "Вы подключены к серверу, используемому для приёма сообщений от этого соединения.";
|
||||
|
||||
|
||||
@@ -344,7 +344,7 @@ Similarly, in `planAndConnect()` (`NewChatView.swift`), `.simplexLink(_, .relay,
|
||||
|
||||
When `groupShortLinkInfo?.direct == false` (channel relay link), the prepare alert uses:
|
||||
- Channel icon: `antenna.radiowaves.left.and.right.circle.fill`
|
||||
- Title: "Open new channel"
|
||||
- Title: "Open channel"
|
||||
- Error: "Error opening channel"
|
||||
- `apiPrepareGroup` call passes `directLink: false`
|
||||
- Stores `groupShortLinkInfo.groupRelays` in `ChatModel.shared.channelRelayHostnames`
|
||||
@@ -355,7 +355,7 @@ For channels: shows "This is your link for channel" with only "Open channel" + "
|
||||
|
||||
### Known Group Alert (`showOpenKnownGroupAlert`)
|
||||
|
||||
For channels (`groupInfo.useRelays`): titles become "Open channel" / "Open new channel".
|
||||
For channels (`groupInfo.useRelays`): the title is "Open channel"; for groups, "Open group"; business chats keep "Open chat" / "Open new chat". Unless the chat is merely prepared (`nextConnectPrepared`) or a business chat, the alert shows an information line with the user's membership role (`memberRoleInformation`) in the secondary color: subscriber/contributor for channels, observer/member for groups, moderator/admin/owner for both.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -3045,9 +3045,21 @@ server test failure */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "คุณมีโปรไฟล์แชทที่ใช้ชื่อแสดงเดียวกันอยู่แล้ว กรุณาเลือกชื่ออื่น";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "คุณเป็นสมาชิก";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "คุณได้เชื่อมต่อกับ %@ แล้ว";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "คุณเป็นผู้ดูแลระบบ";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "คุณเป็นผู้สังเกตการณ์";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "คุณเป็นเจ้าของ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "คุณได้รับเชิญให้เข้าร่วมกลุ่ม";
|
||||
|
||||
|
||||
@@ -3886,9 +3886,6 @@ alert button */
|
||||
/* new chat action */
|
||||
"Open new chat" = "Yeni sohbet aç";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Yeni grup aç";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Ayarları aç";
|
||||
|
||||
@@ -4626,10 +4623,10 @@ chat item action */
|
||||
"Saved" = "Kaydedildi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Tarafından kaydedildi";
|
||||
"saved from" = "kaydedildi:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "kaydedildi:";
|
||||
"Saved from" = "Tarafından kaydedildi";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Kaydedilmiş mesaj";
|
||||
@@ -6009,6 +6006,12 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Aynı görünen ada sahip bir konuşma profilin zaten var. Lütfen başka bir ad seç.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Üyesiniz";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Moderatörsünüz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Zaten %@'a bağlısınız.";
|
||||
|
||||
@@ -6033,6 +6036,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Gruba zaten katılıyorsunuz!\nKatılma isteği tekrarlansın mı?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Yöneticisiniz";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Gözlemcisiniz";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Sahipsiniz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Gruba davet edildiniz";
|
||||
|
||||
|
||||
@@ -3919,9 +3919,6 @@ alert button */
|
||||
/* new chat action */
|
||||
"Open new chat" = "Відкрити новий чат";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "Відкрити нову групу";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "Відкрийте Налаштування";
|
||||
|
||||
@@ -4647,10 +4644,10 @@ chat item action */
|
||||
"Saved" = "Збережено";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Збережено з";
|
||||
"saved from" = "збережено з";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "збережено з";
|
||||
"Saved from" = "Збережено з";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Збережене повідомлення";
|
||||
@@ -6024,6 +6021,12 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Ви вже маєте профіль у чаті з таким самим іменем. Будь ласка, виберіть інше ім'я.";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "Ви учасник";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "Ви модератор";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "Ви вже підключені до %@.";
|
||||
|
||||
@@ -6048,6 +6051,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "Ви вже приєдналися до групи!\nПовторити запит на приєднання?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "Ви адмін";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "Ви спостерігач";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "Ви власник";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Запрошуємо вас до групи";
|
||||
|
||||
|
||||
@@ -4404,15 +4404,9 @@ alert button */
|
||||
/* authentication reason */
|
||||
"Open migration to another device" = "打开迁移到另一台设备";
|
||||
|
||||
/* new chat action */
|
||||
"Open new channel" = "打开新频道";
|
||||
|
||||
/* new chat action */
|
||||
"Open new chat" = "打开新聊天";
|
||||
|
||||
/* new chat action */
|
||||
"Open new group" = "打开新群";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Settings" = "打开设置";
|
||||
|
||||
@@ -5268,10 +5262,10 @@ chat item action */
|
||||
"Saved" = "已保存";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "保存自";
|
||||
"saved from" = "保存自";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from" = "保存自";
|
||||
"Saved from" = "保存自";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "已保存的消息";
|
||||
@@ -6874,6 +6868,15 @@ alert title */
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "您已经有一个显示名相同的聊天资料。请选择另一个名字。";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a member" = "你是成员";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a moderator" = "你是协管";
|
||||
|
||||
/* new chat alert */
|
||||
"You are a subscriber" = "你是订阅者";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "您已经连接到 %@。";
|
||||
|
||||
@@ -6898,6 +6901,15 @@ alert title */
|
||||
/* new chat sheet title */
|
||||
"You are already joining the group!\nRepeat join request?" = "您已经加入了这个群组!\n重复加入请求?";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an admin" = "你是管理员";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an observer" = "你是观察者";
|
||||
|
||||
/* new chat alert */
|
||||
"You are an owner" = "你是群主";
|
||||
|
||||
/* subscription status explanation */
|
||||
"You are connected to the server used to receive messages from this connection." = "你已连接到用于接收该连接消息的服务器。";
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ afterEvaluate {
|
||||
val fontLtGtRegex = Regex("[^>]*>.*<font[^>]*>.*</font>.*</string>")
|
||||
val unbracketedColorRegex = Regex("color=#[abcdefABCDEF0-9]{3,6}")
|
||||
val correctHtmlRegex = Regex("[^>]*>.*<b>.*</b>.*</string>|[^>]*>.*<i>.*</i>.*</string>|[^>]*>.*<u>.*</u>.*</string>|[^>]*>.*<font[^>]*>.*</font>.*</string>")
|
||||
val possibleFormat = listOf("s", "d", "1\$s", "2\$s", "3\$s", "4\$s", "1\$d", "2\$d", "3\$d", "4\$d", "2s", "f")
|
||||
val possibleFormat = listOf("s", "d", "1\$s", "2\$s", "3\$s", "4\$s", "1\$d", "2\$d", "3\$d", "4\$d", "1\$02d", "2\$02d", "3\$02d", "2s", "f")
|
||||
|
||||
fun String.id(): String = replace("<string name=\"", "").trim().substringBefore("\"")
|
||||
|
||||
@@ -238,7 +238,7 @@ afterEvaluate {
|
||||
if (was.length == substring.length) break
|
||||
}
|
||||
return if (formats.any { it.startsWith("1$") || it.startsWith("2$") || it.startsWith("3$") || it.startsWith("4$") }) {
|
||||
formats.sortedBy { it.trim('s', 'd', 'f', '$').toIntOrNull() ?: throw Exception("Formatting don't have positional arguments: $this \nin $filepath") }
|
||||
formats.sortedBy { it.substringBefore('$').toIntOrNull() ?: throw Exception("Formatting don't have positional arguments: $this \nin $filepath") }
|
||||
} else {
|
||||
formats
|
||||
}
|
||||
|
||||
+2
@@ -294,6 +294,7 @@ class AlertManager {
|
||||
nameCaption: String? = null,
|
||||
subtitle: String? = null,
|
||||
information: String? = null,
|
||||
secondaryInformation: Boolean = false,
|
||||
confirmText: String? = generalGetString(MR.strings.connect_plan_open_chat),
|
||||
onConfirm: (() -> Unit)? = null,
|
||||
connectOtherButton: String? = null,
|
||||
@@ -378,6 +379,7 @@ class AlertManager {
|
||||
information,
|
||||
textAlign = TextAlign.Center,
|
||||
style = MaterialTheme.typography.body2,
|
||||
color = if (secondaryInformation) MaterialTheme.colors.secondary else Color.Unspecified,
|
||||
maxLines = 3,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
+16
-3
@@ -656,11 +656,24 @@ private fun showOpenKnownGroupAlert(chatModel: ChatModel, rhId: Long?, close: ((
|
||||
},
|
||||
nameCaption = planSimplexName?.shortStr,
|
||||
subtitle = subscriberCount,
|
||||
information = if (groupInfo.nextConnectPrepared || groupInfo.businessChat != null) {
|
||||
null
|
||||
} else {
|
||||
val isChannel = groupInfo.useRelays
|
||||
generalGetString(when (groupInfo.membership.memberRole) {
|
||||
GroupMemberRole.Observer -> if (isChannel) MR.strings.connect_plan_you_are_subscriber else MR.strings.connect_plan_you_are_observer
|
||||
GroupMemberRole.Moderator -> MR.strings.connect_plan_you_are_moderator
|
||||
GroupMemberRole.Admin -> MR.strings.connect_plan_you_are_admin
|
||||
GroupMemberRole.Owner -> MR.strings.connect_plan_you_are_owner
|
||||
else -> if (isChannel) MR.strings.connect_plan_you_are_contributor else MR.strings.connect_plan_you_are_member
|
||||
})
|
||||
},
|
||||
secondaryInformation = true,
|
||||
confirmText = generalGetString(
|
||||
if (groupInfo.useRelays) {
|
||||
if (groupInfo.nextConnectPrepared) MR.strings.connect_plan_open_new_channel else MR.strings.connect_plan_open_channel
|
||||
MR.strings.connect_plan_open_channel
|
||||
} else if (groupInfo.businessChat == null) {
|
||||
if (groupInfo.nextConnectPrepared) MR.strings.connect_plan_open_new_group else MR.strings.connect_plan_open_group
|
||||
MR.strings.connect_plan_open_group
|
||||
} else {
|
||||
if (groupInfo.nextConnectPrepared) MR.strings.connect_plan_open_new_chat else MR.strings.connect_plan_open_chat
|
||||
}
|
||||
@@ -761,7 +774,7 @@ fun showPrepareGroupAlert(
|
||||
nameCaption = planSimplexName?.shortStr,
|
||||
subtitle = subscriberCount,
|
||||
information = ownerVerificationMessage(ownerVerification),
|
||||
confirmText = generalGetString(if (isChannel) MR.strings.connect_plan_open_new_channel else MR.strings.connect_plan_open_new_group),
|
||||
confirmText = generalGetString(if (isChannel) MR.strings.connect_plan_open_channel else MR.strings.connect_plan_open_group),
|
||||
onConfirm = {
|
||||
AlertManager.privacySensitive.hideAlert()
|
||||
withBGApi {
|
||||
|
||||
+43
-2
@@ -14,7 +14,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.platform.LocalClipboardManager
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.*
|
||||
import androidx.compose.ui.unit.*
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.common.ui.theme.*
|
||||
import chat.simplex.common.views.*
|
||||
@@ -24,10 +25,14 @@ import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.compose.painterResource
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.datetime.*
|
||||
|
||||
// Each dot-separated label is ASCII letters/digits with single internal hyphens (mirrors simplexmq SimplexName.hs nameLabelP).
|
||||
private val simplexNameLabelRegex = Regex("[A-Za-z0-9]+(-[A-Za-z0-9]+)*")
|
||||
|
||||
private val simplexNameSaleStart = LocalDateTime(2026, 12, 12, 18, 0).toInstant(TimeZone.UTC)
|
||||
private const val SIMPLEX_DOMAINS_URL = "https://simplex.domains/"
|
||||
|
||||
// Set the user's own (prefix "@") or a channel's (prefix "#") SimpleX name.
|
||||
// The field is prefilled with the full prefixed name; `save` receives the encoded name (or null to
|
||||
// clear) and returns true on success (it shows its own error alert otherwise).
|
||||
@@ -128,6 +133,13 @@ fun SetSimplexDomainView(
|
||||
}
|
||||
}
|
||||
|
||||
fun saleCountdown(msRemaining: Long): String {
|
||||
val total = (msRemaining / 1000).coerceAtLeast(0)
|
||||
val days = total / 86400
|
||||
val dayStr = String.format(generalGetString(if (days == 1L) MR.strings.ttl_day else MR.strings.ttl_days), days)
|
||||
return dayStr + " " + String.format(generalGetString(MR.strings.countdown_hrs_min_sec), total / 3600 % 24, total / 60 % 60, total % 60)
|
||||
}
|
||||
|
||||
ModalView(close = { onClose(close) }, cardScreen = true) {
|
||||
ColumnWithScrollBar {
|
||||
AppBarTitle(title)
|
||||
@@ -163,7 +175,7 @@ fun SetSimplexDomainView(
|
||||
SettingsActionItem(
|
||||
painterResource(MR.images.ic_open_in_new),
|
||||
stringResource(MR.strings.register_test_name),
|
||||
{ openBrowserAlert("https://github.com/simplex-chat/simplex-chat/blob/master/docs/guide/register-simplex-name.md", uriHandler) },
|
||||
{ openBrowserAlert("https://simplex.domains/#testing", uriHandler) },
|
||||
textColor = MaterialTheme.colors.primary,
|
||||
iconColor = MaterialTheme.colors.primary
|
||||
)
|
||||
@@ -179,6 +191,35 @@ fun SetSimplexDomainView(
|
||||
}
|
||||
}
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
val msToSaleStart = remember { mutableStateOf(simplexNameSaleStart.toEpochMilliseconds() - System.currentTimeMillis()) }
|
||||
LaunchedEffect(Unit) {
|
||||
while (msToSaleStart.value > 0) {
|
||||
delay(1000)
|
||||
msToSaleStart.value = simplexNameSaleStart.toEpochMilliseconds() - System.currentTimeMillis()
|
||||
}
|
||||
}
|
||||
SectionView(stringResource(MR.strings.simplex_name_sales)) {
|
||||
SectionItemView {
|
||||
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
|
||||
Text(saleCountdown(msToSaleStart.value))
|
||||
Text(
|
||||
stringResource(if (msToSaleStart.value > 0) MR.strings.until_register_simplex_domain else MR.strings.update_app_register_simplex_domain),
|
||||
color = MaterialTheme.colors.secondary,
|
||||
fontSize = 12.sp
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
SectionTextFooter(buildAnnotatedString {
|
||||
append(generalGetString(MR.strings.simplex_name_sales_footer))
|
||||
append(" ")
|
||||
withLink(LinkAnnotation.Url(SIMPLEX_DOMAINS_URL) { uriHandler.openUriCatching(SIMPLEX_DOMAINS_URL) }) {
|
||||
withStyle(SpanStyle(color = MaterialTheme.colors.primary)) {
|
||||
append("simplex.domains")
|
||||
}
|
||||
}
|
||||
})
|
||||
SectionBottomSpacer()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1219,6 +1219,13 @@
|
||||
<string name="update_network_settings_question">تحديث إعدادات الشبكة؟</string>
|
||||
<string name="updating_settings_will_reconnect_client_to_all_servers">سيؤدي تحديث الإعدادات إلى إعادة توصيل العميل بجميع الخوادم.</string>
|
||||
<string name="you_are_observer">أنت المراقب</string>
|
||||
<string name="connect_plan_you_are_observer">أنت المراقب</string>
|
||||
<string name="connect_plan_you_are_member">أنت عضو</string>
|
||||
<string name="connect_plan_you_are_moderator">أنت مُشرف</string>
|
||||
<string name="connect_plan_you_are_admin">أنت المُدير</string>
|
||||
<string name="connect_plan_you_are_owner">أنت المالك</string>
|
||||
<string name="connect_plan_you_are_subscriber">أنت مشترك</string>
|
||||
<string name="connect_plan_you_are_contributor">أنت مساهم</string>
|
||||
<string name="you_are_invited_to_group">أنت مدعو إلى المجموعة</string>
|
||||
<string name="callstate_waiting_for_confirmation">في انتظار التأكيد…</string>
|
||||
<string name="unknown_database_error_with_info">خطأ غير معروف في قاعدة البيانات: %s</string>
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
<string name="connect_plan_open_new_chat">Open new chat</string>
|
||||
<string name="connect_plan_open_group">Open group</string>
|
||||
<string name="connect_plan_open_new_group">Open new group</string>
|
||||
<string name="connect_plan_you_are_observer">You are an observer</string>
|
||||
<string name="connect_plan_you_are_member">You are a member</string>
|
||||
<string name="connect_plan_you_are_moderator">You are a moderator</string>
|
||||
<string name="connect_plan_you_are_admin">You are an admin</string>
|
||||
<string name="connect_plan_you_are_owner">You are an owner</string>
|
||||
<string name="error_parsing_uri_title">Invalid link</string>
|
||||
<string name="error_parsing_uri_desc">Please check that SimpleX link is correct.</string>
|
||||
|
||||
@@ -398,6 +403,11 @@
|
||||
<string name="get_simplex_name_beta">Get SimpleX name (BETA)</string>
|
||||
<string name="channel_simplex_name">Channel SimpleX name</string>
|
||||
<string name="register_test_name">How to register a test name</string>
|
||||
<string name="simplex_name_sales">SimpleX name sale starts in</string>
|
||||
<string name="until_register_simplex_domain">until you can register a SimpleX domain</string>
|
||||
<string name="update_app_register_simplex_domain">Update the app to register a SimpleX domain</string>
|
||||
<string name="countdown_hrs_min_sec">%1$02d hrs %2$02d min %3$02d sec</string>
|
||||
<string name="simplex_name_sales_footer">Crowdfunding investors can reserve names before the sale starts:</string>
|
||||
<string name="remove_name">Remove name</string>
|
||||
<string name="save_verb">Save</string>
|
||||
<string name="edit_verb">Edit</string>
|
||||
@@ -3171,6 +3181,8 @@
|
||||
<string name="relay_address_alert_message">This is a chat relay address, it cannot be used to connect.</string>
|
||||
<string name="connect_plan_open_channel">Open channel</string>
|
||||
<string name="connect_plan_open_new_channel">Open new channel</string>
|
||||
<string name="connect_plan_you_are_subscriber">You are a subscriber</string>
|
||||
<string name="connect_plan_you_are_contributor">You are a contributor</string>
|
||||
<string name="connect_plan_this_is_your_link_for_channel">Your channel</string>
|
||||
<string name="connect_plan_this_is_your_link_for_channel_vName"><![CDATA[This is your link for channel <b>%1$s</b>!]]></string>
|
||||
<string name="error_opening_channel">Error opening channel</string>
|
||||
|
||||
@@ -1301,6 +1301,11 @@
|
||||
<string name="auth_unlock">Отключи</string>
|
||||
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Ще трябва да се идентифицирате, когато стартирате или възобновите приложението след 30 секунди във фонов режим.</string>
|
||||
<string name="you_are_observer">вие сте наблюдател</string>
|
||||
<string name="connect_plan_you_are_observer">Вие сте наблюдател</string>
|
||||
<string name="connect_plan_you_are_member">Вие сте член</string>
|
||||
<string name="connect_plan_you_are_moderator">Вие сте модератор</string>
|
||||
<string name="connect_plan_you_are_admin">Вие сте админ</string>
|
||||
<string name="connect_plan_you_are_owner">Вие сте собственик</string>
|
||||
<string name="gallery_video_button">Видео</string>
|
||||
<string name="you_can_connect_to_simplex_chat_founder"><![CDATA[Можете да <font color="#0088ff">се свържете с разработчиците на SimpleX Chat, за да задавате въпроси и да получавате актуализации</font>;.]]></string>
|
||||
<string name="contact_wants_to_connect_with_you">иска да се свърже с вас!</string>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<string name="callstatus_accepted">কলটি গৃহীত হয়েছে</string>
|
||||
<string name="smp_servers_preset_add">পূর্বনির্ধারিত সার্ভারগুলি যুক্ত করুন</string>
|
||||
<string name="group_member_role_admin">অ্যাডমিন</string>
|
||||
<string name="connect_plan_you_are_admin">আপনি একজন অ্যাডমিন</string>
|
||||
<string name="button_add_welcome_message">স্বাগত বার্তা যুক্ত করুন</string>
|
||||
<string name="users_add">প্রোফাইল যুক্ত করুন</string>
|
||||
<string name="color_secondary_variant">আনুষঙ্গিক রং</string>
|
||||
|
||||
@@ -1715,6 +1715,11 @@
|
||||
<string name="image_decoding_exception_desc">La imatge no es pot descodificar. Si us plau, proveu amb una imatge diferent o contacteu amb els desenvolupadors.</string>
|
||||
<string name="video_decoding_exception_desc">El vídeo no es pot descodificar. Si us plau, prova amb un vídeo diferent o contacta amb els desenvolupadors.</string>
|
||||
<string name="you_are_observer">ets observador</string>
|
||||
<string name="connect_plan_you_are_observer">Ets observador</string>
|
||||
<string name="connect_plan_you_are_member">Ets membre</string>
|
||||
<string name="connect_plan_you_are_moderator">Ets moderador</string>
|
||||
<string name="connect_plan_you_are_admin">Ets administrador</string>
|
||||
<string name="connect_plan_you_are_owner">Ets propietari</string>
|
||||
<string name="observer_cant_send_message_title">ets observador(a)</string>
|
||||
<string name="observer_cant_send_message_desc">Poseu-vos en contacte amb l\'administrador del grup.</string>
|
||||
<string name="only_owners_can_enable_files_and_media">Només els propietaris del grup poden activar fitxers i mitjans.</string>
|
||||
|
||||
@@ -931,6 +931,11 @@
|
||||
<string name="moderate_verb">Moderovat</string>
|
||||
<string name="observer_cant_send_message_desc">Kontaktujte prosím správce skupiny.</string>
|
||||
<string name="you_are_observer">jste pozorovatel</string>
|
||||
<string name="connect_plan_you_are_observer">Jste pozorovatel</string>
|
||||
<string name="connect_plan_you_are_member">Jste člen</string>
|
||||
<string name="connect_plan_you_are_moderator">Jste moderátor</string>
|
||||
<string name="connect_plan_you_are_admin">Jste správce</string>
|
||||
<string name="connect_plan_you_are_owner">Jste vlastník</string>
|
||||
<string name="group_member_role_observer">pozorovatel</string>
|
||||
<string name="moderate_message_will_be_deleted_warning">Zpráva bude smazána pro všechny členy.</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Zpráva bude pro všechny členy označena jako moderovaná.</string>
|
||||
|
||||
@@ -635,6 +635,8 @@
|
||||
<string name="cant_send_message_you_left">du forlod</string>
|
||||
<string name="cant_send_message_generic">kan ikke sende beskeder</string>
|
||||
<string name="you_are_observer">du er observatør</string>
|
||||
<string name="connect_plan_you_are_observer">Du er observatør</string>
|
||||
<string name="connect_plan_you_are_admin">Du er administrator</string>
|
||||
<string name="reviewed_by_admins">gennemgået af administratorer</string>
|
||||
<string name="cant_send_message_member_has_old_version">medlemmet har en gammel version</string>
|
||||
<string name="image_descr">Billede</string>
|
||||
|
||||
@@ -1012,6 +1012,13 @@
|
||||
<string name="moderate_verb">Moderieren</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet.</string>
|
||||
<string name="you_are_observer">Sie sind Beobachter</string>
|
||||
<string name="connect_plan_you_are_observer">Sie sind Beobachter</string>
|
||||
<string name="connect_plan_you_are_member">Sie sind Mitglied</string>
|
||||
<string name="connect_plan_you_are_moderator">Sie sind Moderator</string>
|
||||
<string name="connect_plan_you_are_admin">Sie sind Admin</string>
|
||||
<string name="connect_plan_you_are_owner">Sie sind Eigentümer</string>
|
||||
<string name="connect_plan_you_are_subscriber">Sie sind Abonnent</string>
|
||||
<string name="connect_plan_you_are_contributor">Sie sind Mitwirkender</string>
|
||||
<string name="observer_cant_send_message_title">Sie sind Beobachter</string>
|
||||
<string name="group_member_role_observer">Beobachter</string>
|
||||
<string name="initial_member_role">Anfängliche Rolle</string>
|
||||
|
||||
@@ -2429,6 +2429,11 @@
|
||||
<string name="not_connected_to_server_to_receive_messages_no_sub">Δεν είσαι συνδεδεμένος στον διακομιστή που χρησιμοποιείται για τη λήψη μηνυμάτων από αυτή τη σύνδεση (δεν υπάρχει συνδρομή).</string>
|
||||
<string name="servers_info_proxied_servers_section_footer">Δεν είσαι συνδεδεμένος σε αυτούς τους διακομιστές. Για την παράδοση μηνυμάτων σε αυτούς, χρησιμοποιείται ιδιωτική δρομολόγηση.</string>
|
||||
<string name="you_are_observer">είσαι παρατηρητής</string>
|
||||
<string name="connect_plan_you_are_observer">Είσαι παρατηρητής</string>
|
||||
<string name="connect_plan_you_are_member">Είσαι μέλος</string>
|
||||
<string name="connect_plan_you_are_moderator">Είσαι διαχειριστής</string>
|
||||
<string name="connect_plan_you_are_admin">Είσαι διαχειριστής</string>
|
||||
<string name="connect_plan_you_are_owner">Είσαι ιδιοκτήτης</string>
|
||||
<string name="observer_cant_send_message_title">είσαι παρατηρητής</string>
|
||||
<string name="snd_group_event_member_blocked">μπλόκαρες %s</string>
|
||||
<string name="one_hand_ui_change_instruction">Μπορείς να το αλλάξεις στις ρυθμίσεις Εμφάνισης.</string>
|
||||
|
||||
@@ -2665,6 +2665,13 @@
|
||||
<string name="relay_test_step_wait_response">Espera respuesta</string>
|
||||
<string name="channel_member_you">tú</string>
|
||||
<string name="you_are_subscriber">eres suscriptor</string>
|
||||
<string name="connect_plan_you_are_observer">Eres observador</string>
|
||||
<string name="connect_plan_you_are_member">Eres miembro</string>
|
||||
<string name="connect_plan_you_are_moderator">Eres moderador</string>
|
||||
<string name="connect_plan_you_are_admin">Eres administrador</string>
|
||||
<string name="connect_plan_you_are_owner">Eres propietario</string>
|
||||
<string name="connect_plan_you_are_subscriber">Eres suscriptor</string>
|
||||
<string name="connect_plan_you_are_contributor">Eres colaborador</string>
|
||||
<string name="you_can_share_channel_link_anybody_will_be_able_to_connect">Puedes compartir el enlace o código QR. Cualquiera podrá unirse al canal.</string>
|
||||
<string name="relay_section_footer_subscriber">Te conectaste al canal mediante este enlace de servidor.</string>
|
||||
<string name="chat_banner_your_channel">Tu canal</string>
|
||||
|
||||
@@ -437,6 +437,11 @@
|
||||
<string name="la_could_not_be_verified">تایید شما ممکن نیست؛ لطفا دوباره امتحان کنید.</string>
|
||||
<string name="choose_file">فایل</string>
|
||||
<string name="you_are_observer">شما ناظر هستید</string>
|
||||
<string name="connect_plan_you_are_observer">شما ناظر هستید</string>
|
||||
<string name="connect_plan_you_are_member">شما عضو هستید</string>
|
||||
<string name="connect_plan_you_are_moderator">شما مدیر هستید</string>
|
||||
<string name="connect_plan_you_are_admin">شما مدیر هستید</string>
|
||||
<string name="connect_plan_you_are_owner">شما صاحب هستید</string>
|
||||
<string name="clear_chat_question">چت پاک شود؟</string>
|
||||
<string name="clear_note_folder_warning">تمام پیامها حذف خواهند شد - این عمل قابل برگشت نیست!</string>
|
||||
<string name="delete_contact_menu_action">حذف</string>
|
||||
|
||||
@@ -1169,6 +1169,10 @@
|
||||
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery"><![CDATA[Yksityisyytesi säilyttämiseksi sovelluksessa on push-ilmoitusten sijaan <b>SimpleX-taustapalvelu</b> – se kuluttaa muutaman prosentin akusta päivässä.]]></string>
|
||||
<string name="auth_unlock">Avaa</string>
|
||||
<string name="you_are_observer">olet tarkkailija</string>
|
||||
<string name="connect_plan_you_are_observer">Olet tarkkailija</string>
|
||||
<string name="connect_plan_you_are_member">Olet jäsen</string>
|
||||
<string name="connect_plan_you_are_admin">Olet ylläpitäjä</string>
|
||||
<string name="connect_plan_you_are_owner">Olet omistaja</string>
|
||||
<string name="videos_limit_title">Liikaa videoita!</string>
|
||||
<string name="voice_message">Ääniviesti</string>
|
||||
<string name="waiting_for_video">Odottaa videota</string>
|
||||
|
||||
@@ -929,6 +929,13 @@
|
||||
<string name="moderate_message_will_be_deleted_warning">Le message sera supprimé pour tous les membres.</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Le message sera marqué comme modéré pour tous les membres.</string>
|
||||
<string name="you_are_observer">vous êtes observateur</string>
|
||||
<string name="connect_plan_you_are_observer">Vous êtes observateur</string>
|
||||
<string name="connect_plan_you_are_member">Vous êtes membre</string>
|
||||
<string name="connect_plan_you_are_moderator">Vous êtes modérateur(trice)</string>
|
||||
<string name="connect_plan_you_are_admin">Vous êtes admin</string>
|
||||
<string name="connect_plan_you_are_owner">Vous êtes propriétaire</string>
|
||||
<string name="connect_plan_you_are_subscriber">Vous êtes abonné</string>
|
||||
<string name="connect_plan_you_are_contributor">Vous êtes contributeur</string>
|
||||
<string name="error_updating_link_for_group">Erreur lors de la mise à jour du lien de groupe</string>
|
||||
<string name="initial_member_role">Rôle initial</string>
|
||||
<string name="observer_cant_send_message_desc">Veuillez contacter l\'administrateur du groupe.</string>
|
||||
|
||||
@@ -283,6 +283,9 @@
|
||||
<string name="member_will_be_removed_from_group_cannot_be_undone">सदस्य को समूह से निकाल दिया जाएगा - इसे पूर्ववत नहीं किया जा सकता!</string>
|
||||
<string name="member_info_section_title_member">सदस्य</string>
|
||||
<string name="group_member_role_member">सदस्य</string>
|
||||
<string name="connect_plan_you_are_member">आप सदस्य हैं</string>
|
||||
<string name="connect_plan_you_are_admin">आप व्यवस्थापक हैं</string>
|
||||
<string name="connect_plan_you_are_owner">आप स्वामी हैं</string>
|
||||
<string name="search_verb">खोजें</string>
|
||||
<string name="la_mode_off">बंद है</string>
|
||||
<string name="connect_via_contact_link">संपर्क पते के माध्यम से कनेक्ट करें?</string>
|
||||
|
||||
@@ -1435,6 +1435,11 @@
|
||||
<string name="unable_to_open_browser_desc">Za pozive je potreban podrazumevani veb pretraživač. Molimo vas da konfigurišete podrazumevani pretraživač u sistemu i podelite više informacija sa programerima.</string>
|
||||
<string name="snd_group_event_member_unblocked">odblokirali ste %s</string>
|
||||
<string name="you_are_observer">Vi ste posmatrač.</string>
|
||||
<string name="connect_plan_you_are_observer">Vi ste posmatrač</string>
|
||||
<string name="connect_plan_you_are_member">Vi ste član</string>
|
||||
<string name="connect_plan_you_are_moderator">Vi ste moderator</string>
|
||||
<string name="connect_plan_you_are_admin">Vi ste administrator</string>
|
||||
<string name="connect_plan_you_are_owner">Vi ste vlasnik</string>
|
||||
<string name="v4_3_improved_privacy_and_security">Unapređena privatnost i bezbednost</string>
|
||||
<string name="v5_6_app_data_migration_descr">Migriraj na drugi uređaj pomoću QR koda.</string>
|
||||
<string name="group_preview_rejected">odbijeno</string>
|
||||
|
||||
@@ -1127,6 +1127,13 @@
|
||||
<string name="simplex_service_notification_text">Üzenetek fogadása…</string>
|
||||
<string name="rcv_group_event_2_members_connected">%s és %s kapcsolódott</string>
|
||||
<string name="you_are_observer">Ön megfigyelő</string>
|
||||
<string name="connect_plan_you_are_observer">Ön megfigyelő</string>
|
||||
<string name="connect_plan_you_are_member">Ön tag</string>
|
||||
<string name="connect_plan_you_are_moderator">Ön moderátor</string>
|
||||
<string name="connect_plan_you_are_admin">Ön adminisztrátor</string>
|
||||
<string name="connect_plan_you_are_owner">Ön tulajdonos</string>
|
||||
<string name="connect_plan_you_are_subscriber">Ön feliratkozó</string>
|
||||
<string name="connect_plan_you_are_contributor">Ön közreműködő</string>
|
||||
<string name="port_verb">Port</string>
|
||||
<string name="set_passcode">Jelkód beállítása</string>
|
||||
<string name="whats_new">Újdonságok</string>
|
||||
|
||||
@@ -2010,6 +2010,13 @@
|
||||
<string name="file_error_auth">Kunci salah atau alamat potongan berkas tidak dikenal - kemungkinan berkas dihapus.</string>
|
||||
<string name="srv_error_version">Versi server tidak kompatibel dengan pengaturan jaringan.</string>
|
||||
<string name="you_are_observer">Anda adalah pengamat</string>
|
||||
<string name="connect_plan_you_are_observer">Anda adalah pengamat</string>
|
||||
<string name="connect_plan_you_are_member">Anda adalah anggota</string>
|
||||
<string name="connect_plan_you_are_moderator">Anda adalah moderator</string>
|
||||
<string name="connect_plan_you_are_admin">Anda adalah admin</string>
|
||||
<string name="connect_plan_you_are_owner">Anda adalah pemilik</string>
|
||||
<string name="connect_plan_you_are_subscriber">Anda adalah pelanggan</string>
|
||||
<string name="connect_plan_you_are_contributor">Anda adalah kontributor</string>
|
||||
<string name="to_start_a_new_chat_help_header">Untuk memulai obrolan baru</string>
|
||||
<string name="gallery_video_button">Video</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">Koneksi yang Anda terima akan dibatalkan!</string>
|
||||
|
||||
@@ -934,6 +934,13 @@
|
||||
<string name="moderate_message_will_be_deleted_warning">Il messaggio verrà eliminato per tutti i membri.</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Il messaggio sarà segnato come moderato per tutti i membri.</string>
|
||||
<string name="you_are_observer">sei un osservatore</string>
|
||||
<string name="connect_plan_you_are_observer">Sei un osservatore</string>
|
||||
<string name="connect_plan_you_are_member">Sei un membro</string>
|
||||
<string name="connect_plan_you_are_moderator">Sei un moderatore</string>
|
||||
<string name="connect_plan_you_are_admin">Sei un amministratore</string>
|
||||
<string name="connect_plan_you_are_owner">Sei un proprietario</string>
|
||||
<string name="connect_plan_you_are_subscriber">Sei iscritto/a</string>
|
||||
<string name="connect_plan_you_are_contributor">Sei un collaboratore</string>
|
||||
<string name="initial_member_role">Ruolo iniziale</string>
|
||||
<string name="error_updating_link_for_group">Errore nell\'aggiornamento del link del gruppo</string>
|
||||
<string name="group_member_role_observer">osservatore</string>
|
||||
|
||||
@@ -1128,6 +1128,10 @@
|
||||
<string name="integrity_msg_skipped">%1$d הודעות שדולגו</string>
|
||||
<string name="custom_time_unit_weeks">שבועות</string>
|
||||
<string name="you_are_observer">הינך צופה</string>
|
||||
<string name="connect_plan_you_are_observer">הינך צופה</string>
|
||||
<string name="connect_plan_you_are_member">הינך חבר קבוצה</string>
|
||||
<string name="connect_plan_you_are_admin">הינך מנהל</string>
|
||||
<string name="connect_plan_you_are_owner">הינך בעלים</string>
|
||||
<string name="observer_cant_send_message_title">אין באפשרותך לשלוח הודעות!</string>
|
||||
<string name="icon_descr_video_snd_complete">סרטון נשלח</string>
|
||||
<string name="voice_message">הודעה קולית</string>
|
||||
|
||||
@@ -990,6 +990,12 @@
|
||||
<string name="video_descr">ビデオ</string>
|
||||
<string name="alert_title_msg_bad_hash">メッセージのハッシュ値問題</string>
|
||||
<string name="you_are_observer">あなたはオブザーバーです</string>
|
||||
<string name="connect_plan_you_are_observer">あなたはオブザーバーです</string>
|
||||
<string name="connect_plan_you_are_member">あなたはメンバーです</string>
|
||||
<string name="connect_plan_you_are_moderator">あなたはモデレーターです</string>
|
||||
<string name="connect_plan_you_are_admin">あなたは管理者です</string>
|
||||
<string name="connect_plan_you_are_owner">あなたはオーナーです</string>
|
||||
<string name="connect_plan_you_are_subscriber">あなたは購読者です</string>
|
||||
<string name="observer_cant_send_message_desc">グループの管理者に連絡してください。</string>
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">動画は相手がアップロードを完了した時点で受信するができます。</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[SOCKSプロキシがサポートしていない場合、<i>.onion hostを使用する</i>、は「いいえ」に設定します。]]></string>
|
||||
|
||||
@@ -468,6 +468,10 @@
|
||||
<string name="group_member_status_left">나감</string>
|
||||
<string name="group_member_role_member">멤버</string>
|
||||
<string name="group_member_role_owner">소유자</string>
|
||||
<string name="connect_plan_you_are_observer">당신은 관찰자입니다</string>
|
||||
<string name="connect_plan_you_are_member">당신은 멤버입니다</string>
|
||||
<string name="connect_plan_you_are_admin">당신은 관리자입니다</string>
|
||||
<string name="connect_plan_you_are_owner">당신은 소유자입니다</string>
|
||||
<string name="group_member_status_group_deleted">그룹 삭제됨</string>
|
||||
<string name="group_member_status_invited">초대됨</string>
|
||||
<string name="group_member_status_removed">강퇴됨</string>
|
||||
|
||||
@@ -1547,6 +1547,10 @@
|
||||
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Jums reikės autentifikuotis kai paleidžiate programėlę arba pratęsiate jos naudojimą po 30 sekundžių fone.</string>
|
||||
<string name="no_history">Nėra istorijos</string>
|
||||
<string name="you_are_observer">esate stebėtojas</string>
|
||||
<string name="connect_plan_you_are_observer">Esate stebėtojas</string>
|
||||
<string name="connect_plan_you_are_member">Esate narys</string>
|
||||
<string name="connect_plan_you_are_admin">Esate administratorius</string>
|
||||
<string name="connect_plan_you_are_owner">Esate savininkas</string>
|
||||
<string name="only_stored_on_members_devices">(saugo tik grupės nariai)</string>
|
||||
<string name="your_simplex_contact_address">Jūsų SimpleX adresas</string>
|
||||
<string name="smp_servers_scan_qr">Nuskanuoti serverio QR kodą</string>
|
||||
|
||||
@@ -283,6 +283,7 @@
|
||||
<string name="cant_send_message_you_left">Nevar nosūtīt ziņu, jūs esat izgājis</string>
|
||||
<string name="cant_send_message_generic">Nevar nosūtīt ziņu</string>
|
||||
<string name="you_are_observer">Jūs esat vērotājs</string>
|
||||
<string name="connect_plan_you_are_observer">Jūs esat vērotājs</string>
|
||||
<string name="reviewed_by_admins">Pārbaudīts ar administratoriem</string>
|
||||
<string name="cant_send_message_member_has_old_version">Nevar nosūtīt ziņu, dalībniekam ir veca versija</string>
|
||||
<string name="cant_send_commands_alert_text">Nevar Nosūtīt Komandas Brīdinājuma Teksts</string>
|
||||
|
||||
@@ -295,6 +295,9 @@
|
||||
<string name="welcome">സ്വാഗതം!</string>
|
||||
<string name="this_text_is_available_in_settings">ഈ വാചകം ക്രമീകരണങ്ങളിൽ ലഭ്യമാണ്</string>
|
||||
<string name="you_are_observer">നിങ്ങൾ നിരീക്ഷകനാണ്</string>
|
||||
<string name="connect_plan_you_are_observer">നിങ്ങൾ നിരീക്ഷകനാണ്</string>
|
||||
<string name="connect_plan_you_are_member">നിങ്ങൾ അംഗമാണ്</string>
|
||||
<string name="connect_plan_you_are_owner">നിങ്ങൾ ഉടമയാണ്</string>
|
||||
<string name="icon_descr_server_status_pending">തീർപ്പാക്കാത്തത്</string>
|
||||
<string name="icon_descr_send_message">സന്ദേശം അയയ്ക്കുക</string>
|
||||
<string name="send_live_message">തത്സമയ സന്ദേശം അയയ്ക്കുക</string>
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
<string name="button_add_welcome_message">Legg til velkomstmelding</string>
|
||||
<string name="add_your_team_members_to_conversations">Legg til dine teammedlemmer i samtalene.</string>
|
||||
<string name="group_member_role_admin">administrator</string>
|
||||
<string name="connect_plan_you_are_admin">Du er administrator</string>
|
||||
<string name="feature_roles_admins">administratorer</string>
|
||||
<string name="v5_6_safer_groups_descr">Administratorer kan blokkere ett medlem for alle.</string>
|
||||
<string name="v4_2_group_links_desc">Administratorer kan lage lenker for å bli med i grupper.</string>
|
||||
|
||||
@@ -936,6 +936,11 @@
|
||||
<string name="group_member_role_observer">Waarnemer</string>
|
||||
<string name="observer_cant_send_message_title">jij bent waarnemer</string>
|
||||
<string name="you_are_observer">je bent waarnemer</string>
|
||||
<string name="connect_plan_you_are_observer">Je bent waarnemer</string>
|
||||
<string name="connect_plan_you_are_member">Je bent lid</string>
|
||||
<string name="connect_plan_you_are_moderator">Je bent moderator</string>
|
||||
<string name="connect_plan_you_are_admin">Je bent beheerder</string>
|
||||
<string name="connect_plan_you_are_owner">Je bent eigenaar</string>
|
||||
<string name="language_system">Systeem</string>
|
||||
<string name="v4_6_audio_video_calls">Audio en video oproepen</string>
|
||||
<string name="confirm_password">Bevestig wachtwoord</string>
|
||||
|
||||
@@ -179,6 +179,11 @@
|
||||
<string name="icon_descr_waiting_for_video">Oczekiwanie na film</string>
|
||||
<string name="waiting_for_video">Oczekiwanie na film</string>
|
||||
<string name="you_are_observer">jesteś obserwatorem</string>
|
||||
<string name="connect_plan_you_are_observer">Jesteś obserwatorem</string>
|
||||
<string name="connect_plan_you_are_member">Jesteś członkiem</string>
|
||||
<string name="connect_plan_you_are_moderator">Jesteś moderatorem</string>
|
||||
<string name="connect_plan_you_are_admin">Jesteś administratorem</string>
|
||||
<string name="connect_plan_you_are_owner">Jesteś właścicielem</string>
|
||||
<string name="observer_cant_send_message_title">Jesteś obserwatorem</string>
|
||||
<string name="icon_descr_server_status_connected">Połączony</string>
|
||||
<string name="maximum_supported_file_size">Obecnie maksymalny obsługiwany rozmiar pliku to %1$s.</string>
|
||||
|
||||
@@ -874,6 +874,13 @@
|
||||
<string name="switch_verb">Trocar</string>
|
||||
<string name="group_is_decentralized">Totalmente descentralizado — visível apenas para os membros.</string>
|
||||
<string name="you_are_observer">você é um observador</string>
|
||||
<string name="connect_plan_you_are_observer">Você é um observador</string>
|
||||
<string name="connect_plan_you_are_member">Você é um membro</string>
|
||||
<string name="connect_plan_you_are_moderator">Você é um moderador</string>
|
||||
<string name="connect_plan_you_are_admin">Você é um administrador</string>
|
||||
<string name="connect_plan_you_are_owner">Você é um proprietário</string>
|
||||
<string name="connect_plan_you_are_subscriber">Você é um inscrito</string>
|
||||
<string name="connect_plan_you_are_contributor">Você é um colaborador</string>
|
||||
<string name="voice_message_with_duration">Mensagem de voz (%1$s)</string>
|
||||
<string name="share_link">Compartilhar link</string>
|
||||
<string name="to_protect_privacy_simplex_has_ids_for_queues">Para proteger sua privacidade, o SimpleX usa IDs separados para cada um dos seus contatos.</string>
|
||||
|
||||
@@ -88,6 +88,9 @@
|
||||
<string name="icon_descr_sent_msg_status_sent">enviada</string>
|
||||
<string name="group_preview_you_are_invited">você está convidado para o grupo</string>
|
||||
<string name="you_are_observer">você é observador</string>
|
||||
<string name="connect_plan_you_are_observer">Você é observador</string>
|
||||
<string name="connect_plan_you_are_member">Você é membro</string>
|
||||
<string name="connect_plan_you_are_admin">Você é administrador</string>
|
||||
<string name="notifications">Notificações</string>
|
||||
<string name="icon_descr_server_status_disconnected">Desconectado</string>
|
||||
<string name="text_field_set_contact_placeholder">Definir nome do contato…</string>
|
||||
|
||||
@@ -2195,6 +2195,11 @@
|
||||
<string name="migrate_from_device_stopping_chat">Se opresc conversațiile</string>
|
||||
<string name="servers_info_subscriptions_total">Total</string>
|
||||
<string name="you_are_observer">ești observator</string>
|
||||
<string name="connect_plan_you_are_observer">Ești observator</string>
|
||||
<string name="connect_plan_you_are_member">Ești membru</string>
|
||||
<string name="connect_plan_you_are_moderator">Ești moderator</string>
|
||||
<string name="connect_plan_you_are_admin">Ești administrator</string>
|
||||
<string name="connect_plan_you_are_owner">Ești proprietar</string>
|
||||
<string name="video_decoding_exception_desc">Videoclipul nu poate fi decodificat. Vă rugăm să încercați un alt videoclip sau să contactați dezvoltatorii.</string>
|
||||
<string name="maximum_message_size_reached_forwarding">Puteți copia și micșora dimensiunea mesajului pentru a-l trimite.</string>
|
||||
<string name="callstate_waiting_for_answer">aștept răspunsul…</string>
|
||||
|
||||
@@ -2771,6 +2771,13 @@
|
||||
<string name="chat_link_from_owner">(от владельца)</string>
|
||||
<string name="error_sharing_channel">Ошибка при публикации канала</string>
|
||||
<string name="you_are_subscriber">Вы подписчик</string>
|
||||
<string name="connect_plan_you_are_observer">Вы читатель</string>
|
||||
<string name="connect_plan_you_are_member">Вы член группы</string>
|
||||
<string name="connect_plan_you_are_moderator">Вы модератор</string>
|
||||
<string name="connect_plan_you_are_admin">Вы админ</string>
|
||||
<string name="connect_plan_you_are_owner">Вы владелец</string>
|
||||
<string name="connect_plan_you_are_subscriber">Вы подписчик</string>
|
||||
<string name="connect_plan_you_are_contributor">Вы соавтор</string>
|
||||
<string name="new_1_time_link">Новая одноразовая ссылка</string>
|
||||
<string name="onboarding_or_show_qr_code">Или покажите QR лично или через видеозвонок.</string>
|
||||
<string name="onboarding_post_address">Используйте этот адрес в профиле социальных сетей, на сайте или в подписи email.</string>
|
||||
|
||||
@@ -595,6 +595,13 @@
|
||||
<string name="initial_member_role">Počiatočná rola</string>
|
||||
<string name="group_member_role_member">člen</string>
|
||||
<string name="group_member_role_moderator">moderátor</string>
|
||||
<string name="connect_plan_you_are_observer">Ste pozorovateľ</string>
|
||||
<string name="connect_plan_you_are_member">Ste člen</string>
|
||||
<string name="connect_plan_you_are_moderator">Ste moderátor</string>
|
||||
<string name="connect_plan_you_are_admin">Ste správca</string>
|
||||
<string name="connect_plan_you_are_owner">Ste majiteľ</string>
|
||||
<string name="connect_plan_you_are_subscriber">Ste odberateľ</string>
|
||||
<string name="connect_plan_you_are_contributor">Ste prispievateľ</string>
|
||||
<string name="feature_roles_moderators">moderátori</string>
|
||||
<string name="v6_4_role_moderator">Nová skupinová rola: Moderátor</string>
|
||||
<string name="new_member_role">Nová rola člena</string>
|
||||
|
||||
@@ -1078,6 +1078,10 @@
|
||||
<string name="you_have_no_chats">คุณไม่มีการแชท</string>
|
||||
<string name="your_chats">แชท</string>
|
||||
<string name="you_are_observer">คุณเป็นผู้สังเกตการณ์</string>
|
||||
<string name="connect_plan_you_are_observer">คุณเป็นผู้สังเกตการณ์</string>
|
||||
<string name="connect_plan_you_are_member">คุณเป็นสมาชิก</string>
|
||||
<string name="connect_plan_you_are_admin">คุณเป็นผู้ดูแลระบบ</string>
|
||||
<string name="connect_plan_you_are_owner">คุณเป็นเจ้าของ</string>
|
||||
<string name="image_decoding_exception_desc">ภาพไม่สามารถถอดรหัส ได้ โปรดลองใช้รูปภาพอื่นหรือติดต่อนักพัฒนา</string>
|
||||
<string name="observer_cant_send_message_title">คุณไม่สามารถส่งข้อความได้!</string>
|
||||
<string name="icon_descr_waiting_for_image">กําลังรอภาพ</string>
|
||||
|
||||
@@ -842,6 +842,13 @@
|
||||
<string name="group_preview_you_are_invited">Gruba davetlisiniz</string>
|
||||
<string name="you_have_no_chats">Hiç sohbetiniz yok</string>
|
||||
<string name="you_are_observer">Gözlemcisiniz</string>
|
||||
<string name="connect_plan_you_are_observer">Gözlemcisiniz</string>
|
||||
<string name="connect_plan_you_are_member">Üyesiniz</string>
|
||||
<string name="connect_plan_you_are_moderator">Yöneticisiniz</string>
|
||||
<string name="connect_plan_you_are_admin">Yöneticisiniz</string>
|
||||
<string name="connect_plan_you_are_owner">Sahipsiniz</string>
|
||||
<string name="connect_plan_you_are_subscriber">Abonesiniz</string>
|
||||
<string name="connect_plan_you_are_contributor">Katkıda bulunansınız</string>
|
||||
<string name="observer_cant_send_message_title">sen gözlemcisin</string>
|
||||
<string name="view_security_code">Güvenlik kodunu görüntüle</string>
|
||||
<string name="you_need_to_allow_to_send_voice">Sesli mesaj gönderebilmeniz için kişinizin de sesli mesaj göndermesine izin vermeniz gerekir.</string>
|
||||
|
||||
@@ -1155,6 +1155,12 @@
|
||||
<string name="images_limit_title">Забагато зображень!</string>
|
||||
<string name="videos_limit_title">Забагато відео!</string>
|
||||
<string name="you_are_observer">ви спостерігач</string>
|
||||
<string name="connect_plan_you_are_observer">Ви спостерігач</string>
|
||||
<string name="connect_plan_you_are_member">Ви учасник</string>
|
||||
<string name="connect_plan_you_are_moderator">Ви модератор</string>
|
||||
<string name="connect_plan_you_are_admin">Ви адміністратор</string>
|
||||
<string name="connect_plan_you_are_owner">Ви власник</string>
|
||||
<string name="connect_plan_you_are_contributor">Ви автор</string>
|
||||
<string name="colored_text">кольоровий</string>
|
||||
<string name="callstatus_ended">дзвінок завершено %1$s</string>
|
||||
<string name="callstatus_error">помилка дзвінка</string>
|
||||
|
||||
@@ -2213,6 +2213,12 @@
|
||||
<string name="onboarding_network_operators_configure_via_settings">Bạn có thể tùy chỉnh các máy chủ thông qua cài đặt.</string>
|
||||
<string name="you_can_set_connection_name_to_remember">Bạn có thể đặt tên kết nối, để nhớ xem đường dẫn đã được chia sẻ với ai.</string>
|
||||
<string name="you_are_observer">bạn là quan sát viên</string>
|
||||
<string name="connect_plan_you_are_observer">Bạn là quan sát viên</string>
|
||||
<string name="connect_plan_you_are_member">Bạn là thành viên</string>
|
||||
<string name="connect_plan_you_are_moderator">Bạn là kiểm duyệt viên</string>
|
||||
<string name="connect_plan_you_are_admin">Bạn là quản trị viên</string>
|
||||
<string name="connect_plan_you_are_owner">Bạn là chủ sở hữu</string>
|
||||
<string name="connect_plan_you_are_subscriber">Bạn là người theo dõi</string>
|
||||
<string name="maximum_message_size_reached_forwarding">Bạn có thể sao chép và giảm kích thước tin nhắn để gửi nó đi.</string>
|
||||
<string name="you_can_enable_delivery_receipts_later_alert">Bạn có thể bật chúng vào lúc sau thông qua cài đặt Quyền riêng tư & Bảo mật của ứng dụng.</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Bạn có thể ẩn hoặc tắt thông báo một hồ sơ người dùng - giữ nó trong phần menu.</string>
|
||||
|
||||
@@ -927,6 +927,13 @@
|
||||
<string name="delete_member_message__question">删除成员消息?</string>
|
||||
<string name="group_member_role_observer">观察员</string>
|
||||
<string name="you_are_observer">你是观察者</string>
|
||||
<string name="connect_plan_you_are_observer">你是观察员</string>
|
||||
<string name="connect_plan_you_are_member">你是成员</string>
|
||||
<string name="connect_plan_you_are_moderator">你是协管</string>
|
||||
<string name="connect_plan_you_are_admin">你是管理员</string>
|
||||
<string name="connect_plan_you_are_owner">你是群主</string>
|
||||
<string name="connect_plan_you_are_subscriber">你是订阅者</string>
|
||||
<string name="connect_plan_you_are_contributor">你是贡献者</string>
|
||||
<string name="error_updating_link_for_group">更新群链接错误</string>
|
||||
<string name="observer_cant_send_message_title">你是观察员</string>
|
||||
<string name="initial_member_role">初始角色</string>
|
||||
|
||||
@@ -926,6 +926,13 @@
|
||||
<string name="moderate_message_will_be_marked_warning">該訊息將對所有成員標記為已移除。</string>
|
||||
<string name="observer_cant_send_message_title">你是觀察員</string>
|
||||
<string name="you_are_observer">你是觀察員</string>
|
||||
<string name="connect_plan_you_are_observer">你是觀察員</string>
|
||||
<string name="connect_plan_you_are_member">你是成員</string>
|
||||
<string name="connect_plan_you_are_moderator">你是審核員</string>
|
||||
<string name="connect_plan_you_are_admin">你是管理員</string>
|
||||
<string name="connect_plan_you_are_owner">你是擁有者</string>
|
||||
<string name="connect_plan_you_are_subscriber">你是訂閱者</string>
|
||||
<string name="connect_plan_you_are_contributor">你是貢獻者</string>
|
||||
<string name="group_member_role_observer">觀察員</string>
|
||||
<string name="error_updating_link_for_group">更新群組連接時出錯</string>
|
||||
<string name="observer_cant_send_message_desc">請聯絡群組管理員。</string>
|
||||
|
||||
+83
-8
@@ -8,6 +8,7 @@ import org.jetbrains.skia.Bitmap
|
||||
import org.jetbrains.skia.ColorAlphaType
|
||||
import org.jetbrains.skia.ColorType
|
||||
import org.jetbrains.skia.ImageInfo
|
||||
import uk.co.caprica.vlcj.media.VideoOrientation
|
||||
import uk.co.caprica.vlcj.player.base.MediaPlayer
|
||||
import uk.co.caprica.vlcj.player.embedded.videosurface.CallbackVideoSurface
|
||||
import uk.co.caprica.vlcj.player.embedded.videosurface.VideoSurface
|
||||
@@ -22,10 +23,42 @@ import javax.swing.SwingUtilities
|
||||
// https://github.com/JetBrains/compose-multiplatform/pull/3336/files
|
||||
internal class SkiaBitmapVideoSurface : VideoSurface(VideoSurfaceAdapters.getVideoSurfaceAdapter()) {
|
||||
|
||||
private companion object {
|
||||
// A received file declares its own size, and vlc allocates the buffer we ask for here (and we copy
|
||||
// it into a java array of the same size), so an unbounded request is an out-of-memory from a message.
|
||||
// Above the budget the picture is scaled down keeping its aspect - 4096x4096 of RV32 is 64 MB
|
||||
const val MAX_BUFFER_PIXELS = 4096L * 4096L
|
||||
val transposedOrientations = setOf(
|
||||
VideoOrientation.LEFT_TOP,
|
||||
VideoOrientation.LEFT_BOTTOM,
|
||||
VideoOrientation.RIGHT_TOP,
|
||||
VideoOrientation.RIGHT_BOTTOM,
|
||||
)
|
||||
|
||||
// Keeps the aspect, never returns a side below 1, and keeps width * height * 4 inside an Int
|
||||
fun boundedSize(width: Int, height: Int): Pair<Int, Int> {
|
||||
val w = width.coerceAtLeast(1)
|
||||
val h = height.coerceAtLeast(1)
|
||||
val pixels = w.toLong() * h.toLong()
|
||||
if (pixels <= MAX_BUFFER_PIXELS) return w to h
|
||||
val scale = kotlin.math.sqrt(MAX_BUFFER_PIXELS.toDouble() / pixels.toDouble())
|
||||
var sw = (w * scale).toInt().coerceAtLeast(1)
|
||||
var sh = (h * scale).toInt().coerceAtLeast(1)
|
||||
// Scaling both sides assumes both shrink; a side pinned at 1 only shrinks the area linearly,
|
||||
// so a 2_000_000_000 x 1 declaration would still get 45 times the budget. Divide the budget
|
||||
// by the pinned side instead
|
||||
if (sw.toLong() * sh.toLong() > MAX_BUFFER_PIXELS) {
|
||||
if (sw >= sh) sw = (MAX_BUFFER_PIXELS / sh).toInt() else sh = (MAX_BUFFER_PIXELS / sw).toInt()
|
||||
}
|
||||
return sw to sh
|
||||
}
|
||||
}
|
||||
|
||||
private val videoSurface = SkiaBitmapVideoSurface()
|
||||
@Volatile private var mediaPlayer: MediaPlayer? = null
|
||||
private lateinit var imageInfo: ImageInfo
|
||||
private lateinit var frameBytes: ByteArray
|
||||
@Volatile private var allocated = false
|
||||
private val skiaBitmap: Bitmap = Bitmap()
|
||||
private val composeBitmap = mutableStateOf<ImageBitmap?>(null)
|
||||
|
||||
@@ -49,19 +82,37 @@ internal class SkiaBitmapVideoSurface : VideoSurface(VideoSurfaceAdapters.getVid
|
||||
val tracks = player?.media()?.info()?.videoTracks()
|
||||
val playingTrack = player?.video()?.track()
|
||||
val track = tracks?.firstOrNull { it.id() == playingTrack } ?: tracks?.singleOrNull()
|
||||
this.sourceWidth = track?.width()?.takeIf { it > 0 } ?: sourceWidth
|
||||
this.sourceHeight = track?.height()?.takeIf { it > 0 } ?: sourceHeight
|
||||
return RV32BufferFormat(this.sourceWidth, this.sourceHeight)
|
||||
// Both track sides or neither: one side from the track and the other from the padded size libvlc
|
||||
// passed never described the same picture, and transposing such a pair compounds the mismatch
|
||||
val trackW = track?.width() ?: 0
|
||||
val trackH = track?.height() ?: 0
|
||||
val useTrack = trackW > 0 && trackH > 0
|
||||
val width = if (useTrack) trackW else sourceWidth
|
||||
val height = if (useTrack) trackH else sourceHeight
|
||||
// The track carries the size before rotation, but vlc rotates the picture before it reaches
|
||||
// this buffer, so for the transposed orientations the picture arrives with the sides swapped.
|
||||
// Only when the track's own sides are used: the size libvlc passed is already rotated
|
||||
val transposed = useTrack && (track?.orientation() in transposedOrientations)
|
||||
val orientedWidth = if (transposed) height else width
|
||||
val orientedHeight = if (transposed) width else height
|
||||
val (w, h) = boundedSize(orientedWidth, orientedHeight)
|
||||
this.sourceWidth = w
|
||||
this.sourceHeight = h
|
||||
return RV32BufferFormat(w, h)
|
||||
}
|
||||
|
||||
override fun allocatedBuffers(buffers: Array<ByteBuffer>) {
|
||||
frameBytes = buffers[0].run { ByteArray(remaining()).also(::get) }
|
||||
// rewind first, as in display: remaining() on an already-read buffer would size this short
|
||||
frameBytes = buffers[0].run { rewind(); ByteArray(remaining()).also(::get) }
|
||||
imageInfo = ImageInfo(
|
||||
sourceWidth,
|
||||
sourceHeight,
|
||||
ColorType.BGRA_8888,
|
||||
ColorAlphaType.PREMUL,
|
||||
)
|
||||
// Last, and volatile: vlc calls this on its own thread while display reads imageInfo and
|
||||
// frameBytes on the event thread, and this write is what publishes them to it
|
||||
this@SkiaBitmapVideoSurface.allocated = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,11 +122,35 @@ internal class SkiaBitmapVideoSurface : VideoSurface(VideoSurfaceAdapters.getVid
|
||||
nativeBuffers: Array<ByteBuffer>,
|
||||
bufferFormat: BufferFormat,
|
||||
) {
|
||||
// The native buffer belongs to vlc and is only guaranteed to exist for the duration of this
|
||||
// callback, so everything that touches it has to happen here, on vlc's thread - deferred code
|
||||
// would read through a pointer vlc may have freed on a format change. Only the copy is done
|
||||
// here; skia and compose are event-thread objects and get the private copy
|
||||
if (!this@SkiaBitmapVideoSurface.allocated) return
|
||||
val info = imageInfo
|
||||
// imageInfo comes from the format that was last allocated and this frame from the format it was
|
||||
// rendered with; they differ across a renegotiation, and the pixels would be read with the
|
||||
// wrong stride, so display only what matches
|
||||
if (bufferFormat.width != info.width || bufferFormat.height != info.height) return
|
||||
val rowBytes = info.width.toLong() * 4
|
||||
val needed = rowBytes * info.height
|
||||
val buffer = nativeBuffers[0]
|
||||
// rewind first: the same buffer is reused for every frame, so its position is at the end of
|
||||
// the previous read and remaining() would be 0
|
||||
buffer.rewind()
|
||||
// Capture the array: a renegotiation replaces the field with one of another size before the
|
||||
// deferred install runs, and info's geometry must be read against the array it was copied into.
|
||||
// The next frame's copy can overwrite it while the install reads - a torn frame at worst, since
|
||||
// the geometry checks above hold for both frames of the same format
|
||||
val bytes = frameBytes
|
||||
if (needed > bytes.size || buffer.remaining().toLong() < needed) return
|
||||
buffer.get(bytes, 0, needed.toInt())
|
||||
SwingUtilities.invokeLater {
|
||||
nativeBuffers[0].rewind()
|
||||
nativeBuffers[0].get(frameBytes)
|
||||
skiaBitmap.installPixels(imageInfo, frameBytes, bufferFormat.width * 4)
|
||||
composeBitmap.value = skiaBitmap.asComposeImageBitmap()
|
||||
// installPixels reports whether skia took the pixels; publishing the bitmap when it did not
|
||||
// would hand compose a bitmap with no pixels behind it
|
||||
if (skiaBitmap.installPixels(info, bytes, rowBytes.toInt())) {
|
||||
composeBitmap.value = skiaBitmap.asComposeImageBitmap()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
-13
@@ -11,7 +11,6 @@ import uk.co.caprica.vlcj.media.Media
|
||||
import uk.co.caprica.vlcj.media.MediaEventAdapter
|
||||
import uk.co.caprica.vlcj.media.MediaParsedStatus
|
||||
import uk.co.caprica.vlcj.media.ParseFlag
|
||||
import uk.co.caprica.vlcj.media.VideoOrientation
|
||||
import uk.co.caprica.vlcj.player.base.*
|
||||
import uk.co.caprica.vlcj.player.component.CallbackMediaPlayerComponent
|
||||
import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent
|
||||
@@ -232,7 +231,18 @@ actual class VideoPlayer actual constructor(
|
||||
player.media().startPaused(uri.toFile().absolutePath)
|
||||
val snap = withTimeoutOrNull(1500L) {
|
||||
while (surface.bitmap.value == null) delay(50)
|
||||
surface.bitmap.value!!.toAwtImage()
|
||||
// The render callback installs pixels into the surface bitmap on the event thread, so read it
|
||||
// there too - converting off that thread races a resize on format renegotiation and segfaults
|
||||
// inside skia while reading pixels of the previous, smaller buffer
|
||||
val holder = java.util.concurrent.atomic.AtomicReference<BufferedImage?>(null)
|
||||
// invokeAndWait rethrows whatever the conversion threw, wrapped, and the callers of this have
|
||||
// no handler; a frame that cannot be converted is a missing preview, not a failed send
|
||||
try {
|
||||
javax.swing.SwingUtilities.invokeAndWait { holder.set(surface.bitmap.value?.toAwtImage()) }
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "getBitmapFromVideo snapshot failed: ${e.stackTraceToString()}")
|
||||
}
|
||||
holder.get()
|
||||
}
|
||||
val orientation = player.media().info().videoTracks().firstOrNull()?.orientation()
|
||||
if (orientation == null) {
|
||||
@@ -242,17 +252,9 @@ actual class VideoPlayer actual constructor(
|
||||
|
||||
return@withContext VideoPlayerInterface.PreviewAndDuration(preview = defaultPreview, timestamp = 0L, duration = 0L)
|
||||
}
|
||||
val preview: ImageBitmap? = when (orientation) {
|
||||
VideoOrientation.TOP_LEFT -> snap
|
||||
VideoOrientation.TOP_RIGHT -> snap?.flip(false, true)
|
||||
VideoOrientation.BOTTOM_LEFT -> snap?.flip(true, false)
|
||||
VideoOrientation.BOTTOM_RIGHT -> snap?.rotate(180.0)
|
||||
VideoOrientation.LEFT_TOP -> snap /* Transposed */
|
||||
VideoOrientation.LEFT_BOTTOM -> snap?.rotate(-90.0)
|
||||
VideoOrientation.RIGHT_TOP -> snap?.rotate(90.0)
|
||||
VideoOrientation.RIGHT_BOTTOM -> snap /* Anti-transposed */
|
||||
else -> snap
|
||||
}?.toComposeImageBitmap()
|
||||
// vlc applies the display matrix before the frame reaches the video surface, so the snapshot
|
||||
// arrives upright; orienting it again here would undo that
|
||||
val preview: ImageBitmap? = snap?.toComposeImageBitmap()
|
||||
val duration = player.duration.toLong()
|
||||
player.stop()
|
||||
putHelperPlayer(mediaComponent)
|
||||
|
||||
+5
-1
@@ -4,6 +4,7 @@ import androidx.compose.foundation.combinedClickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalWindowInfo
|
||||
import androidx.compose.ui.unit.Dp
|
||||
@@ -14,6 +15,8 @@ import java.awt.Window
|
||||
@Composable
|
||||
actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLongClick: () -> Unit, stop: () -> Unit) {
|
||||
Box {
|
||||
// The preview this replaces while playing is drawn with FillWidth, so a video smaller than the
|
||||
// item width has to grow the same way here - Fit would leave it at its own size in the middle
|
||||
SurfaceFromPlayer(player,
|
||||
Modifier
|
||||
.width(width)
|
||||
@@ -21,7 +24,8 @@ actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLon
|
||||
onLongClick = onLongClick,
|
||||
onClick = { if (player.player.isPlaying) stop() else onClick() }
|
||||
)
|
||||
.onRightClick(onLongClick)
|
||||
.onRightClick(onLongClick),
|
||||
contentScale = ContentScale.FillWidth
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -43,7 +43,7 @@ actual fun FullScreenVideoView(player: VideoPlayer, modifier: Modifier, close: (
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun BoxScope.SurfaceFromPlayer(player: VideoPlayer, modifier: Modifier) {
|
||||
fun BoxScope.SurfaceFromPlayer(player: VideoPlayer, modifier: Modifier, contentScale: ContentScale = ContentScale.Fit) {
|
||||
val surface = remember {
|
||||
SkiaBitmapVideoSurface().also {
|
||||
player.player.videoSurface().set(it)
|
||||
@@ -54,7 +54,7 @@ fun BoxScope.SurfaceFromPlayer(player: VideoPlayer, modifier: Modifier) {
|
||||
bitmap,
|
||||
modifier = modifier.align(Alignment.Center),
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.Fit,
|
||||
contentScale = contentScale,
|
||||
alignment = Alignment.Center,
|
||||
)
|
||||
}
|
||||
|
||||
+15
-6
@@ -26,16 +26,25 @@ java {
|
||||
targetCompatibility = jvmVersion
|
||||
}
|
||||
|
||||
// Without this the jar records the build machine's timestamps, file order and file modes,
|
||||
// which makes the desktop packages unreproducible
|
||||
tasks.jar {
|
||||
// Checked here and not during configuration, so that Android builds, which don't use nanohttpd,
|
||||
// work without the submodule
|
||||
val upstreamSources = sourceSets.main.get().java.matching { include("org/nanohttpd/**") }
|
||||
|
||||
// compileJava and jar silently succeed without the sources, so the check needs its own task.
|
||||
// It cannot run during configuration, Android builds must work without the submodule.
|
||||
val checkUpstreamSources by tasks.registering {
|
||||
doFirst {
|
||||
if (!upstream.file("core/src/main/java").asFile.isDirectory) {
|
||||
if (upstreamSources.isEmpty) {
|
||||
throw GradleException("nanohttpd sources are missing, run: git submodule update --init --recursive")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.compileJava {
|
||||
dependsOn(checkUpstreamSources)
|
||||
}
|
||||
|
||||
// Without this the jar records the build machine's timestamps, file order and file modes,
|
||||
// which makes the desktop packages unreproducible
|
||||
tasks.jar {
|
||||
isPreserveFileTimestamps = false
|
||||
isReproducibleFileOrder = true
|
||||
filePermissions { unix("644") }
|
||||
|
||||
+72
-4
@@ -1,6 +1,7 @@
|
||||
---
|
||||
title: Hosting your own Chat Relay
|
||||
revision: 16.07.2026
|
||||
revision: 28.07.2026
|
||||
templateEngineOverride: md
|
||||
---
|
||||
|
||||
# Hosting your own Chat Relay
|
||||
@@ -20,6 +21,7 @@ This guide explains how to set up a chat relay on a Linux server, how to run it,
|
||||
- [Relay options](#relay-options)
|
||||
- [Get the relay address](#get-the-relay-address)
|
||||
- [Run relay commands](#run-relay-commands)
|
||||
- [Run with Docker](#run-with-docker)
|
||||
- [Channel web previews](#channel-web-previews)
|
||||
- [Relay web options](#relay-web-options)
|
||||
- [Serve the previews with Caddy](#serve-the-previews-with-caddy)
|
||||
@@ -126,6 +128,73 @@ simplex-chat-relay -d /home/relay/relay -e "/set profile image file /home/relay/
|
||||
systemctl start simplex-relay
|
||||
```
|
||||
|
||||
## Run with Docker
|
||||
|
||||
The relay can also be built and run with Docker Compose, using PostgreSQL for storage. The files are in [`scripts/relay`](https://github.com/simplex-chat/simplex-chat/tree/master/scripts/relay).
|
||||
|
||||
1. Clone the repository and switch to the relay directory:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/simplex-chat/simplex-chat
|
||||
cd simplex-chat/scripts/relay
|
||||
```
|
||||
|
||||
2. Copy the example environment file, then set `RELAY_NAME`, `RELAY_WEB_DOMAIN` and `POSTGRES_PASSWORD` in it:
|
||||
|
||||
```sh
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
3. Create the directory for the previews and the CORS file, owned by the container's user (UID `1000`):
|
||||
|
||||
```sh
|
||||
mkdir -p /var/www/relay-web-channels/channel
|
||||
chown -R 1000:1000 /var/www/relay-web-channels
|
||||
chmod 0755 /var/www/relay-web-channels
|
||||
```
|
||||
|
||||
4. Create the output directory for the relay address, then build and start:
|
||||
|
||||
```sh
|
||||
mkdir -p out && chown 1000:1000 out
|
||||
docker compose build
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
The first build compiles from source and takes a while.
|
||||
|
||||
5. Read the relay address, written on the first start:
|
||||
|
||||
```sh
|
||||
cat out/relay-address.txt
|
||||
```
|
||||
|
||||
To give the relay a picture, put a small `.png`/`.jpg`/`.jpeg` file (large images are rejected) next to the compose file and add a `docker-compose.override.yml`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
relay:
|
||||
environment:
|
||||
RELAY_IMAGE_FILE: /avatar.png
|
||||
volumes:
|
||||
- ./avatar.png:/avatar.png:ro
|
||||
```
|
||||
|
||||
To run a one-off command against the relay's database, override the entrypoint:
|
||||
|
||||
```sh
|
||||
docker compose run --rm --entrypoint sh relay -c \
|
||||
'simplex-chat-relay -d "$DB_CONN" -e "/set profile image file /avatar.png"'
|
||||
```
|
||||
|
||||
Relay metrics from the database are published by [sql_exporter](https://github.com/burningalchemist/sql_exporter) on `127.0.0.1:9399/metrics`, with the queries in `sql_exporter.yml`.
|
||||
|
||||
Relay database live in PostgreSQL docker volume. To print the full path to PostgreSQL database, execute in the host:
|
||||
|
||||
```sh
|
||||
docker volume inspect simplex-chat-relay_pgdata --format '{{.Mountpoint}}'
|
||||
```
|
||||
|
||||
## Channel web previews
|
||||
|
||||
Chat relays can render recent messages of its public channels as JSON files, which can be served over HTTPS using a web server to create channel web previews. This is optional.
|
||||
@@ -219,11 +288,9 @@ Create `/etc/systemd/system/simplex-cors-sync.service`:
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Sync SimpleX relay CORS config to Caddy
|
||||
StartLimitIntervalSec=30
|
||||
StartLimitBurst=10
|
||||
StartLimitIntervalSec=0
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStartPre=/bin/sleep 2
|
||||
ExecStart=/usr/local/bin/simplex-cors-sync.sh
|
||||
```
|
||||
|
||||
@@ -236,6 +303,7 @@ After=caddy.service
|
||||
[Path]
|
||||
PathChanged=/var/www/relay-web-channels/cors.conf
|
||||
Unit=simplex-cors-sync.service
|
||||
TriggerLimitIntervalSec=0
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
# Desktop: rotated videos squashed on playback, preview rotated twice, snapshot crash
|
||||
|
||||
## Problem
|
||||
|
||||
A video carrying rotation metadata - what a phone records in portrait - is squashed when it
|
||||
plays in a chat item on desktop, while its preview looks correct. Re-sending such a video from
|
||||
desktop produces a preview that is wrong for every recipient. Attaching one can take the app
|
||||
down with a SIGSEGV inside skia. Separately, any video smaller than the width of the message
|
||||
item plays at its own size in the middle of the item instead of filling it, though its preview
|
||||
fills the width.
|
||||
|
||||
## Cause
|
||||
|
||||
Three defects, of different ages, on the path a frame takes from libvlc to the screen.
|
||||
|
||||
**The buffer is sized from the wrong dimensions.** `SkiaBitmapVideoSurface` asks libvlc for a
|
||||
buffer of `track.width() x track.height()`. The track carries the size before rotation, but vlc
|
||||
applies the display matrix before the frame reaches the vmem callback, so the picture arriving
|
||||
is transposed with respect to the buffer, and vlc stretches it to fill. Measured with a
|
||||
1920x1080 HEVC file whose display matrix is -90:
|
||||
|
||||
| source | value |
|
||||
| -------------------------- | -------------------- |
|
||||
| size libvlc offers | 1088x1920 (rotated) |
|
||||
| `track.width()/height()` | 1920x1080 (coded) |
|
||||
| buffer requested before fix | 1920x1080 |
|
||||
|
||||
Asking for the track size was introduced to drop the decoder's padding (#7391); it is right for
|
||||
an unrotated video and wrong for a rotated one, because it discards the orientation libvlc had
|
||||
already applied.
|
||||
|
||||
**The preview is oriented twice.** `previewAndDuration` takes a snapshot from the same surface
|
||||
and then rotates it by hand. The snapshot arrives at 1080x1920 and already upright - dumping it
|
||||
to a PNG confirms the content, not just the dimensions - and the manual rotation turns it back
|
||||
to 1920x1080. Before this change the two errors cancelled: a wrongly shaped buffer plus a
|
||||
manual rotation produced a preview that looked right, which is why the preview was correct while
|
||||
playback was not.
|
||||
|
||||
**The snapshot races the render callback.** The render callback installs pixels into the shared
|
||||
bitmap on the event thread; the snapshot converted it on the preview thread. The format is
|
||||
renegotiated several times per file, so a resize between `installPixels` and `readPixels` makes
|
||||
skia read past the end of the buffer:
|
||||
|
||||
```
|
||||
SIGSEGV ... C [libskiko-linux-x64.so+0x1e7807] sse2::load_8888(...)
|
||||
at org.jetbrains.skia.Bitmap.readPixels
|
||||
at chat.simplex.common.platform.VideoPlayer$Companion$getBitmapFromVideo$2$snap$1
|
||||
```
|
||||
|
||||
**Small videos do not fill the item.** The preview is drawn with `ContentScale.FillWidth` and
|
||||
the playback surface with `ContentScale.Fit`. `Fit` never exceeds the height of the box, so a
|
||||
320x240 video stays at its own size, centred, while its preview fills the width. This is only
|
||||
visible for sources narrower than the item.
|
||||
|
||||
## Fix
|
||||
|
||||
Swap the requested width and height for the four transposed orientations, so the buffer matches
|
||||
the picture vlc delivers, and keep the track size otherwise so the padding fix still holds.
|
||||
Drop the manual orientation handling from the preview, since the frame is already upright. Read
|
||||
the snapshot on the event thread, where the render callback writes it. Draw the inline playback
|
||||
surface with `FillWidth`, as its preview is drawn.
|
||||
|
||||
## Bounds
|
||||
|
||||
The dimensions come from a received file, so they are attacker-chosen and are treated as such.
|
||||
|
||||
- Both track sides are used or neither. One side from the track beside the other from libvlc's
|
||||
padded size never described the same picture, and transposing such a pair compounds it.
|
||||
- The requested area is capped, scaling down and keeping the aspect where both sides can shrink;
|
||||
a side pinned at 1 takes the whole budget on the other side instead, since scaling cannot keep
|
||||
the aspect of a 2000000000x1 declaration and hold the area at once. An unbounded request is an
|
||||
out-of-memory from a message: 16000x16000 is 1 GB of RV32, requested from vlc and copied into
|
||||
a java array of the same size. The cap also keeps `width * height * 4` inside an `Int`.
|
||||
- Neither side can be zero, so a 1x4000 or 4000x1 file cannot produce an empty buffer.
|
||||
- The sides are only swapped when the track's own sides are used. The size libvlc passes is
|
||||
already rotated, so swapping that pair would recreate the squash for a file that declares a
|
||||
rotation and a zero-sized track.
|
||||
- A frame is dropped rather than displayed when it does not fill the bitmap skia is told to
|
||||
read, when the format it was rendered with is not the one the bitmap was sized by, and before
|
||||
any buffer has been allocated. The checks and the copy run inside the render callback, on
|
||||
vlc's thread: the native buffer is only guaranteed to exist for the duration of the callback,
|
||||
so code deferred to another thread would read through a pointer vlc may have freed on a format
|
||||
change. Only the copied frame is handed to the event thread.
|
||||
- The bitmap is published only when skia reports that it took the pixels, and a snapshot that
|
||||
cannot be converted is logged and left empty rather than thrown into callers that have no
|
||||
handler for it.
|
||||
|
||||
## Testing
|
||||
|
||||
Fifteen files covering 320x240 to 3840x2160, square, odd, and 1234x567 sizes, h264, vp9, av1
|
||||
and hevc, unrotated and 90/180/270, plus 1x4000, 4000x1 and 16000x16000. Checked that rotated
|
||||
videos play upright and preview upright, that a re-sent video keeps its shape, that attaching
|
||||
does not crash, that a 320x240 video fills the item, that the AV1 padding fix still holds, and
|
||||
that the 16000x16000 file is scaled to the cap instead of allocating a gigabyte.
|
||||
|
||||
## Android
|
||||
|
||||
None of these reach android. The buffer format callback is desktop only - android renders
|
||||
through exoplayer's `StyledPlayerView`, with no buffer for us to size - and its preview comes
|
||||
from `MediaMetadataRetriever.getFrameAtTime`, which returns an oriented frame and is not
|
||||
rotated again. The event thread race is skia and swing. Android already fills the item width
|
||||
with `RESIZE_MODE_FIXED_WIDTH`, which is what the `FillWidth` change gives desktop.
|
||||
|
||||
## Not addressed
|
||||
|
||||
`CIVideoView` bounds the item's aspect ratio above at 2.33 but not below, so a 4000x1 video
|
||||
still lays out with a height that rounds to zero. The snapshot's `invokeAndWait` is not
|
||||
cancellable, so its 1.5s timeout cannot interrupt a wedged event thread. Both are outside the
|
||||
functions this change touches.
|
||||
@@ -12,7 +12,7 @@ vlc_dir=$root_dir/apps/multiplatform/common/src/commonMain/cpp/desktop/libs/linu
|
||||
|
||||
mkdir $vlc_dir || exit 0
|
||||
|
||||
vlc_tag='v3.0.21-1'
|
||||
vlc_tag='v3.0.23-2'
|
||||
vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-linux-${ARCH}.appimage"
|
||||
|
||||
cd /tmp
|
||||
|
||||
@@ -10,7 +10,7 @@ else
|
||||
vlc_arch=intel64
|
||||
fi
|
||||
|
||||
vlc_tag='v3.0.21-1'
|
||||
vlc_tag='v3.0.23-2'
|
||||
vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-macos-${ARCH}.zip"
|
||||
|
||||
function readlink() {
|
||||
|
||||
@@ -10,7 +10,7 @@ vlc_dir=$root_dir/apps/multiplatform/common/src/commonMain/cpp/desktop/libs/wind
|
||||
rm -rf $vlc_dir
|
||||
mkdir -p $vlc_dir/vlc || exit 0
|
||||
|
||||
vlc_tag='v3.0.21-1'
|
||||
vlc_tag='v3.0.23-2'
|
||||
vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-win-x86_64.zip"
|
||||
|
||||
cd /tmp
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# The Dockerfile clones the source itself and only needs entrypoint.py from the
|
||||
# build context. Exclude everything else, especially .env (secrets) and out/.
|
||||
*
|
||||
!entrypoint.py
|
||||
@@ -0,0 +1,21 @@
|
||||
# Copy to .env and edit.
|
||||
|
||||
RELAY_NAME="My Relay"
|
||||
RELAY_WEB_DOMAIN=relay1.example.com
|
||||
|
||||
POSTGRES_USER=simplex
|
||||
POSTGRES_DB=simplex_chat_relay
|
||||
POSTGRES_PASSWORD=change-me
|
||||
|
||||
# Ref to build: tag, branch or commit.
|
||||
CHAT_REF=88df79d1e26921c7d1835fc8484fade596356fb6
|
||||
|
||||
# SMP server for the relay address, used when the address is created.
|
||||
#RELAY_ADDRESS_SERVER=smp://<fingerprint>@smp.example.com
|
||||
|
||||
# GHC runtime options, without the +RTS/-RTS markers.
|
||||
#RELAY_RTS_OPTS="-N -F1.2 -A16m -I0.01 -Iw15"
|
||||
|
||||
# Database connection pool and internal queue size.
|
||||
#RELAY_POOL_SIZE=4
|
||||
#RELAY_QUEUE_SIZE=65536
|
||||
@@ -0,0 +1,70 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG CHAT_REF=88df79d1e26921c7d1835fc8484fade596356fb6
|
||||
ARG GHC=9.6.3
|
||||
# 3.10.1.0 predates the Hackage root key rotation and fails `cabal update`.
|
||||
ARG CABAL=3.10.2.0
|
||||
|
||||
# ---- build ----------------------------------------------------------------
|
||||
FROM ubuntu:22.04 AS build
|
||||
|
||||
ARG GHC
|
||||
ARG CABAL
|
||||
ENV DEBIAN_FRONTEND=noninteractive \
|
||||
PATH="/root/.cabal/bin:/root/.ghcup/bin:$PATH"
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates curl git build-essential \
|
||||
libpq-dev libgmp3-dev zlib1g-dev libnuma-dev libssl-dev \
|
||||
llvm-12 llvm-12-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org \
|
||||
| BOOTSTRAP_HASKELL_NONINTERACTIVE=1 \
|
||||
BOOTSTRAP_HASKELL_GHC_VERSION="${GHC}" \
|
||||
BOOTSTRAP_HASKELL_CABAL_VERSION="${CABAL}" sh \
|
||||
&& ghcup set ghc "${GHC}" \
|
||||
&& ghcup set cabal "${CABAL}"
|
||||
|
||||
# Kept out of the layer above so that a failure here does not reinstall GHC.
|
||||
# Retried because a failed fetch falls back to the mirrors in Hackage's
|
||||
# mirrors.json, which are dead, and the last one aborts the build.
|
||||
RUN cabal update || { sleep 5; cabal update; } || { sleep 20; cabal update; }
|
||||
|
||||
# Declared after the toolchain layers so that changing the ref does not rebuild
|
||||
# them. Unlike `clone --branch`, this form also accepts a commit hash.
|
||||
ARG CHAT_REF
|
||||
WORKDIR /project
|
||||
RUN git init -q . \
|
||||
&& git remote add origin https://github.com/simplex-chat/simplex-chat \
|
||||
&& git fetch -q --depth 1 origin "${CHAT_REF}" \
|
||||
&& git checkout -q FETCH_HEAD
|
||||
|
||||
# The cache mounts keep compiled dependencies across ref changes.
|
||||
RUN --mount=type=cache,target=/root/.cabal/store,sharing=locked \
|
||||
--mount=type=cache,target=/project/dist-newstyle,sharing=locked \
|
||||
cp scripts/cabal.project.local.linux cabal.project.local \
|
||||
&& cabal build -fclient_postgres exe:simplex-chat \
|
||||
&& bin=$(find dist-newstyle -name simplex-chat -type f -executable | head -n1) \
|
||||
&& install -m 0755 "$bin" /simplex-chat-relay \
|
||||
&& strip /simplex-chat-relay
|
||||
|
||||
# ---- runtime --------------------------------------------------------------
|
||||
FROM debian:stable-slim AS runtime
|
||||
|
||||
# The binary is dynamically linked, so it needs these libraries at runtime.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates python3 \
|
||||
libpq5 libgmp10 libssl3 zlib1g libnuma1 libffi8 \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& useradd -m -u 1000 relay
|
||||
|
||||
COPY --from=build /simplex-chat-relay /usr/local/bin/simplex-chat-relay
|
||||
COPY entrypoint.py /usr/local/bin/entrypoint.py
|
||||
|
||||
# Bind-mounted host directories must be writable by this UID.
|
||||
USER relay
|
||||
|
||||
# The relay shuts down cleanly on SIGINT, not SIGTERM.
|
||||
STOPSIGNAL SIGINT
|
||||
ENTRYPOINT ["python3", "/usr/local/bin/entrypoint.py"]
|
||||
@@ -0,0 +1,87 @@
|
||||
name: simplex-chat-relay
|
||||
|
||||
services:
|
||||
relay:
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
CHAT_REF: ${CHAT_REF:-88df79d1e26921c7d1835fc8484fade596356fb6}
|
||||
image: chat-relay:latest # set your image/registry name
|
||||
container_name: chat-relay
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
RELAY_NAME: ${RELAY_NAME}
|
||||
RELAY_WEB_DOMAIN: ${RELAY_WEB_DOMAIN}
|
||||
RELAY_ADDRESS_SERVER: ${RELAY_ADDRESS_SERVER:-}
|
||||
# Empty values fall back to the entrypoint defaults.
|
||||
RELAY_RTS_OPTS: ${RELAY_RTS_OPTS:-}
|
||||
RELAY_POOL_SIZE: ${RELAY_POOL_SIZE:-}
|
||||
RELAY_QUEUE_SIZE: ${RELAY_QUEUE_SIZE:-}
|
||||
# Password is passed as PGPASSWORD to keep it out of argv.
|
||||
DB_CONN: postgresql://${POSTGRES_USER}@db:5432/${POSTGRES_DB}
|
||||
PGPASSWORD: ${POSTGRES_PASSWORD}
|
||||
volumes:
|
||||
- /var/www/relay-web-channels:/var/www/relay-web-channels
|
||||
- ./out:/out
|
||||
restart: unless-stopped
|
||||
|
||||
metrics:
|
||||
image: burningalchemist/sql_exporter:latest
|
||||
container_name: chat-relay-metrics
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
# Percent-encode the password if it contains URL-reserved characters.
|
||||
SQLEXPORTER_TARGET_DSN: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?sslmode=disable
|
||||
volumes:
|
||||
- ./sql_exporter.yml:/etc/sql_exporter/sql_exporter.yml:ro
|
||||
command: ["-config.file=/etc/sql_exporter/sql_exporter.yml"]
|
||||
ports:
|
||||
- "127.0.0.1:9399:9399"
|
||||
restart: unless-stopped
|
||||
|
||||
db:
|
||||
image: postgres:18
|
||||
container_name: chat-relay-db
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
shm_size: 256mb # parallel workers need more than the 64 MB default
|
||||
volumes:
|
||||
# PG18+ keeps PGDATA in a version-specific subdirectory of this volume.
|
||||
- pgdata:/var/lib/postgresql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
# Tuning for ~5 GB RAM / 4 cores. Match to the actual server.
|
||||
command:
|
||||
- postgres
|
||||
- --max_connections=100
|
||||
- --shared_buffers=1280MB
|
||||
- --effective_cache_size=3840MB
|
||||
- --maintenance_work_mem=320MB
|
||||
- --checkpoint_completion_target=0.9
|
||||
- --wal_buffers=16MB
|
||||
- --default_statistics_target=100
|
||||
- --random_page_cost=1.1
|
||||
- --effective_io_concurrency=200
|
||||
- --work_mem=6301kB
|
||||
- --huge_pages=off
|
||||
- --jit=off
|
||||
- --wal_compression=lz4
|
||||
- --min_wal_size=1GB
|
||||
- --max_wal_size=4GB
|
||||
- --max_worker_processes=4
|
||||
- --max_parallel_workers_per_gather=2
|
||||
- --max_parallel_workers=4
|
||||
- --max_parallel_maintenance_workers=2
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
Executable
+105
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Save the relay address on first start, then exec the relay.
|
||||
|
||||
The address is printed only when it is created, and is not stored in the
|
||||
database in its displayed form, so it is captured from the relay's output.
|
||||
"""
|
||||
import os
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
BIN = "simplex-chat-relay"
|
||||
WEB_ROOT = "/var/www/relay-web-channels"
|
||||
ADDR_FILE = "/out/relay-address.txt"
|
||||
CAPTURE_TIMEOUT = 180 # seconds
|
||||
DEFAULT_RTS_OPTS = "-N -F1.2 -A16m -I0.01 -Iw15"
|
||||
DEFAULT_POOL_SIZE = "4" # the binary defaults to a single connection
|
||||
DEFAULT_QUEUE_SIZE = "65536"
|
||||
|
||||
|
||||
def require(name):
|
||||
value = os.environ.get(name)
|
||||
if not value:
|
||||
sys.exit(f"{name} is required")
|
||||
return value
|
||||
|
||||
|
||||
def rts_args():
|
||||
"""RELAY_RTS_OPTS holds bare options; the +RTS/-RTS markers are added here."""
|
||||
opts = [
|
||||
o
|
||||
for o in shlex.split(os.environ.get("RELAY_RTS_OPTS") or DEFAULT_RTS_OPTS)
|
||||
if o not in ("+RTS", "-RTS")
|
||||
]
|
||||
return ["+RTS", *opts, "-RTS"] if opts else []
|
||||
|
||||
|
||||
def find_address(text):
|
||||
for token in text.split():
|
||||
if token.startswith("https://") or token.startswith("simplex:"):
|
||||
return token
|
||||
return None
|
||||
|
||||
|
||||
def capture_address(oneshot):
|
||||
"""Create the address if needed and save it. Runs before the relay starts."""
|
||||
cmd = oneshot + ["--create-schema", "-t", "0", "-e", "/sa"]
|
||||
try:
|
||||
out = subprocess.run(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
text=True,
|
||||
errors="replace",
|
||||
timeout=CAPTURE_TIMEOUT,
|
||||
).stdout
|
||||
except subprocess.TimeoutExpired as exc:
|
||||
out = exc.stdout or ""
|
||||
sys.stdout.write(out)
|
||||
sys.stdout.flush()
|
||||
|
||||
address = find_address(out)
|
||||
if address:
|
||||
with open(ADDR_FILE, "w") as f:
|
||||
f.write(address + "\n")
|
||||
else:
|
||||
sys.stderr.write("entrypoint: relay address not captured; will retry next start\n")
|
||||
|
||||
|
||||
def main():
|
||||
name = require("RELAY_NAME")
|
||||
domain = require("RELAY_WEB_DOMAIN")
|
||||
conn = require("DB_CONN")
|
||||
image_file = os.environ.get("RELAY_IMAGE_FILE")
|
||||
|
||||
os.makedirs(f"{WEB_ROOT}/channel", exist_ok=True)
|
||||
os.makedirs("/out", exist_ok=True)
|
||||
|
||||
common = [BIN, "--relay", "--headless", "--user-display-name", name]
|
||||
|
||||
# Only applied when the address is created, which the one-shot below does.
|
||||
address_server = os.environ.get("RELAY_ADDRESS_SERVER")
|
||||
if address_server:
|
||||
common += ["--relay-address-server", address_server]
|
||||
|
||||
# The image is applied only when the profile is created.
|
||||
if not os.path.exists(ADDR_FILE):
|
||||
oneshot = common + (["--user-image-file", image_file] if image_file else []) + ["-d", conn]
|
||||
capture_address(oneshot)
|
||||
|
||||
relay = common + [
|
||||
"--relay-web-domain", domain,
|
||||
"--relay-web-dir", f"{WEB_ROOT}/channel",
|
||||
"--relay-web-cors-file", f"{WEB_ROOT}/cors.conf",
|
||||
"--relay-web-interval", "30",
|
||||
"-d", conn,
|
||||
"--create-schema",
|
||||
"--pool-size", os.environ.get("RELAY_POOL_SIZE") or DEFAULT_POOL_SIZE,
|
||||
"--queue-size", os.environ.get("RELAY_QUEUE_SIZE") or DEFAULT_QUEUE_SIZE,
|
||||
] + rts_args()
|
||||
os.execvp(relay[0], relay)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,71 @@
|
||||
global:
|
||||
min_interval: 0s
|
||||
max_connections: 3
|
||||
max_idle_connections: 3
|
||||
|
||||
target:
|
||||
name: chat_relay
|
||||
# Replaced by SQLEXPORTER_TARGET_DSN. A non-empty value is required here
|
||||
# because the DSN is validated before environment variables are applied.
|
||||
data_source_name: "postgresql://replaced-by-env"
|
||||
collectors: [chat_relay]
|
||||
|
||||
collectors:
|
||||
- collector_name: chat_relay
|
||||
metrics:
|
||||
- metric_name: chat_relay_channels
|
||||
type: gauge
|
||||
help: "Channels by relay status."
|
||||
key_labels: [status]
|
||||
values: [channels]
|
||||
query: |
|
||||
SELECT relay_own_status AS status, count(*) AS channels
|
||||
FROM simplex_v1_chat_schema.groups
|
||||
WHERE relay_own_status IS NOT NULL
|
||||
GROUP BY relay_own_status
|
||||
|
||||
- metric_name: chat_relay_published_channels
|
||||
type: gauge
|
||||
help: "Served channels that have a public address."
|
||||
values: [channels]
|
||||
query: |
|
||||
SELECT count(*) AS channels
|
||||
FROM simplex_v1_chat_schema.groups g
|
||||
JOIN simplex_v1_chat_schema.group_profiles gp
|
||||
ON gp.group_profile_id = g.group_profile_id
|
||||
WHERE gp.public_group_id IS NOT NULL
|
||||
AND g.relay_own_status IN ('active', 'accepted')
|
||||
|
||||
- metric_name: chat_relay_members
|
||||
type: gauge
|
||||
help: "Members across all channels."
|
||||
values: [members]
|
||||
query: |
|
||||
SELECT count(*) AS members FROM simplex_v1_chat_schema.group_members
|
||||
|
||||
- metric_name: chat_relay_pending_deliveries
|
||||
type: gauge
|
||||
help: "Messages queued for delivery."
|
||||
values: [deliveries]
|
||||
query: |
|
||||
SELECT count(*) AS deliveries
|
||||
FROM simplex_v1_chat_schema.msg_deliveries
|
||||
WHERE delivery_status = 'snd_pending'
|
||||
|
||||
- metric_name: chat_relay_oldest_pending_delivery_seconds
|
||||
type: gauge
|
||||
help: "Age of the oldest message queued for delivery."
|
||||
values: [age]
|
||||
query: |
|
||||
SELECT COALESCE(EXTRACT(EPOCH FROM (now() - min(created_at))), 0) AS age
|
||||
FROM simplex_v1_chat_schema.msg_deliveries
|
||||
WHERE delivery_status = 'snd_pending'
|
||||
|
||||
- metric_name: chat_relay_messages_24h
|
||||
type: gauge
|
||||
help: "Chat items created in the last 24 hours."
|
||||
values: [messages]
|
||||
query: |
|
||||
SELECT count(*) AS messages
|
||||
FROM simplex_v1_chat_schema.chat_items
|
||||
WHERE created_at > now() - interval '24 hours'
|
||||
@@ -211,7 +211,7 @@ markdownP = mconcat <$> A.many' fragmentP
|
||||
Just c -> case c of
|
||||
' ' -> unmarked <$> A.takeWhile (== ' ')
|
||||
'+' -> phoneP <|> wordP
|
||||
'*' -> formattedP '*' Bold
|
||||
'*' -> boldP <|> formattedP '*' Bold
|
||||
'_' -> formattedP '_' Italic
|
||||
'~' -> formattedP '~' StrikeThrough
|
||||
'`' -> formattedP '`' Snippet
|
||||
@@ -233,6 +233,12 @@ markdownP = mconcat <$> A.many' fragmentP
|
||||
| T.null s || T.head s == ' ' || T.last s == ' ' =
|
||||
unmarked $ c `T.cons` s `T.snoc` c
|
||||
| otherwise = markdown f s
|
||||
boldP :: Parser Markdown
|
||||
boldP = do
|
||||
s <- A.string "**" *> A.takeTill (== '*') <* A.string "**"
|
||||
if T.null s || T.head s == ' ' || T.last s == ' '
|
||||
then fail "not bold"
|
||||
else pure $ markdown Bold s
|
||||
secretP :: Parser Markdown
|
||||
secretP = secret <$?> ((,,) <$> A.takeWhile (== '#') <*> A.takeTill (== '#') <*> A.takeWhile1 (== '#'))
|
||||
secret :: (Text, Text, Text) -> Either String Markdown
|
||||
|
||||
+23
-2
@@ -74,6 +74,19 @@ textFormat = describe "text format (bold)" do
|
||||
<==> "this is " <> bold "bold" <> " "
|
||||
"this is *bold* "
|
||||
<==> "this is " <> bold "bold" <> " "
|
||||
it "correct markdown with double asterisk" do
|
||||
"this is **bold formatted** text"
|
||||
==> "this is " <> bold "bold formatted" <> " text"
|
||||
"**bold formatted** text"
|
||||
==> bold "bold formatted" <> " text"
|
||||
"this is **bold**"
|
||||
==> "this is " <> bold "bold"
|
||||
" **bold** text"
|
||||
==> " " <> bold "bold" <> " text"
|
||||
"this is **bold** "
|
||||
==> "this is " <> bold "bold" <> " "
|
||||
"this is **bold** "
|
||||
==> "this is " <> bold "bold" <> " "
|
||||
it "ignored as markdown" do
|
||||
"this is * unformatted * text"
|
||||
<==> "this is * unformatted * text"
|
||||
@@ -81,8 +94,16 @@ textFormat = describe "text format (bold)" do
|
||||
<==> "this is *unformatted * text"
|
||||
"this is * unformatted* text"
|
||||
<==> "this is * unformatted* text"
|
||||
"this is **unformatted** text"
|
||||
<==> "this is **unformatted** text"
|
||||
"this is ** unformatted ** text"
|
||||
<==> "this is ** unformatted ** text"
|
||||
"this is **unformatted ** text"
|
||||
<==> "this is **unformatted ** text"
|
||||
"this is ** unformatted** text"
|
||||
<==> "this is ** unformatted** text"
|
||||
"this is **unformatted text"
|
||||
<==> "this is **unformatted text"
|
||||
"this is **unformatted* text"
|
||||
<==> "this is **unformatted* text"
|
||||
"this is*unformatted* text"
|
||||
<==> "this is*unformatted* text"
|
||||
"this is *unformatted text"
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<article class="mt-10 lg:mt-0">
|
||||
<div class="h-[40px] flex flex-col gap-2 justify-center">
|
||||
<div class="flex gap-2 justify-center">
|
||||
<a href="https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion">
|
||||
<a href="/news">
|
||||
<svg class="fill-primary-light dark:fill-primary-dark" width="32" height="32" viewBox="0 0 54 54" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.585 0C11.9025 0 0 11.9025 0 26.585C0 41.2674 11.9025 53.1699 26.585 53.1699C41.2674 53.1699 53.1699 41.2674 53.1699 26.585C53.1699 11.9025 41.2674 0 26.585 0ZM11.3862 17.3518L17.6366 23.4373L23.9313 17.3088L17.6787 11.2209L20.866 8.1179L27.1187 14.2061L33.4932 8L36.6199 11.044L30.2448 17.25L36.4982 23.3379L42.8733 17.1321L46 20.1761L39.6249 26.3818L45.8789 32.4702L42.6916 35.5732L36.4376 29.4848L30.0631 35.6906L36.3171 41.7791L33.1299 44.8821L26.8759 38.7936L20.5026 45L17.3759 41.956L23.8003 35.693L17.5493 29.6073L11.1255 35.8621L8 32.8194L14.4244 26.5646L8.17397 20.4792L11.3862 17.3518ZM27.0125 32.5656L33.311 26.4408L27.0576 20.3535L27.0568 20.3516L20.7615 26.4799L27.0125 32.5656Z"/>
|
||||
</svg>
|
||||
@@ -108,7 +108,7 @@
|
||||
19.3216 25.0173 19.3216C23.9563 19.3216 23.0902 20.1878 23.0902 21.2488Z" />
|
||||
</svg>
|
||||
</a>
|
||||
<a href="https://twitter.com/simplexchat" target="_blank">
|
||||
<a href="https://x.com/simplexchat" target="_blank">
|
||||
<svg class="fill-primary-light dark:fill-primary-dark" width="32" height="32" viewBox="0 0 41 41" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.4575 40.9268C31.5032 40.9268 40.4575 31.9725 40.4575 20.9268C40.4575 9.88106 31.5032 0.926758 20.4575 0.926758C9.41182 0.926758 0.45752 9.88106 0.45752 20.9268C0.45752 31.9725 9.41182 40.9268 20.4575 40.9268ZM29.916 16.7766C29.916 23.1157 25.014 30.4265 16.0519 30.4265V30.423C13.4038 30.4265 10.8115 29.6795 8.58252 28.2719C8.96846 28.3174 9.35558 28.3397 9.74271 28.3409C11.9372 28.3432 14.0688 27.6182 15.7942 26.283C13.7101 26.2444 11.8802 24.9055 11.2425 22.9507C11.9716 23.0898 12.7245 23.0619 13.4418 22.869C11.1689 22.4165 9.53371 20.4504 9.53252 18.1671V18.1062C10.2106 18.478 10.9694 18.6835 11.7448 18.7057C9.60377 17.2981 8.94233 14.4948 10.2355 12.3026C12.7103 15.2992 16.3606 17.1207 20.2782 17.3147C19.8851 15.6487 20.4231 13.902 21.6878 12.7306C23.6507 10.9137 26.737 11.0073 28.5824 12.9387C29.6737 12.7271 30.7199 12.3327 31.677 11.7738C31.3125 12.8857 30.5513 13.828 29.5348 14.4277C30.5002
|
||||
14.3155 31.4443 14.0609 32.3325 13.6728C31.6782 14.6362 30.8553 15.4781 29.9017 16.1562C29.916 16.362 29.916 16.5685 29.916 16.7766Z" />
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user