Merge branch 'merge-strings'

This commit is contained in:
Davide De Rosa 2021-08-07 14:03:25 +02:00
commit 3ce6678f51
90 changed files with 3834 additions and 4334 deletions

View File

@ -59,7 +59,6 @@
0E36D25C224034AD006AF062 /* ShortcutsConnectToViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E36D25B224034AD006AF062 /* ShortcutsConnectToViewController.swift */; };
0E3CAFC0229AAE770008E5C8 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 0E3CAFAD229AAE760008E5C8 /* Intents.intentdefinition */; };
0E3CAFC4229AAF8E0008E5C8 /* API in Resources */ = {isa = PBXBuildFile; fileRef = 0E3CAFC3229AAF8E0008E5C8 /* API */; };
0E45E6E022BD793800F19312 /* App.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E45E6E222BD793800F19312 /* App.strings */; };
0E45E6E422BD799700F19312 /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E45E6E322BD799700F19312 /* SwiftGen+Strings.swift */; };
0E45E71022BE108100F19312 /* OpenVPNOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E45E70F22BE108100F19312 /* OpenVPNOptions.swift */; };
0E4B0D6B2366E3C100C890B4 /* PurchaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4B0D6A2366E3C000C890B4 /* PurchaseViewController.swift */; };
@ -109,7 +108,6 @@
0E520385259F593B00CBAB56 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 0E569FA4259F41690022DFB8 /* Credits.html */; };
0E520387259F593B00CBAB56 /* TextInputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F97259F41690022DFB8 /* TextInputViewController.swift */; };
0E520388259F593B00CBAB56 /* HostImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F93259F41690022DFB8 /* HostImporter.swift */; };
0E52038F259F593F00CBAB56 /* App.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E569F8D259F41690022DFB8 /* App.strings */; };
0E5203B6259F5F3F00CBAB56 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0ED31C3920CF39510027975F /* NetworkExtension.framework */; };
0E5203BE259F5F3F00CBAB56 /* PassepartoutTunnel.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0E5203B5259F5F3F00CBAB56 /* PassepartoutTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
0E5203F1259F60D600CBAB56 /* PassepartoutCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E5203EA259F60D600CBAB56 /* PassepartoutCore.framework */; };
@ -361,7 +359,6 @@
0E1066C820E0F84A004F98B7 /* Cells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cells.swift; sourceTree = "<group>"; };
0E158AD920E11B0B00C85A82 /* EndpointViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndpointViewController.swift; sourceTree = "<group>"; };
0E1C0A50238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Intents.strings; sourceTree = "<group>"; };
0E1C0A51238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/App.strings; sourceTree = "<group>"; };
0E1C0A52238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
0E1C0A53238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Core.strings; sourceTree = "<group>"; };
0E1D72B1213BFFCF00BA1586 /* ProviderPresetViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProviderPresetViewController.swift; sourceTree = "<group>"; };
@ -375,7 +372,6 @@
0E2B494120FD16540094784C /* TransientStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransientStore.swift; sourceTree = "<group>"; };
0E2C54C3230056C800F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Intents.strings"; sourceTree = "<group>"; };
0E2C54C4230056EF00F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Core.strings"; sourceTree = "<group>"; };
0E2C54C52300570200F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/App.strings"; sourceTree = "<group>"; };
0E2D11B9217DBEDE0096822C /* ConnectionService+Configurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionService+Configurations.swift"; sourceTree = "<group>"; };
0E31529B223F9EF400F61841 /* PassepartoutCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PassepartoutCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0E31529D223F9EF500F61841 /* PassepartoutCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PassepartoutCore.h; sourceTree = "<group>"; };
@ -396,17 +392,7 @@
0E3CAFB3229AAE760008E5C8 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Core.strings; sourceTree = "<group>"; };
0E3CAFB5229AAE760008E5C8 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Core.strings; sourceTree = "<group>"; };
0E3CAFC3229AAF8E0008E5C8 /* API */ = {isa = PBXFileReference; lastKnownFileType = folder; path = API; sourceTree = "<group>"; };
0E45E6E122BD793800F19312 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/App.strings; sourceTree = "<group>"; };
0E45E6E322BD799700F19312 /* SwiftGen+Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Strings.swift"; sourceTree = "<group>"; };
0E45E6F122BD897E00F19312 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F222BD898000F19312 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F322BD898200F19312 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F422BD898300F19312 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F522BD898500F19312 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F622BD898700F19312 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F722BD898800F19312 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F822BD898A00F19312 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/App.strings; sourceTree = "<group>"; };
0E45E6F922BD898B00F19312 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/App.strings; sourceTree = "<group>"; };
0E45E70F22BE108100F19312 /* OpenVPNOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenVPNOptions.swift; sourceTree = "<group>"; };
0E4B0D6A2366E3C000C890B4 /* PurchaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PurchaseViewController.swift; sourceTree = "<group>"; };
0E4B0D752366E6C800C890B4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Purchase.storyboard; sourceTree = "<group>"; };
@ -465,7 +451,6 @@
0E569F8A259F41690022DFB8 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
0E569F8B259F41690022DFB8 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
0E569F8F259F41690022DFB8 /* IssueReporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssueReporter.swift; sourceTree = "<group>"; };
0E569F91259F41690022DFB8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/App.strings; sourceTree = "<group>"; };
0E569F92259F41690022DFB8 /* WindowManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WindowManager.swift; sourceTree = "<group>"; };
0E569F93259F41690022DFB8 /* HostImporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HostImporter.swift; sourceTree = "<group>"; };
0E569F94259F41690022DFB8 /* NSTextView+Search.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextView+Search.swift"; sourceTree = "<group>"; };
@ -544,17 +529,6 @@
0EBE3A9F213DC1A100BFA2F5 /* ConnectionService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionService.swift; sourceTree = "<group>"; };
0EBE3AA3213DC1B000BFA2F5 /* HostConnectionProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HostConnectionProfile.swift; sourceTree = "<group>"; };
0EBE3AA4213DC1B000BFA2F5 /* ProviderConnectionProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProviderConnectionProfile.swift; sourceTree = "<group>"; };
0EBE8D2E25C076F900798607 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9726283DEC007287DD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/App.strings"; sourceTree = "<group>"; };
0EC12E9826283DEE007287DD /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9926283DEF007287DD /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9A26283DF0007287DD /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9B26283DF2007287DD /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9C26283DF3007287DD /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9D26283DF4007287DD /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9E26283DF6007287DD /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/App.strings; sourceTree = "<group>"; };
0EC12E9F26283DF8007287DD /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/App.strings; sourceTree = "<group>"; };
0EC12EA026283DF9007287DD /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/App.strings; sourceTree = "<group>"; };
0EC7F20420E24308004EA58E /* DebugLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugLog.swift; sourceTree = "<group>"; };
0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Assets.swift"; sourceTree = "<group>"; };
0ECEB105224FE51400E9E551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
@ -783,7 +757,6 @@
0E569F59259F41690022DFB8 /* Tables */,
0E569F7E259F41690022DFB8 /* App.entitlements */,
0E569FA8259F41690022DFB8 /* Info.plist */,
0E569F8D259F41690022DFB8 /* App.strings */,
0E569F8B259F41690022DFB8 /* AppDelegate.swift */,
0E569F7F259F41690022DFB8 /* Assets.xcassets */,
0E569FA7259F41690022DFB8 /* Flags.xcassets */,
@ -937,7 +910,6 @@
0E2AC24422EC3AC10037B4B0 /* Settings.bundle */,
0EDE8DE220C86A13004C739C /* App.entitlements */,
0E57F64720C83FC7008323CF /* Info.plist */,
0E45E6E222BD793800F19312 /* App.strings */,
0E0C072B236087A100155AAC /* InfoPlist.strings */,
0E57F63B20C83FC5008323CF /* AppDelegate.swift */,
0E57F64220C83FC7008323CF /* Assets.xcassets */,
@ -1516,7 +1488,6 @@
0E520336259F58F500CBAB56 /* HostServiceView.xib in Resources */,
0E52031D259F58BF00CBAB56 /* Providers.xcassets in Resources */,
0E52047D259F642600CBAB56 /* Preferences.storyboard in Resources */,
0E52038F259F593F00CBAB56 /* App.strings in Resources */,
0E6BA54B25C9EE3A000CDFAC /* Purchase.storyboard in Resources */,
0E520385259F593B00CBAB56 /* Credits.html in Resources */,
0E52047C259F642600CBAB56 /* Service.storyboard in Resources */,
@ -1562,7 +1533,6 @@
0E57F64120C83FC5008323CF /* Main.storyboard in Resources */,
0E4B0D742366E6C800C890B4 /* Purchase.storyboard in Resources */,
0E2AC24522EC3AC10037B4B0 /* Settings.bundle in Resources */,
0E45E6E022BD793800F19312 /* App.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2199,25 +2169,6 @@
name = Intents.intentdefinition;
sourceTree = "<group>";
};
0E45E6E222BD793800F19312 /* App.strings */ = {
isa = PBXVariantGroup;
children = (
0E45E6E122BD793800F19312 /* en */,
0E45E6F122BD897E00F19312 /* it */,
0E45E6F222BD898000F19312 /* de */,
0E45E6F322BD898200F19312 /* ru */,
0E45E6F422BD898300F19312 /* nl */,
0E45E6F522BD898500F19312 /* el */,
0E45E6F622BD898700F19312 /* sv */,
0E45E6F722BD898800F19312 /* fr */,
0E45E6F822BD898A00F19312 /* es */,
0E45E6F922BD898B00F19312 /* pt */,
0E2C54C52300570200F59453 /* zh-Hans */,
0E1C0A51238FFF97009FC087 /* pl */,
);
name = App.strings;
sourceTree = "<group>";
};
0E4B0D762366E6C800C890B4 /* Purchase.storyboard */ = {
isa = PBXVariantGroup;
children = (
@ -2258,25 +2209,6 @@
name = Main.storyboard;
sourceTree = "<group>";
};
0E569F8D259F41690022DFB8 /* App.strings */ = {
isa = PBXVariantGroup;
children = (
0E569F91259F41690022DFB8 /* en */,
0EBE8D2E25C076F900798607 /* it */,
0EC12E9726283DEC007287DD /* zh-Hans */,
0EC12E9826283DEE007287DD /* nl */,
0EC12E9926283DEF007287DD /* fr */,
0EC12E9A26283DF0007287DD /* de */,
0EC12E9B26283DF2007287DD /* el */,
0EC12E9C26283DF3007287DD /* pl */,
0EC12E9D26283DF4007287DD /* pt */,
0EC12E9E26283DF6007287DD /* ru */,
0EC12E9F26283DF8007287DD /* es */,
0EC12EA026283DF9007287DD /* sv */,
);
name = App.strings;
sourceTree = "<group>";
};
0E57F63F20C83FC5008323CF /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (

View File

@ -45,10 +45,10 @@ extension OpenVPN.Digest: UIDescriptible {
extension OpenVPN.CompressionFraming: UIDescriptible {
public var uiDescription: String {
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
switch self {
case .disabled:
return L10n.Core.Global.Values.disabled
return L10n.Global.Values.disabled
case .compLZO:
return V.CompressionFraming.Value.lzo
@ -61,10 +61,10 @@ extension OpenVPN.CompressionFraming: UIDescriptible {
extension OpenVPN.CompressionAlgorithm: UIDescriptible {
public var uiDescription: String {
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
switch self {
case .disabled:
return L10n.Core.Global.Values.disabled
return L10n.Global.Values.disabled
case .LZO:
return V.CompressionAlgorithm.Value.lzo
@ -77,7 +77,7 @@ extension OpenVPN.CompressionAlgorithm: UIDescriptible {
extension OpenVPN.ConfigurationBuilder {
public var uiDescriptionForTLSWrap: String {
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
if let strategy = tlsWrap?.strategy {
switch strategy {
case .auth:
@ -87,45 +87,45 @@ extension OpenVPN.ConfigurationBuilder {
return V.TlsWrapping.Value.crypt
}
} else {
return L10n.Core.Global.Values.disabled
return L10n.Global.Values.disabled
}
}
public var uiDescriptionForKeepAlive: String {
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
if let keepAlive = keepAliveInterval, keepAlive > 0 {
return V.KeepAlive.Value.seconds(Int(keepAlive))
} else {
return L10n.Core.Global.Values.disabled
return L10n.Global.Values.disabled
}
}
public var uiDescriptionForClientCertificate: String {
let V = L10n.Core.Configuration.Cells.Client.Value.self
let V = L10n.Configuration.Cells.Client.Value.self
return (clientCertificate != nil) ? V.enabled : V.disabled
}
public var uiDescriptionForEKU: String {
let V = L10n.Core.Global.Values.self
let V = L10n.Global.Values.self
return (checksEKU ?? false) ? V.enabled : V.disabled
}
public var uiDescriptionForRenegotiatesAfter: String {
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
if let reneg = renegotiatesAfter, reneg > 0 {
return V.RenegotiationSeconds.Value.after(TimeInterval(reneg).localized)
} else {
return L10n.Core.Global.Values.disabled
return L10n.Global.Values.disabled
}
}
public var uiDescriptionForRandomizeEndpoint: String {
let V = L10n.Core.Global.Values.self
let V = L10n.Global.Values.self
return (randomizeEndpoint ?? false) ? V.enabled : V.disabled
}
public var uiDescriptionForXOR: String {
let V = L10n.Core.Global.Values.self
let V = L10n.Global.Values.self
guard let mask = xorMask, mask != 0 else {
return V.disabled
}
@ -138,13 +138,13 @@ extension NetworkChoice: CustomStringConvertible {
public var description: String {
switch self {
case .client:
return L10n.Core.NetworkChoice.client
return L10n.NetworkChoice.client
case .server:
return L10n.Core.NetworkChoice.server
return L10n.NetworkChoice.server
case .manual:
return L10n.Core.Global.Values.manual
return L10n.Global.Values.manual
}
}
}
@ -168,16 +168,16 @@ extension VPNStatus: UIDescriptible {
public var uiDescription: String {
switch self {
case .connecting:
return L10n.Core.Vpn.connecting
return L10n.Vpn.connecting
case .connected:
return L10n.Core.Vpn.active
return L10n.Vpn.active
case .disconnecting:
return L10n.Core.Vpn.disconnecting
return L10n.Vpn.disconnecting
case .disconnected:
return L10n.Core.Vpn.inactive
return L10n.Vpn.inactive
}
}
}

View File

@ -75,7 +75,7 @@ class HostImporter {
private func alertImportError(_ error: Error, removeOnError: Bool) {
let message = HostImporter.localizedMessage(forError: error)
let alert = UIAlertController.asAlert(configurationURL.normalizedFilename, message)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
viewController?.present(alert, animated: true, completion: nil)
if removeOnError {
@ -85,11 +85,11 @@ class HostImporter {
private func alertImportWarning(_ warning: ConfigurationError, removeOnCancel: Bool, completionHandler: @escaping () -> Void) {
let message = HostImporter.localizedDetailsMessage(forWarning: warning)
let alert = UIAlertController.asAlert(configurationURL.normalizedFilename, L10n.Core.ParsedFile.Alerts.PotentiallyUnsupported.message(message))
alert.addPreferredAction(L10n.Core.Global.ok) {
let alert = UIAlertController.asAlert(configurationURL.normalizedFilename, L10n.ParsedFile.Alerts.PotentiallyUnsupported.message(message))
alert.addPreferredAction(L10n.Global.ok) {
completionHandler()
}
alert.addCancelAction(L10n.Core.Global.cancel) {
alert.addCancelAction(L10n.Global.cancel) {
if removeOnCancel {
try? FileManager.default.removeItem(at: self.configurationURL)
}
@ -98,11 +98,11 @@ class HostImporter {
}
private func enterPassphraseForHost(at url: URL, removeOnError: Bool, removeOnCancel: Bool, completionHandler: @escaping (OpenVPN.ConfigurationParser.Result) -> Void) {
let alert = UIAlertController.asAlert(configurationURL.normalizedFilename, L10n.Core.ParsedFile.Alerts.EncryptionPassphrase.message)
let alert = UIAlertController.asAlert(configurationURL.normalizedFilename, L10n.ParsedFile.Alerts.EncryptionPassphrase.message)
alert.addTextField { (field) in
field.isSecureTextEntry = true
}
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addPreferredAction(L10n.Global.ok) {
guard let passphrase = alert.textFields?.first?.text else {
return
}
@ -113,7 +113,7 @@ class HostImporter {
completionHandler: completionHandler
)
}
alert.addCancelAction(L10n.Core.Global.cancel) {
alert.addCancelAction(L10n.Global.cancel) {
if removeOnCancel {
try? FileManager.default.removeItem(at: url)
}
@ -128,25 +128,25 @@ class HostImporter {
switch appError {
case .malformed(let option):
log.error("Could not parse configuration URL: malformed option, \(option)")
return L10n.Core.ParsedFile.Alerts.Malformed.message(option)
return L10n.ParsedFile.Alerts.Malformed.message(option)
case .missingConfiguration(let option):
log.error("Could not parse configuration URL: missing configuration, \(option)")
return L10n.Core.ParsedFile.Alerts.Missing.message(option)
return L10n.ParsedFile.Alerts.Missing.message(option)
case .unsupportedConfiguration(var option):
if option.contains("external") {
option.append(" (see FAQ)")
}
log.error("Could not parse configuration URL: unsupported configuration, \(option)")
return L10n.Core.ParsedFile.Alerts.Unsupported.message(option)
return L10n.ParsedFile.Alerts.Unsupported.message(option)
default:
break
}
}
log.error("Could not parse configuration URL: \(error)")
return L10n.Core.ParsedFile.Alerts.Parsing.message(error.localizedDescription)
return L10n.ParsedFile.Alerts.Parsing.message(error.localizedDescription)
}
private static func localizedDetailsMessage(forWarning warning: ConfigurationError) -> String {

View File

@ -43,8 +43,8 @@ class IssueReporter: NSObject {
let V = AppConstants.IssueReporter.Email.self
let body = V.body(V.template, DebugLog(raw: "--").decoratedString())
guard let url = URL.mailto(to: V.recipient, subject: V.subject, body: body), app.canOpenURL(url) else {
let alert = UIAlertController.asAlert(L10n.Core.IssueReporter.title, L10n.Core.Global.emailNotConfigured)
alert.addCancelAction(L10n.Core.Global.ok)
let alert = UIAlertController.asAlert(L10n.IssueReporter.title, L10n.Global.emailNotConfigured)
alert.addCancelAction(L10n.Global.ok)
viewController.present(alert, animated: true, completion: nil)
return
}
@ -55,13 +55,13 @@ class IssueReporter: NSObject {
self.viewController = viewController
if issue.debugLog {
let alert = UIAlertController.asAlert(L10n.Core.IssueReporter.title, L10n.Core.IssueReporter.message)
alert.addPreferredAction(L10n.Core.IssueReporter.Buttons.accept) {
let alert = UIAlertController.asAlert(L10n.IssueReporter.title, L10n.IssueReporter.message)
alert.addPreferredAction(L10n.IssueReporter.Buttons.accept) {
VPN.shared.requestDebugLog(fallback: AppConstants.Log.debugSnapshot) {
self.composeEmail(withDebugLog: $0, issue: issue)
}
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addCancelAction(L10n.Global.cancel)
viewController.present(alert, animated: true, completion: nil)
} else {
composeEmail(withDebugLog: nil, issue: issue)

File diff suppressed because it is too large Load Diff

View File

@ -100,18 +100,18 @@ extension SettingTableViewCell {
leftTextColor = theme.palette.primaryText
guard let vpnStatus = vpnStatus else {
rightText = L10n.Core.Vpn.disabled
rightText = L10n.Vpn.disabled
rightTextColor = theme.palette.secondaryText
return
}
switch vpnStatus {
case .connecting:
rightText = L10n.Core.Vpn.connecting
rightText = L10n.Vpn.connecting
rightTextColor = theme.palette.indeterminate
case .connected:
rightText = L10n.Core.Vpn.active
rightText = L10n.Vpn.active
rightTextColor = theme.palette.on
case .disconnecting, .disconnected:
@ -119,34 +119,34 @@ extension SettingTableViewCell {
if let error = error {
switch error {
case .socketActivity, .timeout:
disconnectionReason = L10n.Core.Vpn.Errors.timeout
disconnectionReason = L10n.Vpn.Errors.timeout
case .dnsFailure:
disconnectionReason = L10n.Core.Vpn.Errors.dns
disconnectionReason = L10n.Vpn.Errors.dns
case .tlsInitialization, .tlsServerVerification, .tlsHandshake:
disconnectionReason = L10n.Core.Vpn.Errors.tls
disconnectionReason = L10n.Vpn.Errors.tls
case .authentication:
disconnectionReason = L10n.Core.Vpn.Errors.auth
disconnectionReason = L10n.Vpn.Errors.auth
case .encryptionInitialization, .encryptionData:
disconnectionReason = L10n.Core.Vpn.Errors.encryption
disconnectionReason = L10n.Vpn.Errors.encryption
case .serverCompression, .lzo:
disconnectionReason = L10n.Core.Vpn.Errors.compression
disconnectionReason = L10n.Vpn.Errors.compression
case .networkChanged:
disconnectionReason = L10n.Core.Vpn.Errors.network
disconnectionReason = L10n.Vpn.Errors.network
case .routing:
disconnectionReason = L10n.Core.Vpn.Errors.routing
disconnectionReason = L10n.Vpn.Errors.routing
case .gatewayUnattainable:
disconnectionReason = L10n.Core.Vpn.Errors.gateway
disconnectionReason = L10n.Vpn.Errors.gateway
case .serverShutdown:
disconnectionReason = L10n.Core.Vpn.Errors.shutdown
disconnectionReason = L10n.Vpn.Errors.shutdown
default:
break
@ -154,11 +154,11 @@ extension SettingTableViewCell {
}
switch vpnStatus {
case .disconnecting:
rightText = disconnectionReason ?? L10n.Core.Vpn.disconnecting
rightText = disconnectionReason ?? L10n.Vpn.disconnecting
rightTextColor = theme.palette.indeterminate
case .disconnected:
rightText = disconnectionReason ?? L10n.Core.Vpn.inactive
rightText = disconnectionReason ?? L10n.Vpn.inactive
rightTextColor = theme.palette.off
default:

View File

@ -156,7 +156,7 @@ extension UITextField {
func applyHostTitle(_ theme: Theme) {
applyAlert(theme)
placeholder = L10n.Core.Global.Host.TitleInput.placeholder
placeholder = L10n.Global.Host.TitleInput.placeholder
}
func applyWiFiTitle(_ theme: Theme) {

View File

@ -39,8 +39,8 @@ class AboutViewController: UITableViewController, StrongTableHost {
model.add(.share)
model.setHeader("", forSection: .info)
model.setHeader("GitHub", forSection: .github)
model.setHeader(L10n.Core.About.Sections.Web.header, forSection: .web)
model.setHeader(L10n.Core.About.Sections.Share.header, forSection: .share)
model.setHeader(L10n.About.Sections.Web.header, forSection: .web)
model.setHeader(L10n.About.Sections.Share.header, forSection: .share)
model.set([.version, .credits], forSection: .info)
model.set([.readme, .changelog], forSection: .github)
model.set([.website, .faq, .disclaimer, .privacyPolicy], forSection: .web)
@ -56,7 +56,7 @@ class AboutViewController: UITableViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.About.title
title = L10n.About.title
}
// MARK: Actions
@ -64,7 +64,7 @@ class AboutViewController: UITableViewController, StrongTableHost {
private func showVersion() {
let vc = VersionViewController()
vc.appIcon = Asset.Assets.logo.image
vc.extraText = L10n.Core.Version.Labels.intro
vc.extraText = L10n.Version.Labels.intro
vc.backgroundColor = Theme.current.palette.primaryBackground
vc.textColor = Theme.current.palette.primaryLightText
navigationController?.pushViewController(vc, animated: true)
@ -72,10 +72,10 @@ class AboutViewController: UITableViewController, StrongTableHost {
private func showCredits() {
let vc = CreditsViewController()
vc.title = L10n.Core.Credits.title
vc.licensesHeader = L10n.Core.Credits.Sections.Licenses.header
vc.noticesHeader = L10n.Core.Credits.Sections.Notices.header
vc.translationsHeader = L10n.Core.Credits.Sections.Translations.header
vc.title = L10n.Credits.title
vc.licensesHeader = L10n.Credits.Sections.Licenses.header
vc.noticesHeader = L10n.Credits.Sections.Notices.header
vc.translationsHeader = L10n.Credits.Sections.Translations.header
vc.software = AppConstants.Credits.software
vc.translators = AppConstants.Translations.translators
vc.accentColor = Theme.current.palette.accent1
@ -83,7 +83,7 @@ class AboutViewController: UITableViewController, StrongTableHost {
}
private func inviteFriend(sender: UITableViewCell?) {
let message = "\(L10n.Core.Share.message) \(AppConstants.URLs.website)"
let message = "\(L10n.Share.message) \(AppConstants.URLs.website)"
let vc = UIActivityViewController(activityItems: [message], applicationActivities: nil)
vc.popoverPresentationController?.sourceView = sender
present(vc, animated: true, completion: nil)
@ -159,11 +159,11 @@ extension AboutViewController {
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
switch model.row(at: indexPath) {
case .version:
cell.leftText = L10n.Core.Version.title
cell.leftText = L10n.Version.title
cell.rightText = ApplicationInfo.appVersion
case .credits:
cell.leftText = L10n.Core.About.Cells.Credits.caption
cell.leftText = L10n.About.Cells.Credits.caption
case .readme:
cell.leftText = "README"
@ -172,22 +172,22 @@ extension AboutViewController {
cell.leftText = "CHANGELOG"
case .website:
cell.leftText = L10n.Core.About.Cells.Website.caption
cell.leftText = L10n.About.Cells.Website.caption
case .faq:
cell.leftText = L10n.Core.About.Cells.Faq.caption
cell.leftText = L10n.About.Cells.Faq.caption
case .disclaimer:
cell.leftText = L10n.Core.About.Cells.Disclaimer.caption
cell.leftText = L10n.About.Cells.Disclaimer.caption
case .privacyPolicy:
cell.leftText = L10n.Core.About.Cells.PrivacyPolicy.caption
cell.leftText = L10n.About.Cells.PrivacyPolicy.caption
case .shareTwitter:
cell.leftText = L10n.Core.About.Cells.ShareTwitter.caption
cell.leftText = L10n.About.Cells.ShareTwitter.caption
case .shareGeneric:
cell.leftText = L10n.Core.About.Cells.ShareGeneric.caption
cell.leftText = L10n.About.Cells.ShareGeneric.caption
case .visitAlternativeTo:
cell.leftText = "AlternativeTo"
@ -222,7 +222,7 @@ extension AboutViewController {
visitURL(AppConstants.URLs.privacyPolicy)
case .shareTwitter:
visitURL(AppConstants.URLs.twitterIntent(withMessage: L10n.Core.Share.message))
visitURL(AppConstants.URLs.twitterIntent(withMessage: L10n.Share.message))
case .shareGeneric:
inviteFriend(sender: tableView.cellForRow(at: indexPath))

View File

@ -67,7 +67,7 @@ class AccountViewController: UIViewController, StrongTableHost {
model.clear()
model.add(.credentials)
model.setHeader(L10n.App.Account.Sections.Credentials.header, forSection: .credentials)
model.setHeader(L10n.Account.Sections.Credentials.header, forSection: .credentials)
model.set([.username, .password], forSection: .credentials)
if let _ = infrastructureName {
@ -87,7 +87,7 @@ class AccountViewController: UIViewController, StrongTableHost {
}
// if let _ = referralURL {
// model.add(.registration)
// model.setFooter(L10n.Core.Account.Sections.Registration.footer(name.rawValue), forSection: .registration)
// model.setFooter(L10n.Account.Sections.Registration.footer(name.rawValue), forSection: .registration)
// model.set([.signUp], forSection: .registration)
// }
}
@ -98,7 +98,7 @@ class AccountViewController: UIViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Account.title
title = L10n.Account.title
cellUsername?.field.text = currentCredentials?.username
cellPassword?.field.text = currentCredentials?.password
@ -190,8 +190,8 @@ extension AccountViewController: UITableViewDataSource, UITableViewDelegate, Fie
case .username:
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cellUsername = cell
cell.caption = L10n.Core.Account.Cells.Username.caption
cell.field.placeholder = usernamePlaceholder ?? L10n.Core.Account.Cells.Username.placeholder
cell.caption = L10n.Account.Cells.Username.caption
cell.field.placeholder = usernamePlaceholder ?? L10n.Account.Cells.Username.placeholder
cell.field.clearButtonMode = .always
cell.field.isSecureTextEntry = false
cell.field.text = currentCredentials?.username
@ -205,8 +205,8 @@ extension AccountViewController: UITableViewDataSource, UITableViewDelegate, Fie
case .password:
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cellPassword = cell
cell.caption = L10n.Core.Account.Cells.Password.caption
cell.field.placeholder = L10n.Core.Account.Cells.Password.placeholder
cell.caption = L10n.Account.Cells.Password.caption
cell.field.placeholder = L10n.Account.Cells.Password.placeholder
cell.field.clearButtonMode = .always
cell.field.isSecureTextEntry = true
cell.field.text = currentCredentials?.password
@ -218,7 +218,7 @@ extension AccountViewController: UITableViewDataSource, UITableViewDelegate, Fie
case .openGuide:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Account.Cells.OpenGuide.caption
cell.leftText = L10n.Account.Cells.OpenGuide.caption
cell.applyAction(.current)
return cell
@ -227,7 +227,7 @@ extension AccountViewController: UITableViewDataSource, UITableViewDelegate, Fie
fatalError("Sign-up shown when not a provider profile")
}
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Account.Cells.Signup.caption(name)
cell.leftText = L10n.Account.Cells.Signup.caption(name)
cell.applyAction(.current)
return cell
}

View File

@ -64,14 +64,14 @@ class ConfigurationViewController: UIViewController, StrongTableHost {
}
// headers
model.setHeader(L10n.Core.Configuration.Sections.Communication.header, forSection: .communication)
model.setHeader(L10n.Core.Configuration.Sections.Tls.header, forSection: .tls)
model.setHeader(L10n.Core.Configuration.Sections.Compression.header, forSection: .compression)
model.setHeader(L10n.Core.Configuration.Sections.Other.header, forSection: .other)
model.setHeader(L10n.Configuration.Sections.Communication.header, forSection: .communication)
model.setHeader(L10n.Configuration.Sections.Tls.header, forSection: .tls)
model.setHeader(L10n.Configuration.Sections.Compression.header, forSection: .compression)
model.setHeader(L10n.Configuration.Sections.Other.header, forSection: .other)
// footers
if isEditable {
model.setFooter(L10n.Core.Configuration.Sections.Reset.footer, forSection: .reset)
model.setFooter(L10n.Configuration.Sections.Reset.footer, forSection: .reset)
}
// rows
@ -190,17 +190,17 @@ class ConfigurationViewController: UIViewController, StrongTableHost {
}
private func askForResetConfigurationWithPassphrase(_ originalURL: URL) {
let alert = UIAlertController.asAlert(nil, L10n.Core.ParsedFile.Alerts.EncryptionPassphrase.message)
let alert = UIAlertController.asAlert(nil, L10n.ParsedFile.Alerts.EncryptionPassphrase.message)
alert.addTextField { (field) in
field.isSecureTextEntry = true
}
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addPreferredAction(L10n.Global.ok) {
guard let passphrase = alert.textFields?.first?.text else {
return
}
self.resetOriginalConfiguration(passphrase: passphrase)
}
alert.addCancelAction(L10n.Core.Global.cancel) {
alert.addCancelAction(L10n.Global.cancel) {
}
present(alert, animated: true, completion: nil)
}
@ -279,7 +279,7 @@ extension ConfigurationViewController: UITableViewDataSource, UITableViewDelegat
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let row = model.row(at: indexPath)
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
if !isEditable {

View File

@ -44,7 +44,7 @@ class DebugLogViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Service.Cells.DebugLog.caption
title = L10n.Service.Cells.DebugLog.caption
textLog?.contentInsetAdjustmentBehavior = .never
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(toggleBars))
@ -79,8 +79,8 @@ class DebugLogViewController: UIViewController {
@IBAction private func share(_ sender: Any?) {
guard let raw = textLog?.text, !raw.isEmpty else {
let alert = UIAlertController.asAlert(title, L10n.Core.DebugLog.Alerts.EmptyLog.message)
alert.addCancelAction(L10n.Core.Global.ok)
let alert = UIAlertController.asAlert(title, L10n.DebugLog.Alerts.EmptyLog.message)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
return
}

View File

@ -67,8 +67,8 @@ class EndpointViewController: UIViewController, StrongTableHost {
model.add(.locationAddresses)
model.add(.locationProtocols)
model.setHeader(L10n.App.Endpoint.Sections.LocationAddresses.header, forSection: .locationAddresses)
model.setHeader(L10n.App.Endpoint.Sections.LocationProtocols.header, forSection: .locationProtocols)
model.setHeader(L10n.Endpoint.Sections.LocationAddresses.header, forSection: .locationAddresses)
model.setHeader(L10n.Endpoint.Sections.LocationProtocols.header, forSection: .locationProtocols)
if dataSource.canCustomizeEndpoint {
var addressRows: [RowType] = Array(repeating: .availableAddress, count: dataSource.addresses.count)
@ -94,7 +94,7 @@ class EndpointViewController: UIViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Endpoint.title
title = L10n.Endpoint.title
guard let _ = dataSource else {
fatalError("Data source not set")
}
@ -203,7 +203,7 @@ extension EndpointViewController: UITableViewDataSource, UITableViewDelegate {
switch row {
case .anyAddress:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Endpoint.Cells.AnyAddress.caption
cell.leftText = L10n.Endpoint.Cells.AnyAddress.caption
cell.accessoryType = .none
cell.isTappable = true
if let _ = currentAddress {
@ -230,7 +230,7 @@ extension EndpointViewController: UITableViewDataSource, UITableViewDelegate {
case .anyProtocol:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Endpoint.Cells.AnyProtocol.caption
cell.leftText = L10n.Endpoint.Cells.AnyProtocol.caption
cell.accessoryType = .none
cell.isTappable = true
if let _ = currentProtocol {

View File

@ -91,12 +91,12 @@ class NetworkSettingsViewController: UITableViewController {
// headers
model.setHeader("", forSection: .choices)
model.setHeader(L10n.Core.NetworkSettings.Gateway.title, forSection: .manualGateway)
model.setHeader(L10n.Core.NetworkSettings.Proxy.title, forSection: .manualProxy)
model.setHeader(L10n.Core.NetworkSettings.Mtu.title, forSection: .manualMTU)
model.setHeader(L10n.NetworkSettings.Gateway.title, forSection: .manualGateway)
model.setHeader(L10n.NetworkSettings.Proxy.title, forSection: .manualProxy)
model.setHeader(L10n.NetworkSettings.Mtu.title, forSection: .manualMTU)
// footers
// model.setFooter(L10n.Core.Configuration.Sections.Reset.footer, for: .reset)
// model.setFooter(L10n.Configuration.Sections.Reset.footer, for: .reset)
// rows
model.set([.gateway, .dns, .proxy, .mtu], forSection: .choices)
@ -135,7 +135,7 @@ class NetworkSettingsViewController: UITableViewController {
model.set(proxyRows, forSection: .manualProxy)
// refine sections before add (DNS is tricky)
model.setHeader(L10n.Core.NetworkSettings.Dns.title, forSection: .manualDNSProtocol)
model.setHeader(L10n.NetworkSettings.Dns.title, forSection: .manualDNSProtocol)
if !dnsServers.isEmpty {
} else if !dnsDomains.isEmpty {
sections.removeAll { $0 == .manualDNSServers }
@ -405,25 +405,25 @@ extension NetworkSettingsViewController {
switch row {
case .gateway:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.NetworkSettings.Gateway.title
cell.leftText = L10n.NetworkSettings.Gateway.title
cell.rightText = networkChoices.gateway.description
return cell
case .dns:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.NetworkSettings.Dns.title
cell.leftText = L10n.NetworkSettings.Dns.title
cell.rightText = networkChoices.dns.description
return cell
case .proxy:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.NetworkSettings.Proxy.title
cell.leftText = L10n.NetworkSettings.Proxy.title
cell.rightText = networkChoices.proxy.description
return cell
case .mtu:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.NetworkSettings.Mtu.title
cell.leftText = L10n.NetworkSettings.Mtu.title
cell.rightText = (networkChoices.mtu ?? ProfileNetworkChoices.defaultChoice).description
return cell
@ -443,7 +443,7 @@ extension NetworkSettingsViewController {
case .dnsProtocol:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Global.Captions.protocol
cell.leftText = L10n.Global.Captions.protocol
cell.rightText = (networkSettings.dnsProtocol ?? .fallback)?.description
if networkChoices.dns == .manual {
cell.accessoryType = .disclosureIndicator
@ -481,9 +481,9 @@ extension NetworkSettingsViewController {
let i = indexPath.row - Offsets.dnsAddress
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.Core.Global.Captions.address
cell.caption = L10n.Global.Captions.address
cell.field.tag = FieldTag.dnsAddress.rawValue + i
cell.field.placeholder = L10n.Core.Global.Values.none
cell.field.placeholder = L10n.Global.Values.none
cell.field.text = networkSettings.dnsServers?[i]
cell.field.clearButtonMode = .always
cell.field.keyboardType = .numbersAndPunctuation
@ -495,16 +495,16 @@ extension NetworkSettingsViewController {
case .dnsAddAddress:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.NetworkSettings.Cells.AddDnsServer.caption
cell.leftText = L10n.NetworkSettings.Cells.AddDnsServer.caption
return cell
case .dnsDomain:
let i = indexPath.row - Offsets.dnsDomain
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.Core.NetworkSettings.Dns.Cells.Domain.caption
cell.caption = L10n.NetworkSettings.Dns.Cells.Domain.caption
cell.field.tag = FieldTag.dnsDomain.rawValue + i
cell.field.placeholder = L10n.Core.Global.Values.none
cell.field.placeholder = L10n.Global.Values.none
cell.field.text = networkSettings.dnsSearchDomains?[i]
cell.field.clearButtonMode = .always
cell.field.keyboardType = .asciiCapable
@ -516,14 +516,14 @@ extension NetworkSettingsViewController {
case .dnsAddDomain:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.NetworkSettings.Cells.AddDnsDomain.caption
cell.leftText = L10n.NetworkSettings.Cells.AddDnsDomain.caption
return cell
case .proxyAddress:
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.Core.Global.Captions.address
cell.caption = L10n.Global.Captions.address
cell.field.tag = FieldTag.proxyAddress.rawValue
cell.field.placeholder = L10n.Core.Global.Values.none
cell.field.placeholder = L10n.Global.Values.none
cell.field.text = networkSettings.proxyAddress
cell.field.clearButtonMode = .always
cell.field.keyboardType = .numbersAndPunctuation
@ -534,9 +534,9 @@ extension NetworkSettingsViewController {
case .proxyPort:
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.Core.Global.Captions.port
cell.caption = L10n.Global.Captions.port
cell.field.tag = FieldTag.proxyPort.rawValue
cell.field.placeholder = L10n.Core.Global.Values.none
cell.field.placeholder = L10n.Global.Values.none
cell.field.text = networkSettings.proxyPort?.description
cell.field.clearButtonMode = .always
cell.field.keyboardType = .numberPad
@ -549,7 +549,7 @@ extension NetworkSettingsViewController {
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = "PAC"
cell.field.tag = FieldTag.proxyAutoConfigurationURL.rawValue
cell.field.placeholder = L10n.Core.Global.Values.none
cell.field.placeholder = L10n.Global.Values.none
cell.field.text = networkSettings.proxyAutoConfigurationURL?.absoluteString
cell.field.clearButtonMode = .always
cell.field.keyboardType = .asciiCapable
@ -562,9 +562,9 @@ extension NetworkSettingsViewController {
let i = indexPath.row - Offsets.proxyBypass
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.App.NetworkSettings.Cells.ProxyBypass.caption
cell.caption = L10n.NetworkSettings.Cells.ProxyBypass.caption
cell.field.tag = FieldTag.proxyBypass.rawValue + i
cell.field.placeholder = L10n.Core.Global.Values.none
cell.field.placeholder = L10n.Global.Values.none
cell.field.text = networkSettings.proxyBypassDomains?[i]
cell.field.clearButtonMode = .always
cell.field.keyboardType = .asciiCapable
@ -576,13 +576,13 @@ extension NetworkSettingsViewController {
case .proxyAddBypass:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.NetworkSettings.Cells.AddProxyBypass.caption
cell.leftText = L10n.NetworkSettings.Cells.AddProxyBypass.caption
return cell
case .mtuBytes:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.NetworkSettings.Mtu.Cells.Bytes.caption
cell.rightText = networkSettings.mtuBytes?.description ?? L10n.Core.Global.Values.default
cell.leftText = L10n.NetworkSettings.Mtu.Cells.Bytes.caption
cell.rightText = networkSettings.mtuBytes?.description ?? L10n.Global.Values.default
return cell
}
}
@ -706,7 +706,7 @@ extension NetworkSettingsViewController {
vc.options = ProfileNetworkSettings.mtuOptions
vc.descriptionBlock = {
guard $0 != 0 else {
return L10n.Core.Global.Values.default
return L10n.Global.Values.default
}
return $0.description
}

View File

@ -57,8 +57,8 @@ class DonationViewController: UITableViewController, StrongTableHost {
model.clear()
model.add(.oneTime)
model.setHeader(L10n.Core.Donation.Sections.OneTime.header, forSection: .oneTime)
model.setFooter(L10n.Core.Donation.Sections.OneTime.footer, forSection: .oneTime)
model.setHeader(L10n.Donation.Sections.OneTime.header, forSection: .oneTime)
model.setFooter(L10n.Donation.Sections.OneTime.footer, forSection: .oneTime)
guard !isLoading else {
model.set([.loading], forSection: .oneTime)
@ -79,7 +79,7 @@ class DonationViewController: UITableViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Donation.title
title = L10n.Donation.title
reloadModel()
ProductManager.shared.listProducts {
@ -118,12 +118,12 @@ class DonationViewController: UITableViewController, StrongTableHost {
switch model.row(at: indexPath) {
case .loading:
let cell = Cells.activity.dequeue(from: tableView, for: indexPath)
cell.textLabel?.text = L10n.Core.Donation.Cells.Loading.caption
cell.textLabel?.text = L10n.Donation.Cells.Loading.caption
return cell
case .purchasing:
let cell = Cells.activity.dequeue(from: tableView, for: indexPath)
cell.textLabel?.text = L10n.Core.Donation.Cells.Purchasing.caption
cell.textLabel?.text = L10n.Donation.Cells.Purchasing.caption
return cell
case .donation:
@ -174,12 +174,12 @@ class DonationViewController: UITableViewController, StrongTableHost {
return
case .success:
alert = UIAlertController.asAlert(L10n.Core.Donation.Alerts.Purchase.Success.title, L10n.Core.Donation.Alerts.Purchase.Success.message)
alert = UIAlertController.asAlert(L10n.Donation.Alerts.Purchase.Success.title, L10n.Donation.Alerts.Purchase.Success.message)
case .failure:
alert = UIAlertController.asAlert(title, L10n.Core.Donation.Alerts.Purchase.Failure.message(error?.localizedDescription ?? ""))
alert = UIAlertController.asAlert(title, L10n.Donation.Alerts.Purchase.Failure.message(error?.localizedDescription ?? ""))
}
alert.addCancelAction(L10n.Core.Global.ok) {
alert.addCancelAction(L10n.Global.ok) {
self.isPurchasing = false
self.reloadModel()
self.tableView.reloadData()

View File

@ -42,7 +42,7 @@ class ImportedHostsViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.App.ImportedHosts.title
title = L10n.ImportedHosts.title
}
private func selectHost(withUrl url: URL) {

View File

@ -61,22 +61,22 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
model.add(.support)
if ProductManager.shared.isEligibleForFeedback() {
model.add(.feedback)
model.setHeader(L10n.Core.Organizer.Sections.Feedback.header, forSection: .feedback)
model.setHeader(L10n.Organizer.Sections.Feedback.header, forSection: .feedback)
model.set([.writeReview], forSection: .feedback)
}
model.add(.about)
model.add(.destruction)
model.setHeader(L10n.App.Service.Sections.Vpn.header, forSection: .vpn)
model.setHeader(L10n.Core.Organizer.Sections.Providers.header, forSection: .providers)
model.setHeader(L10n.Core.Organizer.Sections.Hosts.header, forSection: .hosts)
model.setFooter(L10n.Core.Organizer.Sections.Providers.footer, forSection: .providers)
model.setFooter(L10n.Core.Organizer.Sections.Hosts.footer, forSection: .hosts)
model.setHeader(L10n.Service.Sections.Vpn.header, forSection: .vpn)
model.setHeader(L10n.Organizer.Sections.Providers.header, forSection: .providers)
model.setHeader(L10n.Organizer.Sections.Hosts.header, forSection: .hosts)
model.setFooter(L10n.Organizer.Sections.Providers.footer, forSection: .providers)
model.setFooter(L10n.Organizer.Sections.Hosts.footer, forSection: .hosts)
if #available(iOS 12, *) {
model.setHeader(L10n.Core.Organizer.Sections.Siri.header, forSection: .siri)
model.setFooter(L10n.Core.Organizer.Sections.Siri.footer, forSection: .siri)
model.setHeader(L10n.Organizer.Sections.Siri.header, forSection: .siri)
model.setFooter(L10n.Organizer.Sections.Siri.footer, forSection: .siri)
model.set([.siriShortcuts], forSection: .siri)
}
model.setHeader(L10n.Core.Organizer.Sections.Support.header, forSection: .support)
model.setHeader(L10n.Organizer.Sections.Support.header, forSection: .support)
model.set([.connectionStatus], forSection: .vpn)
model.set([.donate, .githubSponsors, .joinCommunity], forSection: .support)
@ -136,15 +136,15 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
if !didShowSubreddit && !TransientStore.didHandleSubreddit {
didShowSubreddit = true
let alert = UIAlertController.asAlert(L10n.Core.Reddit.title, L10n.Core.Reddit.message)
alert.addPreferredAction(L10n.Core.Reddit.Buttons.subscribe) {
let alert = UIAlertController.asAlert(L10n.Reddit.title, L10n.Reddit.message)
alert.addPreferredAction(L10n.Reddit.Buttons.subscribe) {
TransientStore.didHandleSubreddit = true
self.subscribeSubreddit()
}
alert.addAction(L10n.Core.Reddit.Buttons.never) {
alert.addAction(L10n.Reddit.Buttons.never) {
TransientStore.didHandleSubreddit = true
}
alert.addCancelAction(L10n.Core.Reddit.Buttons.remind)
alert.addCancelAction(L10n.Reddit.Buttons.remind)
present(alert, animated: true, completion: nil)
}
}
@ -198,10 +198,10 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
private func addNewProvider() {
guard service.hasAvailableProviders() else {
let alert = UIAlertController.asAlert(
L10n.Core.Organizer.Sections.Providers.header,
L10n.Core.Organizer.Alerts.ExhaustedProviders.message
L10n.Organizer.Sections.Providers.header,
L10n.Organizer.Alerts.ExhaustedProviders.message
)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
return
}
@ -243,10 +243,10 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
private func donateToDeveloper() {
guard SKPaymentQueue.canMakePayments() else {
let alert = UIAlertController.asAlert(
L10n.Core.Organizer.Cells.Donate.caption,
L10n.Core.Organizer.Alerts.CannotDonate.message
L10n.Organizer.Cells.Donate.caption,
L10n.Organizer.Alerts.CannotDonate.message
)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
return
}
@ -262,8 +262,8 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
guard MFMailComposeViewController.canSendMail() else {
let app = UIApplication.shared
guard let url = URL.mailto(to: recipient, subject: subject, body: body), app.canOpenURL(url) else {
let alert = UIAlertController.asAlert(L10n.Core.Translations.title, L10n.Core.Global.emailNotConfigured)
alert.addCancelAction(L10n.Core.Global.ok)
let alert = UIAlertController.asAlert(L10n.Translations.title, L10n.Global.emailNotConfigured)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
return
}
@ -335,13 +335,13 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
private func confirmVpnProfileDeletion() {
let alert = UIAlertController.asAlert(
L10n.Core.Organizer.Cells.Uninstall.caption,
L10n.Core.Organizer.Alerts.DeleteVpnProfile.message
L10n.Organizer.Cells.Uninstall.caption,
L10n.Organizer.Alerts.DeleteVpnProfile.message
)
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addPreferredAction(L10n.Global.ok) {
VPN.shared.uninstall(completionHandler: nil)
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addCancelAction(L10n.Global.cancel)
present(alert, animated: true, completion: nil)
}
@ -362,7 +362,7 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
private func testInterfaces() {
let alert = UIAlertController.asAlert("Test interfaces", nil)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
defer {
present(alert, animated: true, completion: nil)
}
@ -390,7 +390,7 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
return
}
let alert = UIAlertController.asAlert("Debug log", log)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
}
@ -496,7 +496,7 @@ extension OrganizerViewController {
case .connectionStatus:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyVPN(.current, with: VPN.shared.isEnabled ? VPN.shared.status : nil, error: nil)
cell.leftText = L10n.Core.Service.Cells.ConnectionStatus.caption
cell.leftText = L10n.Service.Cells.ConnectionStatus.caption
return cell
case .profile:
@ -509,67 +509,67 @@ extension OrganizerViewController {
cell.imageView?.image = nil
}
cell.leftText = service.screenTitle(rowProfile)
cell.rightText = service.isActiveProfile(rowProfile) ? L10n.Core.Organizer.Cells.Profile.Value.current : nil
cell.rightText = service.isActiveProfile(rowProfile) ? L10n.Organizer.Cells.Profile.Value.current : nil
return cell
case .addProvider:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.Organizer.Cells.AddProvider.caption
cell.leftText = L10n.Organizer.Cells.AddProvider.caption
return cell
case .addHost:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.Organizer.Cells.AddHost.caption
cell.leftText = L10n.Organizer.Cells.AddHost.caption
return cell
case .importHost:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.Organizer.Cells.ImportHost.caption
cell.leftText = L10n.Organizer.Cells.ImportHost.caption
return cell
case .siriShortcuts:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.Core.Organizer.Cells.SiriShortcuts.caption
cell.leftText = L10n.Organizer.Cells.SiriShortcuts.caption
return cell
case .donate:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Organizer.Cells.Donate.caption
cell.leftText = L10n.Organizer.Cells.Donate.caption
return cell
case .githubSponsors:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Organizer.Cells.GithubSponsors.caption
cell.leftText = L10n.Organizer.Cells.GithubSponsors.caption
return cell
case .translate:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Organizer.Cells.Translate.caption
cell.leftText = L10n.Organizer.Cells.Translate.caption
return cell
case .joinCommunity:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Organizer.Cells.JoinCommunity.caption
cell.leftText = L10n.Organizer.Cells.JoinCommunity.caption
return cell
case .writeReview:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Organizer.Cells.WriteReview.caption
cell.leftText = L10n.Organizer.Cells.WriteReview.caption
return cell
case .openAbout:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Organizer.Cells.About.caption(GroupConstants.App.name)
cell.leftText = L10n.Organizer.Cells.About.caption(GroupConstants.App.name)
cell.rightText = ApplicationInfo.appVersion
return cell
case .uninstall:
let cell = Cells.destructive.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.Core.Organizer.Cells.Uninstall.caption
cell.caption = L10n.Organizer.Cells.Uninstall.caption
return cell
case .testInterfaces:

View File

@ -55,10 +55,10 @@ class WizardHostViewController: UITableViewController, StrongTableHost {
lazy var model: StrongTableModel<SectionType, RowType> = {
let model: StrongTableModel<SectionType, RowType> = StrongTableModel()
model.add(.meta)
// model.setFooter(L10n.Core.Global.Host.TitleInput.message, forSection: .meta)
// model.setFooter(L10n.Global.Host.TitleInput.message, forSection: .meta)
if !existingHostIds.isEmpty {
model.add(.existing)
model.setHeader(L10n.App.Wizards.Host.Sections.Existing.header, forSection: .existing)
model.setHeader(L10n.Wizards.Host.Sections.Existing.header, forSection: .existing)
}
model.set([.titleInput], forSection: .meta)
model.set(.existingHost, count: existingHostIds.count, forSection: .existing)
@ -73,8 +73,8 @@ class WizardHostViewController: UITableViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Organizer.Sections.Hosts.header
itemNext.title = L10n.Core.Global.next
title = L10n.Organizer.Sections.Hosts.header
itemNext.title = L10n.Global.next
}
override func viewWillAppear(_ animated: Bool) {
@ -114,11 +114,11 @@ class WizardHostViewController: UITableViewController, StrongTableHost {
replacedProfile = nil
if let existingProfile = service.hostProfile(withTitle: enteredTitle) {
replacedProfile = existingProfile
let alert = UIAlertController.asAlert(title, L10n.Core.Wizards.Host.Alerts.Existing.message)
alert.addPreferredAction(L10n.Core.Global.ok) {
let alert = UIAlertController.asAlert(title, L10n.Wizards.Host.Alerts.Existing.message)
alert.addPreferredAction(L10n.Global.ok) {
self.next(withProfile: profile, title: enteredTitle)
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addCancelAction(L10n.Global.cancel)
present(alert, animated: true, completion: nil)
return
}
@ -211,7 +211,7 @@ extension WizardHostViewController {
switch model.row(at: indexPath) {
case .titleInput:
let cell = Cells.field.dequeue(from: tableView, for: indexPath)
cell.caption = L10n.App.Wizards.Host.Cells.TitleInput.caption
cell.caption = L10n.Wizards.Host.Cells.TitleInput.caption
cell.captionWidth = 100.0
// cell.allowedCharset = .filename
cell.field.applyHostTitle(.current)

View File

@ -63,7 +63,7 @@ class WizardProviderViewController: UITableViewController, StrongTableHost {
let nc = NotificationCenter.default
nc.addObserver(self, selector: #selector(didReloadReceipt), name: ProductManager.didReloadReceipt, object: nil)
title = L10n.Core.Organizer.Sections.Providers.header
title = L10n.Organizer.Sections.Providers.header
reloadModel()
}
@ -115,7 +115,7 @@ class WizardProviderViewController: UITableViewController, StrongTableHost {
}
private func alertMissingInfrastructure(forMetadata metadata: Infrastructure.Metadata, error: Error?) {
var message = L10n.Core.Wizards.Provider.Alerts.Unavailable.message
var message = L10n.Wizards.Provider.Alerts.Unavailable.message
if let error = error {
log.error("Unable to download missing \(metadata.description) infrastructure (network error): \(error.localizedDescription)")
message.append(" \(error.localizedDescription)")
@ -124,7 +124,7 @@ class WizardProviderViewController: UITableViewController, StrongTableHost {
}
let alert = UIAlertController.asAlert(metadata.description, message)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
if let ip = tableView.indexPathForSelectedRow {
@ -197,7 +197,7 @@ extension WizardProviderViewController {
case .updateList:
cell.applyAction(.current)
cell.imageView?.image = nil
cell.leftText = L10n.Core.Wizards.Provider.Cells.UpdateList.caption
cell.leftText = L10n.Wizards.Provider.Cells.UpdateList.caption
}
return cell
}

View File

@ -79,7 +79,7 @@ class ProviderPoolViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Service.Cells.Provider.Pool.caption
title = L10n.Service.Cells.Provider.Pool.caption
tableView.reloadData()
if let ip = selectedIndexPath {
tableView.selectRowAsync(at: ip)
@ -181,7 +181,7 @@ extension ProviderPoolViewController: UITableViewDataSource, UITableViewDelegate
func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
if isShowingEmptyFavorites {
return L10n.App.Provider.Pool.Sections.EmptyFavorites.footer
return L10n.Provider.Pool.Sections.EmptyFavorites.footer
}
return nil
}
@ -232,7 +232,7 @@ extension ProviderPoolViewController: UITableViewDataSource, UITableViewDelegate
vc.title = group.localizedCountry
vc.options = group.pools.sortedPools()
vc.selectedOption = currentPool
vc.descriptionBlock = { !$0.secondaryId.isEmpty ? $0.secondaryId : L10n.Core.Global.Values.default }
vc.descriptionBlock = { !$0.secondaryId.isEmpty ? $0.secondaryId : L10n.Global.Values.default }
vc.selectionBlock = {
self.currentPool = $0
self.delegate?.providerPoolController(self, didSelectPool: $0)
@ -251,12 +251,12 @@ extension ProviderPoolViewController: UITableViewDataSource, UITableViewDelegate
let action: UIContextualAction
if favoriteGroupIds.contains(groupId) {
action = UIContextualAction(style: .destructive, title: L10n.App.Provider.Pool.Actions.unfavorite) {
action = UIContextualAction(style: .destructive, title: L10n.Provider.Pool.Actions.unfavorite) {
self.unfavoriteGroup(in: category, withId: groupId, deletingRowAt: self.isShowingFavorites ? indexPath : nil)
$2(true)
}
} else if !isShowingFavorites {
action = UIContextualAction(style: .normal, title: L10n.App.Provider.Pool.Actions.favorite) {
action = UIContextualAction(style: .normal, title: L10n.Provider.Pool.Actions.favorite) {
self.favoriteGroup(withId: groupId)
$2(true)
}

View File

@ -48,7 +48,7 @@ class ProviderPresetViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Service.Cells.Provider.Preset.caption
title = L10n.Service.Cells.Provider.Preset.caption
tableView.reloadData()
if let ip = selectedIndexPath {
tableView.scrollToRowAsync(at: ip)
@ -88,7 +88,7 @@ extension ProviderPresetViewController: UITableViewDataSource, UITableViewDelega
}
// func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
// return L10n.Core.Provider.Preset.Sections.Main.footer
// return L10n.Provider.Preset.Sections.Main.footer
// }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
@ -107,7 +107,7 @@ extension ProviderPresetViewController: UITableViewDataSource, UITableViewDelega
case .techDetails:
cell.applyAction(.current)
cell.leftText = L10n.App.Provider.Preset.Cells.TechDetails.caption
cell.leftText = L10n.Provider.Preset.Cells.TechDetails.caption
cell.accessoryType = .none
}
return cell

View File

@ -59,7 +59,7 @@ class PurchaseViewController: UITableViewController, StrongTableHost {
func reloadModel() {
model.clear()
model.add(.products)
model.setFooter(L10n.Core.Purchase.Sections.Products.footer, forSection: .products)
model.setFooter(L10n.Purchase.Sections.Products.footer, forSection: .products)
var rows: [RowType] = []
let pm = ProductManager.shared
@ -94,7 +94,7 @@ class PurchaseViewController: UITableViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Purchase.title
title = L10n.Purchase.title
navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(close))
isLoading = true
@ -172,7 +172,7 @@ class PurchaseViewController: UITableViewController, StrongTableHost {
log.error("Unable to purchase \(product): \(error)")
let alert = UIAlertController.asAlert(product.localizedTitle, error.localizedDescription)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
}
@ -234,8 +234,8 @@ extension PurchaseViewController {
case .restore:
cell.fill(
title: L10n.Core.Purchase.Cells.Restore.title,
description: L10n.Core.Purchase.Cells.Restore.description
title: L10n.Purchase.Cells.Restore.title,
description: L10n.Purchase.Cells.Restore.description
)
}
return cell

View File

@ -102,8 +102,8 @@ class ServerNetworkViewController: UITableViewController, StrongTableHost {
// headers
model.setHeader("IPv4", forSection: .ipv4)
model.setHeader("IPv6", forSection: .ipv6)
model.setHeader(L10n.Core.NetworkSettings.Dns.title, forSection: .dns)
model.setHeader(L10n.Core.NetworkSettings.Proxy.title, forSection: .proxy)
model.setHeader(L10n.NetworkSettings.Dns.title, forSection: .dns)
model.setHeader(L10n.NetworkSettings.Proxy.title, forSection: .proxy)
return model
}()
@ -182,22 +182,22 @@ extension ServerNetworkViewController {
case .ipv4:
switch row {
case .address:
cell.leftText = L10n.Core.Global.Captions.address
cell.leftText = L10n.Global.Captions.address
if let ipv4 = configuration.ipv4 {
cell.rightText = "\(ipv4.address)/\(ipv4.addressMask)"
} else {
cell.rightText = L10n.Core.Global.Values.none
cell.rightText = L10n.Global.Values.none
}
case .defaultGateway:
cell.leftText = L10n.Core.NetworkSettings.Gateway.title
cell.rightText = configuration.ipv4?.defaultGateway ?? L10n.Core.Global.Values.none
cell.leftText = L10n.NetworkSettings.Gateway.title
cell.rightText = configuration.ipv4?.defaultGateway ?? L10n.Global.Values.none
case .route:
guard let route = configuration.ipv4?.routes[indexPath.row - indexOfFirstRoute4] else {
fatalError("Got an IPv4 route cell with empty routes")
}
cell.leftText = L10n.Core.ServerNetwork.Cells.Route.caption
cell.leftText = L10n.ServerNetwork.Cells.Route.caption
cell.rightText = "\(route.destination)/\(route.mask) -> \(route.gateway)"
default:
@ -207,22 +207,22 @@ extension ServerNetworkViewController {
case .ipv6:
switch row {
case .address:
cell.leftText = L10n.Core.Global.Captions.address
cell.leftText = L10n.Global.Captions.address
if let ipv6 = configuration.ipv6 {
cell.rightText = "\(ipv6.address)/\(ipv6.addressPrefixLength)"
} else {
cell.rightText = L10n.Core.Global.Values.none
cell.rightText = L10n.Global.Values.none
}
case .defaultGateway:
cell.leftText = L10n.Core.NetworkSettings.Gateway.title
cell.rightText = configuration.ipv6?.defaultGateway ?? L10n.Core.Global.Values.none
cell.leftText = L10n.NetworkSettings.Gateway.title
cell.rightText = configuration.ipv6?.defaultGateway ?? L10n.Global.Values.none
case .route:
guard let route = configuration.ipv6?.routes[indexPath.row - indexOfFirstRoute6] else {
fatalError("Got an IPv6 route cell with empty routes")
}
cell.leftText = L10n.Core.ServerNetwork.Cells.Route.caption
cell.leftText = L10n.ServerNetwork.Cells.Route.caption
cell.rightText = "\(route.destination)/\(route.prefixLength) -> \(route.gateway)"
default:
@ -239,21 +239,21 @@ extension ServerNetworkViewController {
guard let domain = configuration.searchDomains?[indexPath.row] else {
fatalError("Got DNS search domain with empty search domains")
}
cell.leftText = L10n.Core.NetworkSettings.Dns.Cells.Domain.caption
cell.leftText = L10n.NetworkSettings.Dns.Cells.Domain.caption
cell.rightText = domain
case .dnsAddress:
guard let server = configuration.dnsServers?[indexPath.row - indexOfFirstDNSAddress] else {
fatalError("Got DNS server with empty servers")
}
cell.leftText = L10n.Core.Global.Captions.address
cell.leftText = L10n.Global.Captions.address
cell.rightText = server
case .proxyAddress:
guard let proxy = configuration.httpsProxy ?? configuration.httpProxy else {
fatalError("Got proxy section without a proxy")
}
cell.leftText = L10n.Core.Global.Captions.address
cell.leftText = L10n.Global.Captions.address
cell.rightText = "\(proxy.address):\(proxy.port)"
case .proxyAutoConfigurationURL:
@ -267,7 +267,7 @@ extension ServerNetworkViewController {
guard let domain = configuration.proxyBypassDomains?[indexPath.row - indexOfFirstProxyBypassDomain] else {
fatalError("Got proxy bypass domain with empty domains")
}
cell.leftText = L10n.App.NetworkSettings.Cells.ProxyBypass.caption
cell.leftText = L10n.NetworkSettings.Cells.ProxyBypass.caption
cell.rightText = domain
default:

View File

@ -108,7 +108,7 @@ class ServiceViewController: UIViewController, StrongTableHost {
navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
navigationItem.leftItemsSupplementBackButton = true
labelWelcome.text = L10n.Core.Service.Welcome.message
labelWelcome.text = L10n.Service.Welcome.message
labelWelcome.apply(.current)
let nc = NotificationCenter.default
@ -190,14 +190,14 @@ class ServiceViewController: UIViewController, StrongTableHost {
case .hostParametersSegueIdentifier:
let vc = destination as? ConfigurationViewController
vc?.title = L10n.App.Service.Cells.Host.Parameters.caption
vc?.title = L10n.Service.Cells.Host.Parameters.caption
vc?.initialConfiguration = uncheckedHostProfile.parameters.sessionConfiguration
vc?.originalConfigurationURL = service.configurationURL(for: uncheckedHostProfile)
vc?.delegate = self
case .networkSettingsSegueIdentifier:
let vc = destination as? NetworkSettingsViewController
vc?.title = L10n.Core.NetworkSettings.title
vc?.title = L10n.NetworkSettings.title
vc?.profile = profile
case .serverNetworkSegueIdentifier:
@ -234,19 +234,19 @@ class ServiceViewController: UIViewController, StrongTableHost {
}
@IBAction private func renameProfile() {
let alert = UIAlertController.asAlert(L10n.Core.Service.Alerts.Rename.title, nil)
let alert = UIAlertController.asAlert(L10n.Service.Alerts.Rename.title, nil)
alert.addTextField { (field) in
field.text = self.service.screenTitle(ProfileKey(self.uncheckedProfile))
field.applyHostTitle(.current)
field.delegate = self
}
pendingRenameAction = alert.addPreferredAction(L10n.Core.Global.ok) {
pendingRenameAction = alert.addPreferredAction(L10n.Global.ok) {
guard let newTitle = alert.textFields?.first?.text else {
return
}
self.confirmRenameCurrentProfile(to: newTitle)
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addCancelAction(L10n.Global.cancel)
pendingRenameAction?.isEnabled = false
present(alert, animated: true, completion: nil)
}
@ -256,11 +256,11 @@ class ServiceViewController: UIViewController, StrongTableHost {
return
}
if let existingProfile = service.hostProfile(withTitle: newTitle) {
let alert = UIAlertController.asAlert(L10n.Core.Service.Alerts.Rename.title, L10n.Core.Wizards.Host.Alerts.Existing.message)
alert.addPreferredAction(L10n.Core.Global.ok) {
let alert = UIAlertController.asAlert(L10n.Service.Alerts.Rename.title, L10n.Wizards.Host.Alerts.Existing.message)
alert.addPreferredAction(L10n.Global.ok) {
self.doReplaceProfile(profile, to: newTitle, existingProfile: existingProfile)
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addCancelAction(L10n.Global.cancel)
present(alert, animated: true, completion: nil)
return
}
@ -290,10 +290,10 @@ class ServiceViewController: UIViewController, StrongTableHost {
}
guard !service.needsCredentials(for: uncheckedProfile) else {
let alert = UIAlertController.asAlert(
L10n.App.Service.Sections.Vpn.header,
L10n.Core.Service.Alerts.CredentialsNeeded.message
L10n.Service.Sections.Vpn.header,
L10n.Service.Alerts.CredentialsNeeded.message
)
alert.addCancelAction(L10n.Core.Global.ok) {
alert.addCancelAction(L10n.Global.ok) {
cell.setOn(false, animated: true)
}
present(alert, animated: true, completion: nil)
@ -328,13 +328,13 @@ class ServiceViewController: UIViewController, StrongTableHost {
private func confirmVpnReconnection() {
guard vpn.status == .disconnected else {
let alert = UIAlertController.asAlert(
L10n.Core.Service.Cells.ConnectionStatus.caption,
L10n.Core.Service.Alerts.ReconnectVpn.message
L10n.Service.Cells.ConnectionStatus.caption,
L10n.Service.Alerts.ReconnectVpn.message
)
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addPreferredAction(L10n.Global.ok) {
self.vpn.reconnect(completionHandler: nil)
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addCancelAction(L10n.Global.cancel)
present(alert, animated: true, completion: nil)
return
}
@ -420,11 +420,11 @@ class ServiceViewController: UIViewController, StrongTableHost {
case .denied:
isPendingTrustedWiFi = false
let alert = UIAlertController.asAlert(
L10n.App.Service.Cells.TrustedAddWifi.caption,
L10n.App.Service.Alerts.Location.Message.denied
L10n.Service.Cells.TrustedAddWifi.caption,
L10n.Service.Alerts.Location.Message.denied
)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addPreferredAction(L10n.App.Service.Alerts.Location.Button.settings) {
alert.addCancelAction(L10n.Global.ok)
alert.addPreferredAction(L10n.Service.Alerts.Location.Button.settings) {
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
}
present(alert, animated: true, completion: nil)
@ -443,14 +443,14 @@ class ServiceViewController: UIViewController, StrongTableHost {
IntentDispatcher.donateUntrustCurrentNetwork()
}
let alert = UIAlertController.asAlert(L10n.Core.Service.Sections.Trusted.header, nil)
let alert = UIAlertController.asAlert(L10n.Service.Sections.Trusted.header, nil)
alert.addTextField { (field) in
field.text = Utils.currentWifiNetworkName() ?? ""
field.applyWiFiTitle(.current)
field.delegate = self
}
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addPreferredAction(L10n.App.Service.Cells.TrustedAddWifi.caption) {
alert.addCancelAction(L10n.Global.cancel)
alert.addPreferredAction(L10n.Service.Cells.TrustedAddWifi.caption) {
guard let wifi = alert.textFields?.first?.text else {
return
}
@ -499,13 +499,13 @@ class ServiceViewController: UIViewController, StrongTableHost {
return
}
let alert = UIAlertController.asAlert(
L10n.Core.Service.Sections.Trusted.header,
L10n.Core.Service.Alerts.Trusted.WillDisconnectPolicy.message
L10n.Service.Sections.Trusted.header,
L10n.Service.Alerts.Trusted.WillDisconnectPolicy.message
)
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addPreferredAction(L10n.Global.ok) {
completionHandler()
}
alert.addCancelAction(L10n.Core.Global.cancel) {
alert.addCancelAction(L10n.Global.cancel) {
sender.setOn(false, animated: true)
}
present(alert, animated: true, completion: nil)
@ -513,13 +513,13 @@ class ServiceViewController: UIViewController, StrongTableHost {
private func confirmPotentialTrustedDisconnection(at rowIndex: Int?, completionHandler: @escaping () -> Void) {
let alert = UIAlertController.asAlert(
L10n.Core.Service.Sections.Trusted.header,
L10n.Core.Service.Alerts.Trusted.WillDisconnectTrusted.message
L10n.Service.Sections.Trusted.header,
L10n.Service.Alerts.Trusted.WillDisconnectTrusted.message
)
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addPreferredAction(L10n.Global.ok) {
completionHandler()
}
alert.addCancelAction(L10n.Core.Global.cancel) {
alert.addCancelAction(L10n.Global.cancel) {
guard let rowIndex = rowIndex else {
return
}
@ -535,12 +535,12 @@ class ServiceViewController: UIViewController, StrongTableHost {
Utils.checkConnectivityURL(AppConstants.Services.connectivityURL, timeout: AppConstants.Services.connectivityTimeout) {
hud.hide()
let V = L10n.Core.Service.Alerts.TestConnectivity.Messages.self
let V = L10n.Service.Alerts.TestConnectivity.Messages.self
let alert = UIAlertController.asAlert(
L10n.Core.Service.Alerts.TestConnectivity.title,
L10n.Service.Alerts.TestConnectivity.title,
$0 ? V.success : V.failure
)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
self.present(alert, animated: true, completion: nil)
}
}
@ -548,10 +548,10 @@ class ServiceViewController: UIViewController, StrongTableHost {
// private func displayDataCount() {
// guard vpn.isEnabled else {
// let alert = UIAlertController.asAlert(
// L10n.Core.Service.Cells.DataCount.caption,
// L10n.Core.Service.Alerts.DataCount.Messages.notAvailable
// L10n.Service.Cells.DataCount.caption,
// L10n.Service.Alerts.DataCount.Messages.notAvailable
// )
// alert.addCancelAction(L10n.Core.Global.ok)
// alert.addCancelAction(L10n.Global.ok)
// present(alert, animated: true, completion: nil)
// return
// }
@ -559,21 +559,21 @@ class ServiceViewController: UIViewController, StrongTableHost {
// vpn.requestBytesCount {
// let message: String
// if let count = $0 {
// message = L10n.Core.Service.Alerts.DataCount.Messages.current(Int(count.0), Int(count.1))
// message = L10n.Service.Alerts.DataCount.Messages.current(Int(count.0), Int(count.1))
// } else {
// message = L10n.Core.Service.Alerts.DataCount.Messages.notAvailable
// message = L10n.Service.Alerts.DataCount.Messages.notAvailable
// }
// let alert = UIAlertController.asAlert(
// L10n.Core.Service.Cells.DataCount.caption,
// L10n.Service.Cells.DataCount.caption,
// message
// )
// alert.addCancelAction(L10n.Core.Global.ok)
// alert.addCancelAction(L10n.Global.ok)
// self.present(alert, animated: true, completion: nil)
// }
// }
private func discloseServerConfiguration() {
let caption = L10n.Core.Service.Cells.ServerConfiguration.caption
let caption = L10n.Service.Cells.ServerConfiguration.caption
tryRequestServerConfiguration(withCaption: caption) { [weak self] in
let vc = StoryboardScene.Main.configurationIdentifier.instantiate()
vc.title = caption
@ -584,7 +584,7 @@ class ServiceViewController: UIViewController, StrongTableHost {
}
private func discloseServerNetwork() {
let caption = L10n.Core.Service.Cells.ServerNetwork.caption
let caption = L10n.Service.Cells.ServerNetwork.caption
tryRequestServerConfiguration(withCaption: caption) { [weak self] in
let vc = StoryboardScene.Main.serverNetworkViewController.instantiate()
vc.title = caption
@ -598,9 +598,9 @@ class ServiceViewController: UIViewController, StrongTableHost {
guard let cfg = $0 as? OpenVPN.Configuration else {
let alert = UIAlertController.asAlert(
caption,
L10n.Core.Service.Alerts.Configuration.disconnected
L10n.Service.Alerts.Configuration.disconnected
)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
self?.present(alert, animated: true, completion: nil)
return
}
@ -616,15 +616,15 @@ class ServiceViewController: UIViewController, StrongTableHost {
guard vpn.status == .disconnected else {
let alert = UIAlertController.asAlert(
L10n.Core.Service.Cells.MasksPrivateData.caption,
L10n.Core.Service.Alerts.MasksPrivateData.Messages.mustReconnect
L10n.Service.Cells.MasksPrivateData.caption,
L10n.Service.Alerts.MasksPrivateData.Messages.mustReconnect
)
alert.addDestructiveAction(L10n.Core.Service.Alerts.Buttons.reconnect) {
alert.addDestructiveAction(L10n.Service.Alerts.Buttons.reconnect) {
handler()
self.shouldDeleteLogOnDisconnection = true
self.vpn.reconnect(completionHandler: nil)
}
alert.addCancelAction(L10n.Core.Global.cancel) {
alert.addCancelAction(L10n.Global.cancel) {
cell.setOn(!cell.isOn, animated: true)
}
present(alert, animated: true, completion: nil)
@ -650,11 +650,11 @@ class ServiceViewController: UIViewController, StrongTableHost {
}
let alert = UIAlertController.asAlert(
L10n.Core.Service.Alerts.Download.title,
L10n.Core.Service.Alerts.Download.message(providerProfile.name)
L10n.Service.Alerts.Download.title,
L10n.Service.Alerts.Download.message(providerProfile.name)
)
alert.addCancelAction(L10n.Core.Global.cancel)
alert.addPreferredAction(L10n.Core.Global.ok) {
alert.addCancelAction(L10n.Global.cancel)
alert.addPreferredAction(L10n.Global.ok) {
self.confirmDownload(URL(string: downloadURL)!)
}
present(alert, animated: true, completion: nil)
@ -669,15 +669,15 @@ class ServiceViewController: UIViewController, StrongTableHost {
private func handleDownloadedProviderResources(url: URL?, error: Error?) {
guard let url = url else {
let alert = UIAlertController.asAlert(
L10n.Core.Service.Alerts.Download.title,
L10n.Core.Service.Alerts.Download.failed(error?.localizedDescription ?? "")
L10n.Service.Alerts.Download.title,
L10n.Service.Alerts.Download.failed(error?.localizedDescription ?? "")
)
alert.addCancelAction(L10n.Core.Global.ok)
alert.addCancelAction(L10n.Global.ok)
present(alert, animated: true, completion: nil)
return
}
let hud = HUD(view: view.window!, label: L10n.Core.Service.Alerts.Download.Hud.extracting)
let hud = HUD(view: view.window!, label: L10n.Service.Alerts.Download.Hud.extracting)
hud.show()
uncheckedProviderProfile.name.importExternalResources(from: url) {
hud.hide()
@ -863,7 +863,7 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
let rows = model.rows(forSection: section)
if rows.contains(.providerRefresh), let date = lastInfrastructureUpdate {
return L10n.Core.Service.Sections.ProviderInfrastructure.footer(date.timestamp)
return L10n.Service.Sections.ProviderInfrastructure.footer(date.timestamp)
}
return model.footer(forSection: section)
}
@ -882,7 +882,7 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .useProfile:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.Core.Service.Cells.UseProfile.caption
cell.leftText = L10n.Service.Cells.UseProfile.caption
return cell
case .vpnService:
@ -891,7 +891,7 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
}
let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self)
cell.caption = L10n.App.Service.Cells.VpnService.caption
cell.caption = L10n.Service.Cells.VpnService.caption
cell.isOn = vpn.isEnabled
return cell
@ -902,7 +902,7 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyVPN(.current, with: vpn.isEnabled ? vpn.status : nil, error: service.vpnLastError)
cell.leftText = L10n.Core.Service.Cells.ConnectionStatus.caption
cell.leftText = L10n.Service.Cells.ConnectionStatus.caption
cell.accessoryType = .none
cell.isTappable = false
return cell
@ -910,7 +910,7 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .reconnect:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.Core.Service.Cells.Reconnect.caption
cell.leftText = L10n.Service.Cells.Reconnect.caption
cell.accessoryType = .none
cell.isTappable = !service.needsCredentials(for: uncheckedProfile) && vpn.isEnabled
return cell
@ -919,15 +919,15 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .account:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Account.title
cell.leftText = L10n.Account.title
cell.rightText = profile?.username
return cell
case .endpoint:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Endpoint.title
cell.leftText = L10n.Endpoint.title
let V = L10n.Core.Global.Values.self
let V = L10n.Global.Values.self
if let provider = profile as? ProviderConnectionProfile {
cell.rightText = provider.usesCustomEndpoint ? V.manual : V.automatic
} else {
@ -937,27 +937,27 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .networkSettings:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.NetworkSettings.title
cell.leftText = L10n.NetworkSettings.title
return cell
// provider cells
case .providerPool:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.Provider.Pool.caption
cell.leftText = L10n.Service.Cells.Provider.Pool.caption
cell.rightText = uncheckedProviderProfile.pool?.localizedId
return cell
case .providerPreset:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.Provider.Preset.caption
cell.leftText = L10n.Service.Cells.Provider.Preset.caption
cell.rightText = uncheckedProviderProfile.preset?.name // XXX: localize?
return cell
case .providerRefresh:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.Service.Cells.Provider.Refresh.caption
cell.leftText = L10n.Service.Cells.Provider.Refresh.caption
return cell
// host cells
@ -965,7 +965,7 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .hostParameters:
let parameters = uncheckedHostProfile.parameters
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.App.Service.Cells.Host.Parameters.caption
cell.leftText = L10n.Service.Cells.Host.Parameters.caption
if !parameters.sessionConfiguration.fallbackCipher.embedsDigest {
cell.rightText = "\(parameters.sessionConfiguration.fallbackCipher.genericName) / \(parameters.sessionConfiguration.fallbackDigest.genericName)"
} else {
@ -977,19 +977,19 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .vpnResolvesHostname:
let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self)
cell.caption = L10n.Core.Service.Cells.VpnResolvesHostname.caption
cell.caption = L10n.Service.Cells.VpnResolvesHostname.caption
cell.isOn = service.preferences.resolvesHostname
return cell
case .vpnSurvivesSleep:
let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self)
cell.caption = L10n.Core.Service.Cells.VpnSurvivesSleep.caption
cell.caption = L10n.Service.Cells.VpnSurvivesSleep.caption
cell.isOn = !service.preferences.disconnectsOnSleep
return cell
case .trustedMobile:
let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self)
cell.caption = L10n.Core.Service.Cells.TrustedMobile.caption
cell.caption = L10n.Service.Cells.TrustedMobile.caption
cell.isOn = uncheckedProfile.trustedNetworks.includesMobile
return cell
@ -1003,12 +1003,12 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .trustedAddCurrentWiFi:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.applyAction(.current)
cell.leftText = L10n.App.Service.Cells.TrustedAddWifi.caption
cell.leftText = L10n.Service.Cells.TrustedAddWifi.caption
return cell
case .trustedPolicy:
let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self)
cell.caption = L10n.Core.Service.Cells.TrustedPolicy.caption
cell.caption = L10n.Service.Cells.TrustedPolicy.caption
cell.isOn = (uncheckedProfile.trustedNetworks.policy == .disconnect)
return cell
@ -1016,18 +1016,18 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .testConnectivity:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.TestConnectivity.caption
cell.leftText = L10n.Service.Cells.TestConnectivity.caption
return cell
case .dataCount:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.DataCount.caption
cell.leftText = L10n.Service.Cells.DataCount.caption
if let count = currentDataCount, vpn.status == .connected {
let down = count.0.dataUnitDescription
let up = count.1.dataUnitDescription
cell.rightText = "\(down) / ↑\(up)"
} else {
cell.rightText = L10n.Core.Service.Cells.DataCount.none
cell.rightText = L10n.Service.Cells.DataCount.none
}
cell.accessoryType = .none
cell.isTappable = false
@ -1035,22 +1035,22 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .serverConfiguration:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.ServerConfiguration.caption
cell.leftText = L10n.Service.Cells.ServerConfiguration.caption
return cell
case .serverNetwork:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.ServerNetwork.caption
cell.leftText = L10n.Service.Cells.ServerNetwork.caption
return cell
case .debugLog:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.DebugLog.caption
cell.leftText = L10n.Service.Cells.DebugLog.caption
return cell
case .masksPrivateData:
let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self)
cell.caption = L10n.Core.Service.Cells.MasksPrivateData.caption
cell.caption = L10n.Service.Cells.MasksPrivateData.caption
cell.isOn = TransientStore.masksPrivateData
return cell
@ -1058,12 +1058,12 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
case .faq:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.About.Cells.Faq.caption
cell.leftText = L10n.About.Cells.Faq.caption
return cell
case .reportIssue:
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
cell.leftText = L10n.Core.Service.Cells.ReportIssue.caption
cell.leftText = L10n.Service.Cells.ReportIssue.caption
return cell
}
}
@ -1238,31 +1238,31 @@ extension ServiceViewController: UITableViewDataSource, UITableViewDelegate, Tog
}
// headers
model.setHeader(L10n.App.Service.Sections.Vpn.header, forSection: .vpn)
model.setHeader(L10n.Service.Sections.Vpn.header, forSection: .vpn)
if isProvider {
model.setHeader(L10n.App.Service.Sections.Configuration.header, forSection: .authentication)
model.setHeader(L10n.Service.Sections.Configuration.header, forSection: .authentication)
} else {
model.setHeader(L10n.App.Service.Sections.Configuration.header, forSection: .configuration)
model.setHeader(L10n.Service.Sections.Configuration.header, forSection: .configuration)
}
if isActiveProfile {
if isProvider {
model.setHeader("", forSection: .vpnResolvesHostname)
model.setHeader("", forSection: .vpnSurvivesSleep)
}
model.setHeader(L10n.Core.Service.Sections.Trusted.header, forSection: .trusted)
model.setHeader(L10n.Core.Service.Sections.Diagnostics.header, forSection: .diagnostics)
model.setHeader(L10n.Core.Organizer.Sections.Feedback.header, forSection: .feedback)
model.setHeader(L10n.Service.Sections.Trusted.header, forSection: .trusted)
model.setHeader(L10n.Service.Sections.Diagnostics.header, forSection: .diagnostics)
model.setHeader(L10n.Organizer.Sections.Feedback.header, forSection: .feedback)
}
// footers
if isActiveProfile {
model.setFooter(L10n.Core.Service.Sections.Vpn.footer, forSection: .vpn)
model.setFooter(L10n.Service.Sections.Vpn.footer, forSection: .vpn)
if isProvider {
model.setFooter(L10n.Core.Service.Sections.VpnResolvesHostname.footer, forSection: .vpnResolvesHostname)
model.setFooter(L10n.Service.Sections.VpnResolvesHostname.footer, forSection: .vpnResolvesHostname)
}
model.setFooter(L10n.Core.Service.Sections.VpnSurvivesSleep.footer, forSection: .vpnSurvivesSleep)
model.setFooter(L10n.Core.Service.Sections.Trusted.footer, forSection: .trustedPolicy)
model.setFooter(L10n.Core.Service.Sections.Diagnostics.footer, forSection: .diagnostics)
model.setFooter(L10n.Service.Sections.VpnSurvivesSleep.footer, forSection: .vpnSurvivesSleep)
model.setFooter(L10n.Service.Sections.Trusted.footer, forSection: .trustedPolicy)
model.setFooter(L10n.Service.Sections.Diagnostics.footer, forSection: .diagnostics)
}
// rows

View File

@ -42,9 +42,9 @@ class ShortcutsAddViewController: UITableViewController, StrongTableHost {
model.set([.connect, .enableVPN, .disableVPN], forSection: .vpn)
model.set([.trustCurrentWiFi, .untrustCurrentWiFi], forSection: .wifi)
model.set([.trustCellular, .untrustCellular], forSection: .cellular)
model.setHeader(L10n.Core.Shortcuts.Add.Sections.Vpn.header, forSection: .vpn)
model.setHeader(L10n.Core.Shortcuts.Add.Sections.Wifi.header, forSection: .wifi)
model.setHeader(L10n.Core.Shortcuts.Add.Sections.Cellular.header, forSection: .cellular)
model.setHeader(L10n.Shortcuts.Add.Sections.Vpn.header, forSection: .vpn)
model.setHeader(L10n.Shortcuts.Add.Sections.Wifi.header, forSection: .wifi)
model.setHeader(L10n.Shortcuts.Add.Sections.Cellular.header, forSection: .cellular)
return model
}()
@ -56,7 +56,7 @@ class ShortcutsAddViewController: UITableViewController, StrongTableHost {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.App.Shortcuts.Add.title
title = L10n.Shortcuts.Add.title
}
// MARK: UITableViewController
@ -101,25 +101,25 @@ class ShortcutsAddViewController: UITableViewController, StrongTableHost {
let cell = Cells.setting.dequeue(from: tableView, for: indexPath)
switch model.row(at: indexPath) {
case .connect:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.Connect.caption
cell.leftText = L10n.Shortcuts.Add.Cells.Connect.caption
case .enableVPN:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.EnableVpn.caption
cell.leftText = L10n.Shortcuts.Add.Cells.EnableVpn.caption
case .disableVPN:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.DisableVpn.caption
cell.leftText = L10n.Shortcuts.Add.Cells.DisableVpn.caption
case .trustCurrentWiFi:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.TrustCurrentWifi.caption
cell.leftText = L10n.Shortcuts.Add.Cells.TrustCurrentWifi.caption
case .untrustCurrentWiFi:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.UntrustCurrentWifi.caption
cell.leftText = L10n.Shortcuts.Add.Cells.UntrustCurrentWifi.caption
case .trustCellular:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.TrustCellular.caption
cell.leftText = L10n.Shortcuts.Add.Cells.TrustCellular.caption
case .untrustCellular:
cell.leftText = L10n.Core.Shortcuts.Add.Cells.UntrustCellular.caption
cell.leftText = L10n.Shortcuts.Add.Cells.UntrustCellular.caption
}
return cell
}
@ -160,10 +160,10 @@ class ShortcutsAddViewController: UITableViewController, StrongTableHost {
private func addConnect() {
guard TransientStore.shared.service.hasProfiles() else {
let alert = UIAlertController.asAlert(
L10n.Core.Shortcuts.Add.Cells.Connect.caption,
L10n.Core.Shortcuts.Add.Alerts.NoProfiles.message
L10n.Shortcuts.Add.Cells.Connect.caption,
L10n.Shortcuts.Add.Alerts.NoProfiles.message
)
alert.addAction(L10n.Core.Global.ok) {
alert.addAction(L10n.Global.ok) {
if let ip = self.tableView.indexPathForSelectedRow {
self.tableView.deselectRow(at: ip, animated: true)
}

View File

@ -45,8 +45,8 @@ class ShortcutsConnectToViewController: UITableViewController, ProviderPoolViewC
let model: StrongTableModel<SectionType, RowType> = {
let model: StrongTableModel<SectionType, RowType> = StrongTableModel()
model.setHeader(L10n.Core.Organizer.Sections.Providers.header, forSection: .providers)
model.setHeader(L10n.Core.Organizer.Sections.Hosts.header, forSection: .hosts)
model.setHeader(L10n.Organizer.Sections.Providers.header, forSection: .providers)
model.setHeader(L10n.Organizer.Sections.Hosts.header, forSection: .hosts)
return model
}()
@ -69,7 +69,7 @@ class ShortcutsConnectToViewController: UITableViewController, ProviderPoolViewC
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Shortcuts.Add.Cells.Connect.caption
title = L10n.Shortcuts.Add.Cells.Connect.caption
reloadModel()
}

View File

@ -76,7 +76,7 @@ class ShortcutsViewController: UITableViewController, INUIAddVoiceShortcutViewCo
let model: StrongTableModel<SectionType, RowType> = {
let model: StrongTableModel<SectionType, RowType> = StrongTableModel()
model.add(.all)
model.setHeader(L10n.Core.Shortcuts.Edit.Sections.All.header, forSection: .all)
model.setHeader(L10n.Shortcuts.Edit.Sections.All.header, forSection: .all)
model.set([], forSection: .all)
return model
}()
@ -92,7 +92,7 @@ class ShortcutsViewController: UITableViewController, INUIAddVoiceShortcutViewCo
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Organizer.Cells.SiriShortcuts.caption
title = L10n.Organizer.Cells.SiriShortcuts.caption
INVoiceShortcutCenter.shared.getAllVoiceShortcuts { [weak self] (shortcuts, error) in
DispatchQueue.main.async {
@ -122,9 +122,9 @@ class ShortcutsViewController: UITableViewController, INUIAddVoiceShortcutViewCo
// TODO: really show it?
// let alert = UIAlertController.asAlert(
// title,
// L10n.Core.Shortcuts.Edit.message(error?.localizedDescription ?? "")
// L10n.Shortcuts.Edit.message(error?.localizedDescription ?? "")
// )
// alert.addCancelAction(L10n.Core.Global.ok) {
// alert.addCancelAction(L10n.Global.ok) {
// self.close()
// }
// present(alert, animated: true, completion: nil)
@ -192,7 +192,7 @@ class ShortcutsViewController: UITableViewController, INUIAddVoiceShortcutViewCo
case .addShortcut:
cell.applyAction(.current)
cell.leftText = L10n.App.Shortcuts.Edit.Cells.AddShortcut.caption
cell.leftText = L10n.Shortcuts.Edit.Cells.AddShortcut.caption
cell.accessoryType = .none
cell.isTappable = true
}

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 4/23/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Neuen Anbieter hinzufügen";
"organizer.cells.add_host.caption" = "Aus Dateien hinzufügen";
"organizer.cells.import_host.caption" = "Vom Import hinzufügen";
"wizards.host.cells.title_input.caption" = "Titel";
"wizards.host.sections.existing.header" = "Bestehende Profile";
"imported_hosts.title" = "Importierte Hosts";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Verbindung";
"service.sections.configuration.header" = "Konfiguration";
"service.cells.vpn_service.caption" = "Aktiviert";
"service.cells.provider.refresh.caption" = "Infrastruktur neu laden";
"service.cells.host.parameters.caption" = "Parameter";
"service.cells.trusted_add_wifi.caption" = "WLAN hinzufügen";
"service.alerts.location.message.denied" = "Sie müssen den Standortzugriff zulassen, um diesem Wi-Fi-Netzwerk vertrauen zu können. Gehen Sie zu den iOS-Einstellungen und überprüfen Sie Ihre Standortberechtigungen für Passepartout.";
"service.alerts.location.button.settings" = "Einstellungen";
"account.sections.credentials.header" = "Zugangsdaten";
"endpoint.sections.location_addresses.header" = "Adressen";
"endpoint.sections.location_protocols.header" = "Protokolle";
"provider.pool.actions.favorite" = "Favorit hinzuzufügen";
"provider.pool.actions.unfavorite" = "Favorit entfernen";
"provider.pool.sections.empty_favorites.footer" = "Wische nach Links um einen Standort zu den Favoriten hinzuzufügen oder zu entfernen.";
"provider.preset.cells.tech_details.caption" = "Technische Details";
"network_settings.cells.add_dns_server.caption" = "Adresse hinzufügen";
"network_settings.cells.add_dns_domain.caption" = "Domäne hinzufügen";
"network_settings.cells.proxy_bypass.caption" = "Domäne umgehen";
"network_settings.cells.add_proxy_bypass.caption" = "Zu umgehende Domäne hinzufügen";
"shortcuts.add.title" = "Füge Kurzbefehl hinzu";
"shortcuts.edit.title" = "Kurzbefehle bearbeiten";
"shortcuts.edit.cells.add_shortcut.caption" = "Kurzbefehl hinzufügen";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Προσθήκη νέου παρόχου";
"organizer.cells.add_host.caption" = "Προσθήκη από αρχεία";
"organizer.cells.import_host.caption" = "Προσθήκη από εισαγωγή";
"wizards.host.cells.title_input.caption" = "Τίτλος";
"wizards.host.sections.existing.header" = "Υπάρχον Προφίλ";
"imported_hosts.title" = "Εισαγόμενοι διακομιστές";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Σύνδεση";
"service.sections.configuration.header" = "Ρύθμιση";
"service.cells.vpn_service.caption" = "Ενεργοποιήθηκε";
"service.cells.provider.refresh.caption" = "Ανανέωση της υποδομής";
"service.cells.host.parameters.caption" = "Παράμετροι";
"service.cells.trusted_add_wifi.caption" = "Προσθέστε Wi-Fi";
"service.alerts.location.message.denied" = "Πρέπει να επιτρέψετε τη πρόσβαση τοποθεσίας για να εμπιστευτείτε το Wi-Fi δίκτυο. Μεταβείτε στις ρυθμίσεις του iOS και επιθεωρείστε τις ρυθμίσεις για το Passepartout.";
"service.alerts.location.button.settings" = "Ρυθμίσεις";
"account.sections.credentials.header" = "Διαπιστευτήρια";
"endpoint.sections.location_addresses.header" = "Διεθύνσεις";
"endpoint.sections.location_protocols.header" = "Πρωτόκολλα";
"provider.pool.actions.favorite" = "Αγαπημένο";
"provider.pool.actions.unfavorite" = "Δεν προτιμάται";
"provider.pool.sections.empty_favorites.footer" = "Σείρετε αριστερά για να προσθέσετε ή να αφαιρέσεται από τα αγαπημένα.";
"provider.preset.cells.tech_details.caption" = "Τεχνικές Λεπτομέρειες";
"network_settings.cells.add_dns_server.caption" = "Προσθήκη Διεύθυνσης";
"network_settings.cells.add_dns_domain.caption" = "Προσθήκη τομέα αναζήτησης";
"network_settings.cells.proxy_bypass.caption" = "Παράκαμψη Τομέα";
"network_settings.cells.add_proxy_bypass.caption" = "Προσθήκη τομέα παράκαμψης";
"shortcuts.add.title" = "Προσθήκη Συντόμευσης";
"shortcuts.edit.title" = "Διαχείριση συντομεύσεων";
"shortcuts.edit.cells.add_shortcut.caption" = "Προσθήκη Συντόμευσης";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Add new provider";
"organizer.cells.add_host.caption" = "Add from Files";
"organizer.cells.import_host.caption" = "Add from imported";
"wizards.host.cells.title_input.caption" = "Title";
"wizards.host.sections.existing.header" = "Existing profiles";
"imported_hosts.title" = "Imported hosts";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Connection";
"service.sections.configuration.header" = "Configuration";
"service.cells.vpn_service.caption" = "Enabled";
"service.cells.provider.refresh.caption" = "Refresh infrastructure";
"service.cells.host.parameters.caption" = "Parameters";
"service.cells.trusted_add_wifi.caption" = "Add Wi-Fi";
"service.alerts.location.message.denied" = "You must allow location access to trust this Wi-Fi network. Go to iOS settings and review your location permissions for Passepartout.";
"service.alerts.location.button.settings" = "Settings";
"account.sections.credentials.header" = "Credentials";
"endpoint.sections.location_addresses.header" = "Addresses";
"endpoint.sections.location_protocols.header" = "Protocols";
"provider.pool.actions.favorite" = "Favorite";
"provider.pool.actions.unfavorite" = "Unfavorite";
"provider.pool.sections.empty_favorites.footer" = "Swipe left on a location to add or remove it from Favorites.";
"provider.preset.cells.tech_details.caption" = "Technical details";
"network_settings.cells.add_dns_server.caption" = "Add address";
"network_settings.cells.add_dns_domain.caption" = "Add search domain";
"network_settings.cells.proxy_bypass.caption" = "Bypass domain";
"network_settings.cells.add_proxy_bypass.caption" = "Add bypass domain";
"shortcuts.add.title" = "Add shortcut";
"shortcuts.edit.title" = "Manage shortcuts";
"shortcuts.edit.cells.add_shortcut.caption" = "Add shortcut";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Añadir proveedor";
"organizer.cells.add_host.caption" = "Añadir desde Ficheros";
"organizer.cells.import_host.caption" = "Añadir desde importados";
"wizards.host.cells.title_input.caption" = "Título";
"wizards.host.sections.existing.header" = "Perfiles existentes";
"imported_hosts.title" = "Hosts importados";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Conexión";
"service.sections.configuration.header" = "Configuración";
"service.cells.vpn_service.caption" = "Habilitado";
"service.cells.provider.refresh.caption" = "Refrescar infraestructura";
"service.cells.host.parameters.caption" = "Parámetros";
"service.cells.trusted_add_wifi.caption" = "Añadir Wi-Fi";
"service.alerts.location.message.denied" = "Debes dar acceso a tu posición para añadir esta red Wi-Fi a las redes de confianza. Mira los ajustes iOS y revisa los permisos de posición para Passepartout.";
"service.alerts.location.button.settings" = "Ajustes";
"account.sections.credentials.header" = "Credenciales";
"endpoint.sections.location_addresses.header" = "Direcciones";
"endpoint.sections.location_protocols.header" = "Protocolos";
"provider.pool.actions.favorite" = "Favorita";
"provider.pool.actions.unfavorite" = "No favorita";
"provider.pool.sections.empty_favorites.footer" = "Desliza a la izquierda de una ubicación para agregarla o quitarla de los Favoritos.";
"provider.preset.cells.tech_details.caption" = "Detalles técnicos";
"network_settings.cells.add_dns_server.caption" = "Añadir dirección";
"network_settings.cells.add_dns_domain.caption" = "Añadir dominio";
"network_settings.cells.proxy_bypass.caption" = "Dominio ignorado";
"network_settings.cells.add_proxy_bypass.caption" = "Añadir dominio ignorado";
"shortcuts.add.title" = "Añadir atajo";
"shortcuts.edit.title" = "Gestionar atajos";
"shortcuts.edit.cells.add_shortcut.caption" = "Añadir atajo";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Ajouter un nouveau fournisseur";
"organizer.cells.add_host.caption" = "Ajouter de Fichiers";
"organizer.cells.import_host.caption" = "Ajouter depuis importé";
"wizards.host.cells.title_input.caption" = "Titre";
"wizards.host.sections.existing.header" = "Profiles existants";
"imported_hosts.title" = "Hôtes importés";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Connection";
"service.sections.configuration.header" = "Configuration";
"service.cells.vpn_service.caption" = "Activer";
"service.cells.provider.refresh.caption" = "Rafraîchir l'infrastructure";
"service.cells.host.parameters.caption" = "Paramètres";
"service.cells.trusted_add_wifi.caption" = "Ajouter Wi-Fi";
"service.alerts.location.message.denied" = "Vous devez autoriser la localisation pour faire confiance à ce réseau WiFi. Acceptez les permissions de localisation pour Passepartout dans les réglages.";
"service.alerts.location.button.settings" = "Réglages";
"account.sections.credentials.header" = "Indetifiants";
"endpoint.sections.location_addresses.header" = "Adresses";
"endpoint.sections.location_protocols.header" = "Protocols";
"provider.pool.actions.favorite" = "Favoris";
"provider.pool.actions.unfavorite" = "Retirer des Favoris";
"provider.pool.sections.empty_favorites.footer" = "Glissez vers la gauche d'un item pour l'ajouter ou le retirer des Favoris.";
"provider.preset.cells.tech_details.caption" = "Détails techniques";
"network_settings.cells.add_dns_server.caption" = "Ajouter une adresse";
"network_settings.cells.add_dns_domain.caption" = "Ajouter un domaine";
"network_settings.cells.proxy_bypass.caption" = "Outrepasser le domaine";
"network_settings.cells.add_proxy_bypass.caption" = "Ajouter outrepasser le domaine";
"shortcuts.add.title" = "Ajouter un raccourcis";
"shortcuts.edit.title" = "Gérer les raccourcis";
"shortcuts.edit.cells.add_shortcut.caption" = "Ajouter un raccourcis";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Aggiungi provider";
"organizer.cells.add_host.caption" = "Aggiungi da Files";
"organizer.cells.import_host.caption" = "Aggiungi da importati";
"wizards.host.cells.title_input.caption" = "Titolo";
"wizards.host.sections.existing.header" = "Profili esistenti";
"imported_hosts.title" = "Host importati";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Connessione";
"service.sections.configuration.header" = "Configurazione";
"service.cells.vpn_service.caption" = "Abilitato";
"service.cells.provider.refresh.caption" = "Aggiorna infrastruttura";
"service.cells.host.parameters.caption" = "Parametri";
"service.cells.trusted_add_wifi.caption" = "Aggiungi Wi-Fi";
"service.alerts.location.message.denied" = "Devi dare accesso alla tua posizione per aggiungere questa rete Wi-Fi alle reti sicure. Vai alle impostazioni iOS e verifica i permessi sulla posizione per Passepartout.";
"service.alerts.location.button.settings" = "Impostazioni";
"account.sections.credentials.header" = "Credenziali";
"endpoint.sections.location_addresses.header" = "Indirizzi";
"endpoint.sections.location_protocols.header" = "Protocolli";
"provider.pool.actions.favorite" = "Preferita";
"provider.pool.actions.unfavorite" = "Non preferita";
"provider.pool.sections.empty_favorites.footer" = "Scorri a sinistra su una regione per aggiungerla o rimuoverla dai Preferiti.";
"provider.preset.cells.tech_details.caption" = "Dettagli tecnici";
"network_settings.cells.add_dns_server.caption" = "Aggiungi indirizzo";
"network_settings.cells.add_dns_domain.caption" = "Aggiungi dominio";
"network_settings.cells.proxy_bypass.caption" = "Dominio ignorato";
"network_settings.cells.add_proxy_bypass.caption" = "Aggiungi dominio ignorato";
"shortcuts.add.title" = "Aggiungi comando rapido";
"shortcuts.edit.title" = "Gestisci comandi rapidi";
"shortcuts.edit.cells.add_shortcut.caption" = "Aggiungi comando rapido";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Voeg nieuwe aanbieder toe";
"organizer.cells.add_host.caption" = "Toevoegen vanuit Bestanden";
"organizer.cells.import_host.caption" = "Toevoegen vanuit geïmporteerd";
"wizards.host.cells.title_input.caption" = "Titel";
"wizards.host.sections.existing.header" = "Bestaande profielen";
"imported_hosts.title" = "Geïmporteerde hosts";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Verbinding";
"service.sections.configuration.header" = "Configuratie";
"service.cells.vpn_service.caption" = "Ingeschakeld";
"service.cells.provider.refresh.caption" = "Vernieuw de infrastructuur";
"service.cells.host.parameters.caption" = "Parameters";
"service.cells.trusted_add_wifi.caption" = "Wi-Fi toevoegen";
"service.alerts.location.message.denied" = "Om dit Wi-Fi netwerk te vertrouwen is toestemming tot locatie gegevens nodig. Ga naar Instellingen -> Privacy -> Locatievoorzieningen en check de locatie bevoegdheden voor Passepartout.";
"service.alerts.location.button.settings" = "Instellingen";
"account.sections.credentials.header" = "Inloggegevens";
"endpoint.sections.location_addresses.header" = "Adressen";
"endpoint.sections.location_protocols.header" = "Protocollen";
"provider.pool.actions.favorite" = "Favoriet";
"provider.pool.actions.unfavorite" = "Geen favoriet";
"provider.pool.sections.empty_favorites.footer" = "Veeg naar links op een locatie om deze toe te voegen of te verwijderen aan Favorieten.";
"provider.preset.cells.tech_details.caption" = "Technische details";
"network_settings.cells.add_dns_server.caption" = "Voeg adress toe";
"network_settings.cells.add_dns_domain.caption" = "Zoekdomein toevoegen";
"network_settings.cells.proxy_bypass.caption" = "Omzeil domein";
"network_settings.cells.add_proxy_bypass.caption" = "Voeg omzeil optie voor domein toe";
"shortcuts.add.title" = "Voeg snelkoppeling toe";
"shortcuts.edit.title" = "Beheer snelkoppelingen";
"shortcuts.edit.cells.add_shortcut.caption" = "Voeg snelkoppeling toe";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Dodaj nowego usługodawcę";
"organizer.cells.add_host.caption" = "Dodaj z Plików";
"organizer.cells.import_host.caption" = "Dodaj z zaimportowanych";
"wizards.host.cells.title_input.caption" = "Tytuł";
"wizards.host.sections.existing.header" = "Istniejące profile";
"imported_hosts.title" = "Zaimportowane hosty";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Połączenie";
"service.sections.configuration.header" = "Konfiguracja";
"service.cells.vpn_service.caption" = "Włączone";
"service.cells.provider.refresh.caption" = "Odśwież infrastrukturę";
"service.cells.host.parameters.caption" = "Parametry";
"service.cells.trusted_add_wifi.caption" = "Dodaj Wi-Fi";
"service.alerts.location.message.denied" = "Musisz pozwolić na dostęp do lokalizacji żeby zaufać tej sieci Wi-Fi. Przejdź do ustawień prywatności i pozwól Passepartout na wykorzystywanie usług lokalizacji.";
"service.alerts.location.button.settings" = "Ustawienia";
"account.sections.credentials.header" = "Dane logowania";
"endpoint.sections.location_addresses.header" = "Adresy";
"endpoint.sections.location_protocols.header" = "Protokoły";
"provider.pool.actions.favorite" = "Dodaj do ulubionych";
"provider.pool.actions.unfavorite" = "Usuń z ulubionych";
"provider.pool.sections.empty_favorites.footer" = "Aby usunąć zakładkę, przesuń w lewo.";
"provider.preset.cells.tech_details.caption" = "Dane techniczne";
"network_settings.cells.add_dns_server.caption" = "Dodaj adres";
"network_settings.cells.proxy_bypass.caption" = "Pomiń domenę";
"network_settings.cells.add_proxy_bypass.caption" = "Dodaj domenę";
"network_settings.cells.add_dns_domain.caption" = "Dodaj domenę wyszukiwania";
"shortcuts.add.title" = "Dodaj skrót";
"shortcuts.edit.title" = "Zarządzaj skrótami";
"shortcuts.edit.cells.add_shortcut.caption" = "Dodaj skrót";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Adicionar novo perfil";
"organizer.cells.add_host.caption" = "Adicionar dos Arquivos";
"organizer.cells.import_host.caption" = "Adicionar dos importados";
"wizards.host.cells.title_input.caption" = "Título";
"wizards.host.sections.existing.header" = "Perfis existentes";
"imported_hosts.title" = "Hosts importados";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Conexão";
"service.sections.configuration.header" = "Configuração";
"service.cells.vpn_service.caption" = "Ativado";
"service.cells.provider.refresh.caption" = "Atualizar infraestrutura";
"service.cells.host.parameters.caption" = "Parâmetros";
"service.cells.trusted_add_wifi.caption" = "Adicionar Wi-Fi";
"service.alerts.location.message.denied" = "Você precisa autorizar o compartilhamento de localização. Acesse ajustes do iOS e verifique permissões de localização do Passepartout.";
"service.alerts.location.button.settings" = "Ajustes";
"account.sections.credentials.header" = "Credenciais";
"endpoint.sections.location_addresses.header" = "Endereços";
"endpoint.sections.location_protocols.header" = "Protocolos";
"provider.pool.actions.favorite" = "Favorito";
"provider.pool.actions.unfavorite" = "Não favorito";
"provider.pool.sections.empty_favorites.footer" = "Deslize para a esquerda em um local para adicioná-lo ou removê-lo dos Favoritos.";
"provider.preset.cells.tech_details.caption" = "Detalhes técnicos";
"network_settings.cells.add_dns_server.caption" = "Adicionar endereço";
"network_settings.cells.add_dns_domain.caption" = "Adicionar domínio";
"network_settings.cells.proxy_bypass.caption" = "Domínio ignorado";
"network_settings.cells.add_proxy_bypass.caption" = "Adicionar domínio ignorado";
"shortcuts.add.title" = "Adicionar atalho";
"shortcuts.edit.title" = "Configuração de atalhos";
"shortcuts.edit.cells.add_shortcut.caption" = "Adicionar atalho";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 4/23/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Добавить нового провайдера";
"organizer.cells.add_host.caption" = "Добавить из файлов";
"organizer.cells.import_host.caption" = "Добавить из импортированных";
"wizards.host.cells.title_input.caption" = "Название";
"wizards.host.sections.existing.header" = "Существующие профили";
"imported_hosts.title" = "Импортированные хост профили";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Соединение";
"service.sections.configuration.header" = "Конфигурация";
"service.cells.vpn_service.caption" = "Включен";
"service.cells.provider.refresh.caption" = "Обновить инфраструктуру";
"service.cells.host.parameters.caption" = "Параметры";
"service.cells.trusted_add_wifi.caption" = "Добавить Wi-Fi";
"service.alerts.location.message.denied" = "Вам нужно разрешить использование геопозиции для добавления этой Wi-Fi сети в доверенные. Перейдите в настройки iOS, и измените разрешения геолокации для Passepartout.";
"service.alerts.location.button.settings" = "Настройки";
"account.sections.credentials.header" = "Данные для входа";
"endpoint.sections.location_addresses.header" = "Адреса";
"endpoint.sections.location_protocols.header" = "Протоколы";
"provider.pool.actions.favorite" = "Добавить в избранное";
"provider.pool.actions.unfavorite" = "Убрать из избранного";
"provider.pool.sections.empty_favorites.footer" = "Свайп в лево на локации, чтобы добавить или убрать из избранного.";
"provider.preset.cells.tech_details.caption" = "Техническая информация";
"network_settings.cells.add_dns_server.caption" = "Добавить адрес";
"network_settings.cells.add_dns_domain.caption" = "Добавить домен поиска";
"network_settings.cells.proxy_bypass.caption" = "Обход домена";
"network_settings.cells.add_proxy_bypass.caption" = "Добавить обходной домен";
"shortcuts.add.title" = "Создать команду";
"shortcuts.edit.title" = "Управлять командами";
"shortcuts.edit.cells.add_shortcut.caption" = "Создать команду";

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/13/18.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "Lägg till ny leverantör";
"organizer.cells.add_host.caption" = "Lägg till från Filer";
"organizer.cells.import_host.caption" = "Lägg till från importerad";
"wizards.host.cells.title_input.caption" = "Namn";
"wizards.host.sections.existing.header" = "Befintliga profiler";
"imported_hosts.title" = "Importerade värdar";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "Koppling";
"service.sections.configuration.header" = "Konfiguration";
"service.cells.vpn_service.caption" = "Aktiverad";
"service.cells.provider.refresh.caption" = "Uppdatera infrastruktur";
"service.cells.host.parameters.caption" = "Parametrar";
"service.cells.trusted_add_wifi.caption" = "Lägg till Wi-Fi";
"service.alerts.location.message.denied" = "Du måste tillåta lägetillgång för att förlita detta nätverk. Öppna iOS inställningar och se över tillstånd för Passepartout.";
"service.alerts.location.button.settings" = "Inställningar";
"account.sections.credentials.header" = "Referenser";
"endpoint.sections.location_addresses.header" = "Adresser";
"endpoint.sections.location_protocols.header" = "Protokoll";
"provider.pool.actions.favorite" = "Favorit";
"provider.pool.actions.unfavorite" = "Inte favorit";
"provider.pool.sections.empty_favorites.footer" = "Dra åt vänster på en plats för att lägga till eller ta bort den från favoriter.";
"provider.preset.cells.tech_details.caption" = "Tekniska detaljer";
"network_settings.cells.add_dns_server.caption" = "Lägg till adress";
"network_settings.cells.add_dns_domain.caption" = "Lägg till domän";
"network_settings.cells.proxy_bypass.caption" = "Bypass-domän";
"network_settings.cells.add_proxy_bypass.caption" = "Add bypass domain";
"shortcuts.add.title" = "Lägg till genväg";
"shortcuts.edit.title" = "Hantera genvägar";
"shortcuts.edit.cells.add_shortcut.caption" = "Lägg till genväg";

View File

@ -1,7 +1,6 @@
strings:
inputs:
- ../../Core/Resources/en.lproj/Core.strings
- en.lproj/App.strings
outputs:
- templateName: structured-swift4
output: Global/SwiftGen+Strings.swift

View File

@ -1,65 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"organizer.cells.add_provider.caption" = "添加新的提供商配置";
"organizer.cells.add_host.caption" = "从文件添加";
"organizer.cells.import_host.caption" = "从导入中添加";
"wizards.host.cells.title_input.caption" = "名称";
"wizards.host.sections.existing.header" = "已存在的配置";
"imported_hosts.title" = "导入主机配置";
"service.sections.vpn.header" = "VPN";
"service.sections.status.header" = "连接";
"service.sections.configuration.header" = "配置";
"service.cells.vpn_service.caption" = "已启用";
"service.cells.provider.refresh.caption" = "刷新基础设置";
"service.cells.host.parameters.caption" = "参数";
"service.cells.trusted_add_wifi.caption" = "新增Wi-Fi";
"service.alerts.location.message.denied" = "你必须允许位置访问以信任此Wi-Fi。请至iOS设置对Passepartout的位置权限。";
"service.alerts.location.button.settings" = "设置";
"account.sections.credentials.header" = "认证方式";
"endpoint.sections.location_addresses.header" = "地址";
"endpoint.sections.location_protocols.header" = "协议";
"provider.pool.actions.favorite" = "最喜爱";
"provider.pool.actions.unfavorite" = "不喜爱";
"provider.pool.sections.empty_favorites.footer" = "向左轻扫以将其从最喜爱列表中移除或添加。";
"provider.preset.cells.tech_details.caption" = "技术细节";
"network_settings.cells.add_dns_server.caption" = "添加地址";
"network_settings.cells.add_dns_domain.caption" = "添加搜索域名";
"network_settings.cells.proxy_bypass.caption" = "旁路域名";
"network_settings.cells.add_proxy_bypass.caption" = "添加旁路域名";
"shortcuts.add.title" = "添加捷径";
"shortcuts.edit.title" = "管理捷径";
"shortcuts.edit.cells.add_shortcut.caption" = "添加捷径";

View File

@ -74,8 +74,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
if !TransientStore.didHandleSubreddit {
let alert = Macros.warning(L10n.Core.Reddit.title, L10n.Core.Reddit.message)
alert.present(in: nil, withOK: L10n.Core.Reddit.Buttons.subscribe, cancel: L10n.Core.Reddit.Buttons.never, dummy: L10n.Core.Reddit.Buttons.remind, handler: {
let alert = Macros.warning(L10n.Reddit.title, L10n.Reddit.message)
alert.present(in: nil, withOK: L10n.Reddit.Buttons.subscribe, cancel: L10n.Reddit.Buttons.never, dummy: L10n.Reddit.Buttons.remind, handler: {
TransientStore.didHandleSubreddit = true
self.subscribeSubreddit()
}, cancelHandler: {
@ -90,10 +90,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
return .terminateNow
}
let alert = Macros.warning(
L10n.App.Menu.Quit.title(GroupConstants.App.name),
L10n.App.Menu.Quit.Messages.confirm
L10n.Menu.Quit.title(GroupConstants.App.name),
L10n.Menu.Quit.Messages.confirm
)
switch alert.presentModallyEx(withOK: L10n.Core.Global.ok, other1: L10n.Core.Global.cancel, other2: L10n.Core.Reddit.Buttons.never) {
switch alert.presentModallyEx(withOK: L10n.Global.ok, other1: L10n.Global.cancel, other2: L10n.Reddit.Buttons.never) {
case .alertSecondButtonReturn:
return .terminateCancel

View File

@ -66,21 +66,21 @@ class HostImporter {
default:
let message = HostImporter.localizedMessage(forError: e)
let alert = Macros.warning(configurationURL.normalizedFilename, message)
_ = alert.presentModally(withOK: L10n.Core.Global.ok, cancel: nil)
_ = alert.presentModally(withOK: L10n.Global.ok, cancel: nil)
}
return
} catch let e {
let message = HostImporter.localizedMessage(forError: e)
let alert = Macros.warning(configurationURL.normalizedFilename, message)
_ = alert.presentModally(withOK: L10n.Core.Global.ok, cancel: nil)
_ = alert.presentModally(withOK: L10n.Global.ok, cancel: nil)
return
}
if let warning = result.warning {
let message = HostImporter.localizedDetailsMessage(forWarning: warning)
let alert = Macros.warning(configurationURL.normalizedFilename, L10n.Core.ParsedFile.Alerts.PotentiallyUnsupported.message(message))
let alert = Macros.warning(configurationURL.normalizedFilename, L10n.ParsedFile.Alerts.PotentiallyUnsupported.message(message))
if alert.presentModally(withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel) {
if alert.presentModally(withOK: L10n.Global.ok, cancel: L10n.Global.cancel) {
enterProfileName(forHostWithResult: result)
}
@ -92,7 +92,7 @@ class HostImporter {
private func enterPassphraseForHost(at url: URL) {
let vc = StoryboardScene.Main.textInputViewController.instantiate()
vc.caption = L10n.Core.ParsedFile.Alerts.EncryptionPassphrase.message
vc.caption = L10n.ParsedFile.Alerts.EncryptionPassphrase.message
vc.isSecure = true
vc.object = url
vc.delegate = self
@ -105,12 +105,12 @@ class HostImporter {
}
let vc = StoryboardScene.Main.textInputViewController.instantiate()
vc.caption = L10n.Core.Service.Alerts.Rename.title.asCaption
vc.caption = L10n.Service.Alerts.Rename.title.asCaption
let profile = HostConnectionProfile(hostname: hostname)
let builder = OpenVPNTunnelProvider.ConfigurationBuilder(sessionConfiguration: result.configuration)
profile.parameters = builder.build()
vc.text = title
vc.placeholder = L10n.Core.Global.Host.TitleInput.placeholder
vc.placeholder = L10n.Global.Host.TitleInput.placeholder
vc.object = profile
vc.delegate = self
present(vc)
@ -139,22 +139,22 @@ class HostImporter {
switch appError {
case .malformed(let option):
log.error("Could not parse configuration URL: malformed option, \(option)")
return L10n.Core.ParsedFile.Alerts.Malformed.message(option)
return L10n.ParsedFile.Alerts.Malformed.message(option)
case .missingConfiguration(let option):
log.error("Could not parse configuration URL: missing configuration, \(option)")
return L10n.Core.ParsedFile.Alerts.Missing.message(option)
return L10n.ParsedFile.Alerts.Missing.message(option)
case .unsupportedConfiguration(let option):
log.error("Could not parse configuration URL: unsupported configuration, \(option)")
return L10n.Core.ParsedFile.Alerts.Unsupported.message(option)
return L10n.ParsedFile.Alerts.Unsupported.message(option)
default:
break
}
}
log.error("Could not parse configuration URL: \(error)")
return L10n.Core.ParsedFile.Alerts.Parsing.message(error.localizedDescription)
return L10n.ParsedFile.Alerts.Parsing.message(error.localizedDescription)
}
// XXX: copy/paste from iOS
@ -196,8 +196,8 @@ extension HostImporter: TextInputViewControllerDelegate {
if let existingHostId = service.existingHostId(withTitle: text) {
dismiss(textInputController)
let alert = Macros.warning(text, L10n.Core.Wizards.Host.Alerts.Existing.message)
if alert.presentModally(withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel) {
let alert = Macros.warning(text, L10n.Wizards.Host.Alerts.Existing.message)
if alert.presentModally(withOK: L10n.Global.ok, cancel: L10n.Global.cancel) {
guard let existingProfile = service.profile(withContext: profile.context, id: existingHostId) else {
fatalError("ConnectionService.existingHostId() returned a non-existing host profile?")
}

View File

@ -36,8 +36,8 @@ class IssueReporter: NSObject {
func present(withIssue issue: Issue) {
if issue.debugLog {
let alert = Macros.warning(L10n.Core.IssueReporter.title, L10n.Core.IssueReporter.message)
alert.present(in: nil, withOK: L10n.Core.IssueReporter.Buttons.accept, cancel: L10n.Core.Global.cancel, handler: {
let alert = Macros.warning(L10n.IssueReporter.title, L10n.IssueReporter.message)
alert.present(in: nil, withOK: L10n.IssueReporter.Buttons.accept, cancel: L10n.Global.cancel, handler: {
VPN.shared.requestDebugLog(fallback: AppConstants.Log.debugSnapshot) {
self.composeEmail(withDebugLog: $0, issue: issue)
}

File diff suppressed because it is too large Load Diff

View File

@ -68,8 +68,8 @@ class TextInputViewController: NSViewController {
labelTextCaption.stringValue = caption
textField.stringValue = text
textField.placeholderString = placeholder
buttonOK.title = L10n.Core.Global.ok
buttonCancel.title = L10n.Core.Global.cancel
buttonOK.title = L10n.Global.ok
buttonCancel.title = L10n.Global.cancel
textPlain.isHidden = isSecure
textSecure.isHidden = !isSecure

View File

@ -30,31 +30,31 @@ import TunnelKit
extension NSTextField {
func applyVPN(_ theme: Theme, isActive: Bool, with vpnStatus: VPNStatus?, error: OpenVPNTunnelProvider.ProviderError?) {
guard isActive else {
stringValue = L10n.App.Vpn.unused
stringValue = L10n.Vpn.unused
textColor = theme.palette.colorSecondaryText
return
}
guard let vpnStatus = vpnStatus else {
stringValue = L10n.Core.Vpn.disabled
stringValue = L10n.Vpn.disabled
textColor = theme.palette.colorSecondaryText
return
}
switch vpnStatus {
case .connecting:
stringValue = L10n.Core.Vpn.connecting
stringValue = L10n.Vpn.connecting
textColor = theme.palette.colorIndeterminate
case .connected:
stringValue = L10n.Core.Vpn.active
stringValue = L10n.Vpn.active
textColor = theme.palette.colorOn
case .disconnecting:
stringValue = disconnectionReason(for: error) ?? L10n.Core.Vpn.disconnecting
stringValue = disconnectionReason(for: error) ?? L10n.Vpn.disconnecting
textColor = theme.palette.colorIndeterminate
case .disconnected:
stringValue = disconnectionReason(for: error) ?? L10n.Core.Vpn.inactive
stringValue = disconnectionReason(for: error) ?? L10n.Vpn.inactive
textColor = theme.palette.colorOff
}
}
@ -63,7 +63,7 @@ extension NSTextField {
guard let error = error else {
return nil
}
let V = L10n.Core.Vpn.Errors.self
let V = L10n.Vpn.Errors.self
switch error {
case .socketActivity, .timeout:
return V.timeout

View File

@ -44,7 +44,7 @@ class WindowManager: NSObject {
@discardableResult func showPreferences() -> NSWindowController? {
preferences = presentWindowController(StoryboardScene.Preferences.preferencesWindowController, existing: preferences)
preferences?.window?.title = L10n.App.Preferences.title
preferences?.window?.title = L10n.Preferences.title
return preferences
}

View File

@ -67,7 +67,7 @@ class StatusMenu: NSObject {
private let menuAllProfiles = NSMenu()
private lazy var itemSwitchProfile = NSMenuItem(title: L10n.App.Menu.SwitchProfile.title, action: nil, keyEquivalent: "")
private lazy var itemSwitchProfile = NSMenuItem(title: L10n.Menu.SwitchProfile.title, action: nil, keyEquivalent: "")
private var itemsAllProfiles: [NSMenuItem] = []
@ -77,9 +77,9 @@ class StatusMenu: NSObject {
private lazy var itemPool = NSMenuItem(title: "", action: nil, keyEquivalent: "")
private lazy var itemToggleVPN = NSMenuItem(title: L10n.App.Service.Cells.Vpn.TurnOn.caption, action: nil, keyEquivalent: "")
private lazy var itemToggleVPN = NSMenuItem(title: L10n.Service.Cells.Vpn.TurnOn.caption, action: nil, keyEquivalent: "")
private lazy var itemReconnectVPN = NSMenuItem(title: L10n.Core.Service.Cells.Reconnect.caption, action: #selector(reconnectVPN), keyEquivalent: "")
private lazy var itemReconnectVPN = NSMenuItem(title: L10n.Service.Cells.Reconnect.caption, action: #selector(reconnectVPN), keyEquivalent: "")
private override init() {
super.init()
@ -111,8 +111,8 @@ class StatusMenu: NSObject {
// main actions
let itemShow = NSMenuItem(title: L10n.App.Menu.Show.title, action: #selector(showOrganizer), keyEquivalent: "")
let itemPreferences = NSMenuItem(title: L10n.App.Menu.Preferences.title.asContinuation, action: #selector(showPreferences), keyEquivalent: ",")
let itemShow = NSMenuItem(title: L10n.Menu.Show.title, action: #selector(showOrganizer), keyEquivalent: "")
let itemPreferences = NSMenuItem(title: L10n.Menu.Preferences.title.asContinuation, action: #selector(showPreferences), keyEquivalent: ",")
itemShow.target = self
itemPreferences.target = self
menu.addItem(itemShow)
@ -130,11 +130,11 @@ class StatusMenu: NSObject {
// support
let menuSupport = NSMenu()
let itemCommunity = NSMenuItem(title: L10n.Core.Organizer.Cells.JoinCommunity.caption.asContinuation, action: #selector(joinCommunity), keyEquivalent: "")
// let itemDonate = NSMenuItem(title: L10n.Core.Organizer.Cells.Donate.caption.asContinuation, action: #selector(showDonations), keyEquivalent: "")
// let itemGitHubSponsors = NSMenuItem(title: L10n.Core.Organizer.Cells.GithubSponsors.caption.asContinuation, action: #selector(seeGitHubSponsors), keyEquivalent: "")
// let itemTranslate = NSMenuItem(title: L10n.Core.Organizer.Cells.Translate.caption.asContinuation, action: #selector(offerToTranslate), keyEquivalent: "")
let itemFAQ = NSMenuItem(title: L10n.Core.About.Cells.Faq.caption.asContinuation, action: #selector(visitFAQ), keyEquivalent: "")
let itemCommunity = NSMenuItem(title: L10n.Organizer.Cells.JoinCommunity.caption.asContinuation, action: #selector(joinCommunity), keyEquivalent: "")
// let itemDonate = NSMenuItem(title: L10n.Organizer.Cells.Donate.caption.asContinuation, action: #selector(showDonations), keyEquivalent: "")
// let itemGitHubSponsors = NSMenuItem(title: L10n.Organizer.Cells.GithubSponsors.caption.asContinuation, action: #selector(seeGitHubSponsors), keyEquivalent: "")
// let itemTranslate = NSMenuItem(title: L10n.Organizer.Cells.Translate.caption.asContinuation, action: #selector(offerToTranslate), keyEquivalent: "")
let itemFAQ = NSMenuItem(title: L10n.About.Cells.Faq.caption.asContinuation, action: #selector(visitFAQ), keyEquivalent: "")
itemCommunity.target = self
// itemDonate.target = self
// itemGitHubSponsors.target = self
@ -146,26 +146,26 @@ class StatusMenu: NSObject {
// menuSupport.addItem(itemGitHubSponsors)
// menuSupport.addItem(itemTranslate)
if ProductManager.shared.isEligibleForFeedback() {
let itemReview = NSMenuItem(title: L10n.Core.Organizer.Cells.WriteReview.caption.asContinuation, action: #selector(writeReview), keyEquivalent: "")
let itemReview = NSMenuItem(title: L10n.Organizer.Cells.WriteReview.caption.asContinuation, action: #selector(writeReview), keyEquivalent: "")
itemReview.target = self
menuSupport.addItem(itemReview)
}
menuSupport.addItem(.separator())
menuSupport.addItem(itemFAQ)
if ProductManager.shared.isEligibleForFeedback() {
let itemReport = NSMenuItem(title: L10n.Core.Service.Cells.ReportIssue.caption.asContinuation, action: #selector(reportConnectivityIssue), keyEquivalent: "")
let itemReport = NSMenuItem(title: L10n.Service.Cells.ReportIssue.caption.asContinuation, action: #selector(reportConnectivityIssue), keyEquivalent: "")
itemReport.target = self
menuSupport.addItem(itemReport)
}
let itemSupport = NSMenuItem(title: L10n.App.Menu.Support.title, action: nil, keyEquivalent: "")
let itemSupport = NSMenuItem(title: L10n.Menu.Support.title, action: nil, keyEquivalent: "")
menu.setSubmenu(menuSupport, for: itemSupport)
menu.addItem(itemSupport)
// share
let menuShare = NSMenu()
let itemTweet = NSMenuItem(title: L10n.Core.About.Cells.ShareTwitter.caption, action: #selector(shareTwitter), keyEquivalent: "")
let itemInvite = NSMenuItem(title: L10n.Core.About.Cells.ShareGeneric.caption.asContinuation, action: #selector(shareGeneric), keyEquivalent: "")
let itemTweet = NSMenuItem(title: L10n.About.Cells.ShareTwitter.caption, action: #selector(shareTwitter), keyEquivalent: "")
let itemInvite = NSMenuItem(title: L10n.About.Cells.ShareGeneric.caption.asContinuation, action: #selector(shareGeneric), keyEquivalent: "")
let itemAlternativeTo = NSMenuItem(title: "AlternativeTo".asContinuation, action: #selector(visitAlternativeTo), keyEquivalent: "")
itemTweet.target = self
itemInvite.target = self
@ -173,15 +173,15 @@ class StatusMenu: NSObject {
menuShare.addItem(itemTweet)
menuShare.addItem(itemInvite)
menuShare.addItem(itemAlternativeTo)
let itemShare = NSMenuItem(title: L10n.Core.About.Sections.Share.header, action: nil, keyEquivalent: "")
let itemShare = NSMenuItem(title: L10n.About.Sections.Share.header, action: nil, keyEquivalent: "")
menu.setSubmenu(menuShare, for: itemShare)
menu.addItem(itemShare)
menu.addItem(.separator())
// secondary
let itemAbout = NSMenuItem(title: L10n.Core.Organizer.Cells.About.caption(GroupConstants.App.name), action: #selector(showAbout), keyEquivalent: "")
let itemQuit = NSMenuItem(title: L10n.App.Menu.Quit.title(GroupConstants.App.name), action: #selector(quit), keyEquivalent: "q")
let itemAbout = NSMenuItem(title: L10n.Organizer.Cells.About.caption(GroupConstants.App.name), action: #selector(showAbout), keyEquivalent: "")
let itemQuit = NSMenuItem(title: L10n.Menu.Quit.title(GroupConstants.App.name), action: #selector(quit), keyEquivalent: "q")
itemAbout.target = self
itemQuit.target = self
menu.addItem(itemAbout)
@ -224,7 +224,7 @@ class StatusMenu: NSObject {
itemsProfile.removeAll()
guard let profile = profile else {
itemProfileName.title = L10n.App.Menu.ActiveProfile.Title.none
itemProfileName.title = L10n.Menu.ActiveProfile.Title.none
// itemProfileName.image = nil
statusItem.button?.image = imageStatusInactive
statusItem.button?.toolTip = nil
@ -248,7 +248,7 @@ class StatusMenu: NSObject {
itemsProfile.append(itemToggleVPN)
itemsProfile.append(itemReconnectVPN)
} else {
let itemMissingCredentials = NSMenuItem(title: L10n.App.Menu.ActiveProfile.Messages.missingCredentials, action: nil, keyEquivalent: "")
let itemMissingCredentials = NSMenuItem(title: L10n.Menu.ActiveProfile.Messages.missingCredentials, action: nil, keyEquivalent: "")
itemMissingCredentials.indentationLevel = 1
menu.insertItem(itemMissingCredentials, at: i)
i += 1
@ -260,12 +260,12 @@ class StatusMenu: NSObject {
if !needsCredentials, let providerProfile = profile as? ProviderConnectionProfile {
// endpoint (port only)
let itemEndpoint = NSMenuItem(title: L10n.Core.Endpoint.title, action: nil, keyEquivalent: "")
let itemEndpoint = NSMenuItem(title: L10n.Endpoint.title, action: nil, keyEquivalent: "")
itemEndpoint.indentationLevel = 1
let menuEndpoint = NSMenu()
// automatic
let itemEndpointAutomatic = NSMenuItem(title: L10n.Core.Endpoint.Cells.AnyProtocol.caption, action: #selector(connectToEndpoint(_:)), keyEquivalent: "")
let itemEndpointAutomatic = NSMenuItem(title: L10n.Endpoint.Cells.AnyProtocol.caption, action: #selector(connectToEndpoint(_:)), keyEquivalent: "")
itemEndpointAutomatic.target = self
if providerProfile.customProtocol == nil {
itemEndpointAutomatic.state = .on
@ -287,7 +287,7 @@ class StatusMenu: NSObject {
itemsProfile.append(itemEndpoint)
// account
let itemAccount = NSMenuItem(title: L10n.Core.Account.title.asContinuation, action: #selector(editAccountCredentials(_:)), keyEquivalent: "")
let itemAccount = NSMenuItem(title: L10n.Account.title.asContinuation, action: #selector(editAccountCredentials(_:)), keyEquivalent: "")
menu.insertItem(itemAccount, at: i)
i += 1
itemAccount.target = self
@ -295,7 +295,7 @@ class StatusMenu: NSObject {
itemsProfile.append(itemAccount)
// customize
let itemCustomize = NSMenuItem(title: L10n.App.Menu.ActiveProfile.Items.Customize.title, action: #selector(customizeProfile(_:)), keyEquivalent: "")
let itemCustomize = NSMenuItem(title: L10n.Menu.ActiveProfile.Items.Customize.title, action: #selector(customizeProfile(_:)), keyEquivalent: "")
menu.insertItem(itemCustomize, at: i)
i += 1
itemCustomize.target = self
@ -317,7 +317,7 @@ class StatusMenu: NSObject {
let infrastructure = providerProfile.infrastructure
for category in infrastructure.categories {
let title = category.name.isEmpty ? L10n.Core.Global.Values.default : category.name.capitalized
let title = category.name.isEmpty ? L10n.Global.Values.default : category.name.capitalized
let submenu = NSMenu()
let itemCategory = NSMenuItem(title: title, action: nil, keyEquivalent: "")
itemCategory.indentationLevel = 1
@ -332,7 +332,7 @@ class StatusMenu: NSObject {
let submenuGroup = NSMenu()
for pool in group.pools {
let title = !pool.secondaryId.isEmpty ? pool.secondaryId : L10n.Core.Global.Values.default
let title = !pool.secondaryId.isEmpty ? pool.secondaryId : L10n.Global.Values.default
let item = NSMenuItem(title: title, action: #selector(connectToPool(_:)), keyEquivalent: "")
if let extraCountry = pool.extraCountries?.first {
item.image = extraCountry.image
@ -362,7 +362,7 @@ class StatusMenu: NSObject {
} else {
// account
let itemAccount = NSMenuItem(title: L10n.Core.Account.title.asContinuation, action: #selector(editAccountCredentials(_:)), keyEquivalent: "")
let itemAccount = NSMenuItem(title: L10n.Account.title.asContinuation, action: #selector(editAccountCredentials(_:)), keyEquivalent: "")
menu.insertItem(itemAccount, at: i)
i += 1
itemAccount.target = self
@ -370,7 +370,7 @@ class StatusMenu: NSObject {
itemsProfile.append(itemAccount)
// customize
let itemCustomize = NSMenuItem(title: L10n.App.Menu.ActiveProfile.Items.Customize.title, action: #selector(customizeProfile(_:)), keyEquivalent: "")
let itemCustomize = NSMenuItem(title: L10n.Menu.ActiveProfile.Items.Customize.title, action: #selector(customizeProfile(_:)), keyEquivalent: "")
menu.insertItem(itemCustomize, at: i)
i += 1
itemCustomize.target = self
@ -542,14 +542,14 @@ class StatusMenu: NSObject {
}
@objc private func shareTwitter() {
NSWorkspace.shared.open(AppConstants.URLs.twitterIntent(withMessage: L10n.Core.Share.message))
NSWorkspace.shared.open(AppConstants.URLs.twitterIntent(withMessage: L10n.Share.message))
}
@objc private func shareGeneric() {
guard let source = statusItem.button else {
return
}
let message = "\(L10n.Core.Share.message) \(AppConstants.URLs.website)"
let message = "\(L10n.Share.message) \(AppConstants.URLs.website)"
let picker = NSSharingServicePicker(items: [message])
picker.show(relativeTo: source.bounds, of: source, preferredEdge: .minY)
}
@ -572,10 +572,10 @@ class StatusMenu: NSObject {
private func reloadVpnStatus() {
if vpn.isEnabled {
itemToggleVPN.title = L10n.App.Service.Cells.Vpn.TurnOff.caption
itemToggleVPN.title = L10n.Service.Cells.Vpn.TurnOff.caption
itemToggleVPN.action = #selector(disableVPN)
} else {
itemToggleVPN.title = L10n.App.Service.Cells.Vpn.TurnOn.caption
itemToggleVPN.title = L10n.Service.Cells.Vpn.TurnOn.caption
itemToggleVPN.action = #selector(enableVPN)
}
if let profile = service.activeProfile {

View File

@ -63,7 +63,7 @@ class OrganizerViewController: NSViewController {
tableProfiles.rightAnchor.constraint(equalTo: viewProfiles.rightAnchor),
])
buttonRemoveConfiguration.title = L10n.Core.Organizer.Cells.Uninstall.caption
buttonRemoveConfiguration.title = L10n.Organizer.Cells.Uninstall.caption
tableProfiles.selectionBlock = { [weak self] in
self?.serviceController?.setProfile($0)
@ -109,7 +109,7 @@ class OrganizerViewController: NSViewController {
}
private func alertMissingInfrastructure(forMetadata metadata: Infrastructure.Metadata, error: Error?) {
var message = L10n.Core.Wizards.Provider.Alerts.Unavailable.message
var message = L10n.Wizards.Provider.Alerts.Unavailable.message
if let error = error {
log.error("Unable to download missing \(metadata.description) infrastructure (network error): \(error.localizedDescription)")
message.append(" \(error.localizedDescription)")
@ -118,7 +118,7 @@ class OrganizerViewController: NSViewController {
}
let alert = Macros.warning(metadata.description, message)
_ = alert.presentModally(withOK: L10n.Core.Global.ok, cancel: nil)
_ = alert.presentModally(withOK: L10n.Global.ok, cancel: nil)
}
private func confirmAddProvider(withMetadata metadata: Infrastructure.Metadata) {
@ -128,7 +128,7 @@ class OrganizerViewController: NSViewController {
@objc private func addHost() {
let panel = NSOpenPanel()
panel.title = L10n.App.Organizer.Alerts.OpenHostFile.title
panel.title = L10n.Organizer.Alerts.OpenHostFile.title
panel.allowsMultipleSelection = false
panel.canChooseDirectories = false
panel.canChooseFiles = true
@ -164,10 +164,10 @@ class OrganizerViewController: NSViewController {
// rename to existing title -> confirm overwrite existing
if let existingProfile = service.hostProfile(withTitle: newTitle) {
let alert = Macros.warning(
L10n.Core.Service.Alerts.Rename.title,
L10n.Core.Wizards.Host.Alerts.Existing.message
L10n.Service.Alerts.Rename.title,
L10n.Wizards.Host.Alerts.Existing.message
)
alert.present(in: view.window, withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel, handler: {
alert.present(in: view.window, withOK: L10n.Global.ok, cancel: L10n.Global.cancel, handler: {
self.doReplaceProfile(profile, to: newTitle, existingProfile: existingProfile)
}, cancelHandler: nil)
return
@ -191,10 +191,10 @@ class OrganizerViewController: NSViewController {
@IBAction private func confirmVpnProfileDeletion(_ sender: Any?) {
let alert = Macros.warning(
L10n.Core.Organizer.Cells.Uninstall.caption,
L10n.Core.Organizer.Alerts.DeleteVpnProfile.message
L10n.Organizer.Cells.Uninstall.caption,
L10n.Organizer.Alerts.DeleteVpnProfile.message
)
alert.present(in: view.window, withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel, handler: {
alert.present(in: view.window, withOK: L10n.Global.ok, cancel: L10n.Global.cancel, handler: {
VPN.shared.uninstall(completionHandler: nil)
}, cancelHandler: nil)
}
@ -219,9 +219,9 @@ class OrganizerViewController: NSViewController {
}
// rename host
vc.caption = L10n.Core.Service.Alerts.Rename.title.asCaption
vc.caption = L10n.Service.Alerts.Rename.title.asCaption
vc.text = service.screenTitle(forHostId: profile.id)
vc.placeholder = L10n.Core.Global.Host.TitleInput.placeholder
vc.placeholder = L10n.Global.Host.TitleInput.placeholder
vc.object = profile
vc.delegate = self
}
@ -312,7 +312,7 @@ extension OrganizerViewController: OrganizerProfileTableViewDelegate {
let menu = NSMenu()
let itemProvider = NSMenuItem(title: L10n.App.Organizer.Menus.provider, action: nil, keyEquivalent: "")
let itemProvider = NSMenuItem(title: L10n.Organizer.Menus.provider, action: nil, keyEquivalent: "")
let menuProvider = NSMenu()
let availableMetadata = service.availableProviders()
if !availableMetadata.isEmpty {
@ -323,17 +323,17 @@ extension OrganizerViewController: OrganizerProfileTableViewDelegate {
menuProvider.addItem(item)
}
} else {
let item = NSMenuItem(title: L10n.App.Organizer.Menus.Provider.unavailable, action: nil, keyEquivalent: "")
let item = NSMenuItem(title: L10n.Organizer.Menus.Provider.unavailable, action: nil, keyEquivalent: "")
item.isEnabled = false
menuProvider.addItem(item)
}
menuProvider.addItem(.separator())
let itemProviderUpdateList = NSMenuItem(title: L10n.Core.Wizards.Provider.Cells.UpdateList.caption, action: #selector(updateProvidersList), keyEquivalent: "")
let itemProviderUpdateList = NSMenuItem(title: L10n.Wizards.Provider.Cells.UpdateList.caption, action: #selector(updateProvidersList), keyEquivalent: "")
menuProvider.addItem(itemProviderUpdateList)
menu.setSubmenu(menuProvider, for: itemProvider)
menu.addItem(itemProvider)
let menuHost = NSMenuItem(title: L10n.App.Organizer.Menus.host.asContinuation, action: #selector(addHost), keyEquivalent: "")
let menuHost = NSMenuItem(title: L10n.Organizer.Menus.host.asContinuation, action: #selector(addHost), keyEquivalent: "")
menu.addItem(menuHost)
NSMenu.popUpContextMenu(menu, with: event, for: sender)
@ -343,10 +343,10 @@ extension OrganizerViewController: OrganizerProfileTableViewDelegate {
profilePendingRemoval = profile
let alert = Macros.warning(
L10n.App.Organizer.Alerts.RemoveProfile.title,
L10n.App.Organizer.Alerts.RemoveProfile.message(service.screenTitle(ProfileKey(profile)))
L10n.Organizer.Alerts.RemoveProfile.title,
L10n.Organizer.Alerts.RemoveProfile.message(service.screenTitle(ProfileKey(profile)))
)
alert.present(in: view.window, withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel, handler: {
alert.present(in: view.window, withOK: L10n.Global.ok, cancel: L10n.Global.cancel, handler: {
self.removePendingProfile()
}, cancelHandler: nil)
}

View File

@ -61,14 +61,14 @@ class DebugLogViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Service.Cells.DebugLog.caption
title = L10n.Service.Cells.DebugLog.caption
checkMasking.title = L10n.Core.Service.Cells.MasksPrivateData.caption
checkMasking.title = L10n.Service.Cells.MasksPrivateData.caption
checkMasking.state = (TransientStore.masksPrivateData ? .on : .off)
labelExchangedCaption.stringValue = L10n.Core.Service.Cells.DataCount.caption.asCaption
labelLog.stringValue = L10n.Core.Service.Cells.DebugLog.caption.asCaption
buttonCopy.title = L10n.App.DebugLog.Buttons.copy
labelExchangedCaption.stringValue = L10n.Service.Cells.DataCount.caption.asCaption
labelLog.stringValue = L10n.Service.Cells.DebugLog.caption.asCaption
buttonCopy.title = L10n.DebugLog.Buttons.copy
buttonPrevious.image = NSImage(named: NSImage.touchBarRewindTemplateName)
buttonNext.image = NSImage(named: NSImage.touchBarFastForwardTemplateName)
buttonShare.image = NSImage(named: NSImage.shareTemplateName)
@ -93,10 +93,10 @@ class DebugLogViewController: NSViewController {
guard vpn.status == .disconnected else {
let alert = Macros.warning(
L10n.Core.Service.Cells.MasksPrivateData.caption,
L10n.Core.Service.Alerts.MasksPrivateData.Messages.mustReconnect
L10n.Service.Cells.MasksPrivateData.caption,
L10n.Service.Alerts.MasksPrivateData.Messages.mustReconnect
)
alert.present(in: view.window, withOK: L10n.Core.Service.Alerts.Buttons.reconnect, cancel: L10n.Core.Global.cancel, handler: {
alert.present(in: view.window, withOK: L10n.Service.Alerts.Buttons.reconnect, cancel: L10n.Global.cancel, handler: {
handler()
self.shouldDeleteLogOnDisconnection = true
@ -132,10 +132,10 @@ class DebugLogViewController: NSViewController {
let text = logLines.joined(separator: "\n")
guard !text.isEmpty else {
let alert = Macros.warning(
L10n.Core.Service.Cells.DebugLog.caption,
L10n.Core.DebugLog.Alerts.EmptyLog.message
L10n.Service.Cells.DebugLog.caption,
L10n.DebugLog.Alerts.EmptyLog.message
)
alert.present(in: view.window, withOK: L10n.Core.Global.ok, handler: nil)
alert.present(in: view.window, withOK: L10n.Global.ok, handler: nil)
return
}
let log = DebugLog(raw: text)
@ -249,7 +249,7 @@ class DebugLogViewController: NSViewController {
let up = count.1.dataUnitDescription
labelExchanged.stringValue = "\(down) / ↑\(up)"
} else {
labelExchanged.stringValue = L10n.Core.Service.Cells.DataCount.none
labelExchanged.stringValue = L10n.Service.Cells.DataCount.none
}
}
}

View File

@ -45,12 +45,12 @@ class PreferencesGeneralViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
checkLaunchOnLogin.title = L10n.App.Preferences.Cells.LaunchesOnLogin.caption
labelLaunchOnLogin.stringValue = L10n.App.Preferences.Cells.LaunchesOnLogin.footer
checkConfirmQuit.title = L10n.App.Preferences.Cells.ConfirmQuit.caption
labelConfirmQuit.stringValue = L10n.App.Preferences.Cells.ConfirmQuit.footer
checkResolveHostname.title = L10n.Core.Service.Cells.VpnResolvesHostname.caption
labelResolveHostname.stringValue = L10n.Core.Service.Sections.VpnResolvesHostname.footer
checkLaunchOnLogin.title = L10n.Preferences.Cells.LaunchesOnLogin.caption
labelLaunchOnLogin.stringValue = L10n.Preferences.Cells.LaunchesOnLogin.footer
checkConfirmQuit.title = L10n.Preferences.Cells.ConfirmQuit.caption
labelConfirmQuit.stringValue = L10n.Preferences.Cells.ConfirmQuit.footer
checkResolveHostname.title = L10n.Service.Cells.VpnResolvesHostname.caption
labelResolveHostname.stringValue = L10n.Service.Sections.VpnResolvesHostname.footer
checkLaunchOnLogin.state = (service.preferences.launchesOnLogin ?? true) ? .on : .off
checkConfirmQuit.state = (service.preferences.confirmsQuit ?? true) ? .on : .off

View File

@ -33,8 +33,8 @@ class PreferencesViewController: NSViewController {
super.viewDidLoad()
let labels = [
L10n.App.Preferences.Sections.General.header,
L10n.Core.Service.Sections.Diagnostics.header
L10n.Preferences.Sections.General.header,
L10n.Service.Sections.Diagnostics.header
]
tabView.tabViewItems.enumerated().forEach {
$1.label = labels[$0]

View File

@ -100,11 +100,11 @@ class PurchaseViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L10n.Core.Purchase.title
labelFooter.stringValue = L10n.Core.Purchase.Sections.Products.footer
labelRestore.stringValue = L10n.Core.Purchase.Cells.Restore.description
buttonPurchase.title = L10n.Core.Purchase.title
buttonRestore.title = L10n.Core.Purchase.Cells.Restore.title
title = L10n.Purchase.title
labelFooter.stringValue = L10n.Purchase.Sections.Products.footer
labelRestore.stringValue = L10n.Purchase.Cells.Restore.description
buttonPurchase.title = L10n.Purchase.title
buttonRestore.title = L10n.Purchase.Cells.Restore.title
tableView.usesAutomaticRowHeights = true
tableView.reloadData()
@ -202,7 +202,7 @@ class PurchaseViewController: NSViewController {
log.error("Unable to purchase \(product): \(error)")
let alert = Macros.warning(product.localizedTitle, error.localizedDescription)
_ = alert.presentModally(withOK: L10n.Core.Global.ok, cancel: nil)
_ = alert.presentModally(withOK: L10n.Global.ok, cancel: nil)
}
@objc private func close() {

View File

@ -63,17 +63,17 @@ class AccountViewController: NSViewController {
assert(profile != nil, "Profile not set")
labelUsernameCaption.stringValue = L10n.Core.Account.Cells.Username.caption.asCaption
labelUsernameCaption.stringValue = L10n.Account.Cells.Username.caption.asCaption
if let providerProfile = profile as? ProviderConnectionProfile {
textUsername.placeholderString = providerProfile.infrastructure.defaults.username
} else {
textUsername.placeholderString = L10n.Core.Account.Cells.Username.placeholder
textUsername.placeholderString = L10n.Account.Cells.Username.placeholder
}
labelPasswordCaption.stringValue = L10n.Core.Account.Cells.Password.caption.asCaption
textPassword.placeholderString = L10n.Core.Account.Cells.Password.placeholder
buttonGuidance.title = L10n.Core.Account.Cells.OpenGuide.caption
buttonOK.title = L10n.Core.Global.ok
buttonCancel.title = L10n.Core.Global.cancel
labelPasswordCaption.stringValue = L10n.Account.Cells.Password.caption.asCaption
textPassword.placeholderString = L10n.Account.Cells.Password.placeholder
buttonGuidance.title = L10n.Account.Cells.OpenGuide.caption
buttonOK.title = L10n.Global.ok
buttonCancel.title = L10n.Global.cancel
let credentials = service.credentials(for: profile)
textUsername.stringValue = credentials?.username ?? ""

View File

@ -94,14 +94,14 @@ class ConfigurationViewController: NSViewController, ProfileCustomization {
override func viewDidLoad() {
super.viewDidLoad()
labelPresetCaption.stringValue = L10n.Core.Service.Cells.Provider.Preset.caption.asCaption
labelPresetCaption.stringValue = L10n.Service.Cells.Provider.Preset.caption.asCaption
popupPreset.removeAllItems()
if !allPresets.isEmpty {
for preset in allPresets {
popupPreset.addItem(withTitle: preset.name)
}
} else {
popupPreset.addItem(withTitle: L10n.Core.Global.Values.default)
popupPreset.addItem(withTitle: L10n.Global.Values.default)
popupPreset.isEnabled = false
}
@ -194,7 +194,7 @@ extension ConfigurationViewController: NSTableViewDataSource, NSTableViewDelegat
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
let V = L10n.Core.Configuration.Cells.self
let V = L10n.Configuration.Cells.self
let rowObject = rows[row]
switch tableColumn?.identifier {

View File

@ -65,9 +65,9 @@ class DNSViewController: NSViewController, ProfileCustomization {
override func viewDidLoad() {
super.viewDidLoad()
labelDNSProtocol.stringValue = L10n.Core.Global.Captions.protocol.asCaption
labelDNSProtocol.stringValue = L10n.Global.Captions.protocol.asCaption
tableDNSAddresses.title = L10n.App.NetworkSettings.Dns.Cells.Addresses.title.asCaption
tableDNSAddresses.title = L10n.NetworkSettings.Dns.Cells.Addresses.title.asCaption
viewDNSAddresses.addSubview(tableDNSAddresses)
tableDNSAddresses.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
@ -77,7 +77,7 @@ class DNSViewController: NSViewController, ProfileCustomization {
tableDNSAddresses.rightAnchor.constraint(equalTo: viewDNSAddresses.rightAnchor),
])
tableDNSDomains.title = L10n.App.NetworkSettings.Dns.Cells.Domains.title.asCaption
tableDNSDomains.title = L10n.NetworkSettings.Dns.Cells.Domains.title.asCaption
viewDNSDomains.addSubview(tableDNSDomains)
tableDNSDomains.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([

View File

@ -52,8 +52,8 @@ class EndpointViewController: NSViewController, ProfileCustomization {
override func viewDidLoad() {
super.viewDidLoad()
labelAddressCaption.stringValue = L10n.App.Endpoint.Cells.address.asCaption
labelProtocolCaption.stringValue = L10n.Core.Global.Captions.protocol.asCaption
labelAddressCaption.stringValue = L10n.Endpoint.Cells.address.asCaption
labelProtocolCaption.stringValue = L10n.Global.Captions.protocol.asCaption
reloadEndpoints()
}
@ -75,8 +75,8 @@ class EndpointViewController: NSViewController, ProfileCustomization {
}
if dataSource.canCustomizeEndpoint {
popupAddress.insertItem(withTitle: L10n.Core.Endpoint.Cells.AnyAddress.caption, at: 0)
popupProtocol.insertItem(withTitle: L10n.Core.Endpoint.Cells.AnyProtocol.caption, at: 0)
popupAddress.insertItem(withTitle: L10n.Endpoint.Cells.AnyAddress.caption, at: 0)
popupProtocol.insertItem(withTitle: L10n.Endpoint.Cells.AnyProtocol.caption, at: 0)
if dataSource.customAddress == nil {
popupAddress.selectItem(at: 0)

View File

@ -64,10 +64,10 @@ class MTUViewController: NSViewController, ProfileCustomization {
popupChoice.selectItem(at: popupChoice.numberOfItems - 1)
}
}
labelMTUCaption.stringValue = L10n.Core.NetworkSettings.Mtu.Cells.Bytes.caption.asCaption
labelMTUCaption.stringValue = L10n.NetworkSettings.Mtu.Cells.Bytes.caption.asCaption
popupMTU.removeAllItems()
for opt in ProfileNetworkSettings.mtuOptions {
popupMTU.addItem(withTitle: (opt != 0) ? opt.description : L10n.Core.Global.Values.default)
popupMTU.addItem(withTitle: (opt != 0) ? opt.description : L10n.Global.Values.default)
}
loadSettings(from: currentChoice ?? ProfileNetworkChoices.defaultChoice)
}
@ -115,7 +115,7 @@ class MTUViewController: NSViewController, ProfileCustomization {
popupMTU.isEnabled = (currentChoice == .manual)
for (i, opt) in popupMTU.itemTitles.enumerated() {
if opt == L10n.Core.Global.Values.default {
if opt == L10n.Global.Values.default {
if bytes == nil {
popupMTU.selectItem(at: i)
break

View File

@ -89,8 +89,8 @@ class ProfileCustomizationContainerViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
buttonOK.title = L10n.Core.Global.ok
buttonCancel.title = L10n.Core.Global.cancel
buttonOK.title = L10n.Global.ok
buttonCancel.title = L10n.Global.cancel
pendingAddress = (profile as? ProviderConnectionProfile)?.customAddress
pendingProtocol = (profile as? ProviderConnectionProfile)?.customProtocol
@ -153,12 +153,12 @@ class ProfileCustomizationContainerViewController: NSViewController {
switch vpn.status {
case .connected, .connecting:
let alert = Macros.warning(
L10n.App.Configuration.title,
L10n.App.Configuration.Alerts.Commit.message
L10n.Configuration.title,
L10n.Configuration.Alerts.Commit.message
)
if alert.presentModally(
withOK: L10n.App.Configuration.Alerts.Commit.Buttons.reconnect,
cancel: L10n.App.Configuration.Alerts.Commit.Buttons.skip) {
withOK: L10n.Configuration.Alerts.Commit.Buttons.reconnect,
cancel: L10n.Configuration.Alerts.Commit.Buttons.skip) {
vpn.reconnect(completionHandler: nil)
} else {
@ -258,12 +258,12 @@ class ProfileCustomizationViewController: NSTabViewController {
let expectedTabs = 7
assert(tabViewItems.count == expectedTabs, "Customization tabs misconfigured (expected \(expectedTabs))")
tabViewItems[0].label = L10n.Core.Endpoint.title
tabViewItems[1].label = L10n.App.Configuration.title
tabViewItems[2].label = L10n.Core.Service.Sections.Trusted.header
tabViewItems[3].label = L10n.Core.NetworkSettings.Gateway.title
tabViewItems[4].label = L10n.Core.NetworkSettings.Dns.title
tabViewItems[5].label = L10n.Core.NetworkSettings.Proxy.title
tabViewItems[6].label = L10n.Core.NetworkSettings.Mtu.title
tabViewItems[0].label = L10n.Endpoint.title
tabViewItems[1].label = L10n.Configuration.title
tabViewItems[2].label = L10n.Service.Sections.Trusted.header
tabViewItems[3].label = L10n.NetworkSettings.Gateway.title
tabViewItems[4].label = L10n.NetworkSettings.Dns.title
tabViewItems[5].label = L10n.NetworkSettings.Proxy.title
tabViewItems[6].label = L10n.NetworkSettings.Mtu.title
}
}

View File

@ -70,13 +70,13 @@ class ProxyViewController: NSViewController, ProfileCustomization {
override func viewDidLoad() {
super.viewDidLoad()
labelProxyCaption.stringValue = L10n.Core.Global.Captions.address.asCaption
textProxyAddress.placeholderString = L10n.Core.Global.Values.none
textProxyPort.placeholderString = L10n.Core.Global.Values.none
labelProxyCaption.stringValue = L10n.Global.Captions.address.asCaption
textProxyAddress.placeholderString = L10n.Global.Values.none
textProxyPort.placeholderString = L10n.Global.Values.none
labelPACCaption.stringValue = "PAC".asCaption
textPAC.placeholderString = L10n.Core.Global.Values.none
textPAC.placeholderString = L10n.Global.Values.none
tableProxyBypass.title = L10n.App.NetworkSettings.Proxy.Cells.BypassDomains.title.asCaption
tableProxyBypass.title = L10n.NetworkSettings.Proxy.Cells.BypassDomains.title.asCaption
viewProxyBypass.addSubview(tableProxyBypass)
tableProxyBypass.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([

View File

@ -42,8 +42,8 @@ class TrustedNetworksAddViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
buttonOK.title = L10n.Core.Global.ok
buttonCancel.title = L10n.Core.Global.cancel
buttonOK.title = L10n.Global.ok
buttonCancel.title = L10n.Global.cancel
textSSID.stringValue = Utils.currentWifiNetworkName() ?? ""
}

View File

@ -64,13 +64,13 @@ class TrustedNetworksViewController: NSViewController, ProfileCustomization {
override func viewDidLoad() {
super.viewDidLoad()
labelTitle.stringValue = L10n.Core.Service.Sections.Trusted.header.asCaption
labelTitle.stringValue = L10n.Service.Sections.Trusted.header.asCaption
buttonAdd.image = NSImage(named: NSImage.addTemplateName)
buttonRemove.image = NSImage(named: NSImage.removeTemplateName)
checkTrustEthernet.title = L10n.App.Trusted.Ethernet.title
labelTrustEthernetDescription.stringValue = L10n.App.Trusted.Ethernet.description
checkDisableConnection.title = L10n.Core.Service.Cells.TrustedPolicy.caption
labelDisableConnectionDescription.stringValue = L10n.Core.Service.Sections.Trusted.footer
checkTrustEthernet.title = L10n.Trusted.Ethernet.title
labelTrustEthernetDescription.stringValue = L10n.Trusted.Ethernet.description
checkDisableConnection.title = L10n.Service.Cells.TrustedPolicy.caption
labelDisableConnectionDescription.stringValue = L10n.Service.Sections.Trusted.footer
checkTrustEthernet.state = trustedNetworks.includesEthernet ? .on : .off
checkDisableConnection.state = (trustedNetworks.policy == .disconnect) ? .on : .off
@ -86,7 +86,7 @@ class TrustedNetworksViewController: NSViewController, ProfileCustomization {
column.isEditable = false
case Columns.trust:
column.title = L10n.App.Trusted.Columns.Trust.title
column.title = L10n.Trusted.Columns.Trust.title
default:
break
@ -218,10 +218,10 @@ extension TrustedNetworksViewController: TrustedNetworksUIDelegate {
func trustedNetworksShouldConfirmDisconnection(_: TrustedNetworksUI, triggeredAt rowIndex: Int, completionHandler: @escaping () -> Void) {
let alert = Macros.warning(
L10n.Core.Service.Sections.Trusted.header,
L10n.Core.Service.Alerts.Trusted.WillDisconnectTrusted.message
L10n.Service.Sections.Trusted.header,
L10n.Service.Alerts.Trusted.WillDisconnectTrusted.message
)
alert.present(in: view.window, withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel, handler: completionHandler, cancelHandler: nil)
alert.present(in: view.window, withOK: L10n.Global.ok, cancel: L10n.Global.cancel, handler: completionHandler, cancelHandler: nil)
}
func trustedNetworks(_: TrustedNetworksUI, shouldInsertWifiAt rowIndex: Int) {

View File

@ -50,7 +50,7 @@ class HostServiceView: NSView {
override func viewWillMove(toSuperview newSuperview: NSView?) {
super.viewWillMove(toSuperview: newSuperview)
labelAddressesCaption.stringValue = L10n.App.Service.Cells.Addresses.caption.asCaption
labelAddressesCaption.stringValue = L10n.Service.Cells.Addresses.caption.asCaption
}
func reloadData() {

View File

@ -95,9 +95,9 @@ class ProviderServiceView: NSView {
override func viewWillMove(toSuperview newSuperview: NSView?) {
super.viewWillMove(toSuperview: newSuperview)
labelCategoryCaption.stringValue = L10n.App.Service.Cells.Category.caption.asCaption
labelLocationCaption.stringValue = L10n.Core.Service.Cells.Provider.Pool.caption.asCaption
checkOnlyShowsFavorites.title = L10n.App.Service.Cells.OnlyShowsFavorites.caption
labelCategoryCaption.stringValue = L10n.Service.Cells.Category.caption.asCaption
labelLocationCaption.stringValue = L10n.Service.Cells.Provider.Pool.caption.asCaption
checkOnlyShowsFavorites.title = L10n.Service.Cells.OnlyShowsFavorites.caption
checkOnlyShowsFavorites.state = .off
buttonRefreshInfrastructure.image = NSImage(named: NSImage.refreshTemplateName)
buttonFavorite.image = NSImage(named: NSImage.bookmarksTemplateName)
@ -180,7 +180,7 @@ class ProviderServiceView: NSView {
let menu = NSMenu()
categories.forEach { category in
let item = NSMenuItem()
item.title = !category.name.isEmpty ? category.name.capitalized : L10n.Core.Global.Values.default
item.title = !category.name.isEmpty ? category.name.capitalized : L10n.Global.Values.default
item.representedObject = category
menu.addItem(item)
@ -202,7 +202,7 @@ class ProviderServiceView: NSView {
}
if let lastInfrastructureUpdate = InfrastructureFactory.shared.modificationDate(forName: profile.name) {
labelLastInfrastructureUpdate.stringValue = L10n.Core.Service.Sections.ProviderInfrastructure.footer(lastInfrastructureUpdate.timestamp)
labelLastInfrastructureUpdate.stringValue = L10n.Service.Sections.ProviderInfrastructure.footer(lastInfrastructureUpdate.timestamp)
}
checkOnlyShowsFavorites.isEnabled = !(profile.favoriteGroupIds?.isEmpty ?? true)
@ -257,7 +257,7 @@ class ProviderServiceView: NSView {
guard !$0.secondaryId.isEmpty || pools.count > 1 else {
return
}
let title = !$0.secondaryId.isEmpty ? $0.secondaryId : L10n.Core.Global.Values.default
let title = !$0.secondaryId.isEmpty ? $0.secondaryId : L10n.Global.Values.default
let item = NSMenuItem(title: title, action: nil, keyEquivalent: "")
if let extraCountry = $0.extraCountries?.first {
item.image = extraCountry.image

View File

@ -150,14 +150,14 @@ class ServiceViewController: NSViewController {
// enforce on macOS
service.preferences.disconnectsOnSleep = true
labelWelcome.stringValue = L10n.Core.Service.Welcome.message
labelStatusCaption.stringValue = L10n.Core.Service.Cells.ConnectionStatus.caption.asCaption
labelServiceDescription.stringValue = L10n.Core.Service.Sections.Vpn.footer
buttonUse.title = L10n.Core.Service.Cells.UseProfile.caption
buttonToggle.title = L10n.App.Service.Cells.Vpn.TurnOn.caption
buttonReconnect.title = L10n.Core.Service.Cells.Reconnect.caption
labelWelcome.stringValue = L10n.Service.Welcome.message
labelStatusCaption.stringValue = L10n.Service.Cells.ConnectionStatus.caption.asCaption
labelServiceDescription.stringValue = L10n.Service.Sections.Vpn.footer
buttonUse.title = L10n.Service.Cells.UseProfile.caption
buttonToggle.title = L10n.Service.Cells.Vpn.TurnOn.caption
buttonReconnect.title = L10n.Service.Cells.Reconnect.caption
buttonCustomize.image = NSImage(named: NSImage.actionTemplateName)
buttonAccount.title = L10n.Core.Account.title.asContinuation
buttonAccount.title = L10n.Account.title.asContinuation
let nc = NotificationCenter.default
nc.addObserver(self, selector: #selector(vpnDidUpdate), name: VPN.didChangeStatus, object: nil)
@ -216,13 +216,13 @@ class ServiceViewController: NSViewController {
// }
//// guard vpn.status == .disconnected else {
//// let alert = Macros.alert(
//// L10n.Core.Service.Cells.ConnectionStatus.caption,
//// L10n.Core.Service.Alerts.ReconnectVpn.message
//// L10n.Service.Cells.ConnectionStatus.caption,
//// L10n.Service.Alerts.ReconnectVpn.message
//// )
//// alert.addDefaultAction(L10n.Core.Global.ok) {
//// alert.addDefaultAction(L10n.Global.ok) {
//// self.vpn.reconnect(configuration: self.currentVpnConfiguration(), completionHandler: nil)
//// }
//// alert.addCancelAction(L10n.Core.Global.cancel)
//// alert.addCancelAction(L10n.Global.cancel)
//// present(alert, animated: true, completion: nil)
//// return
//// }
@ -276,14 +276,14 @@ class ServiceViewController: NSViewController {
guard isActive && vpn.isEnabled else {
labelStatus.applyVPN(Theme.current, isActive: isActive, with: nil, error: nil)
activityVPN.stopAnimation(nil)
buttonToggle.title = L10n.App.Service.Cells.Vpn.TurnOn.caption
buttonToggle.title = L10n.Service.Cells.Vpn.TurnOn.caption
buttonToggle.isEnabled = true
buttonReconnect.isEnabled = false
return
}
labelStatus.applyVPN(Theme.current, isActive: isActive, with: vpn.status, error: service.vpnLastError)
buttonToggle.title = vpn.isEnabled ? L10n.App.Service.Cells.Vpn.TurnOff.caption : L10n.App.Service.Cells.Vpn.TurnOn.caption
buttonToggle.title = vpn.isEnabled ? L10n.Service.Cells.Vpn.TurnOff.caption : L10n.Service.Cells.Vpn.TurnOn.caption
buttonReconnect.isEnabled = true
// append connected location for providers

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Aus";
"organizer.title" = "%@";
"organizer.menus.provider" = "Anbieter";
"organizer.menus.provider.unavailable" = "Keine Anbieter übrig";
"organizer.menus.host" = "Host";
"organizer.alerts.remove_profile.title" = "Profil entfernen";
"organizer.alerts.remove_profile.message" = "Bist du sicher, dass du das Profil %@ löschen möchtest?";
"organizer.alerts.open_host_file.title" = "Wähle eine .ovpn-Datei.";
"service.cells.vpn.turn_on.caption" = "Aktiviere VPN";
"service.cells.vpn.turn_off.caption" = "Deaktiviere VPN";
"service.cells.category.caption" = "Kategorie";
"service.cells.addresses.caption" = "Adressen";
"service.cells.only_shows_favorites.caption" = "Nur favorisierte Standorte anzeigen";
"endpoint.cells.address" = "Adresse";
"endpoint.cells.protocol" = "Protokoll";
"configuration.title" = "Konfiguration";
"configuration.alerts.commit.message" = "Neue Parameter werden erst nach einer manuellen Wiederherstellung der Verbindung wirksam. Änderungen in vertrauenswürdigen Netzwerken werden sofort wirksam.";
"configuration.alerts.commit.buttons.reconnect" = "Jetzt erneut verbinden";
"configuration.alerts.commit.buttons.skip" = "Überspringen";
"network_settings.dns.cells.addresses.title" = "Server";
"network_settings.dns.cells.domains.title" = "Domänen";
"network_settings.proxy.cells.bypass_domains.title" = "Domänen umgehen";
"preferences.title" = "Einstellungen";
"preferences.sections.general.header" = "Allgemein";
"preferences.cells.launches_on_login.caption" = "Bei Anmeldung starten";
"preferences.cells.launches_on_login.footer" = "Hier ein Häkchen setzen, um die App beim Systemstart oder der Anmeldung automatisch zu starten.";
"preferences.cells.confirm_quit.caption" = "Beenden bestätigen";
"preferences.cells.confirm_quit.footer" = "Hier ein Häkchen setzen, um einen Hinweis zur Bestätigung des Beendens anzuzeigen.";
"debug_log.buttons.copy" = "Kopieren";
"trusted.columns.trust.title" = "Vertrauen";
"trusted.ethernet.title" = "Kabelverbindungen vertrauen";
"trusted.ethernet.description" = "Hier ein Häkchen setzen, um jeder Kabelverbindung zu vertrauen.";
"menu.show.title" = "Anzeigen";
"menu.switch_profile.title" = "Aktives Profil";
"menu.active_profile.title.none" = "Keine aktiven Profile";
"menu.active_profile.items.customize.title" = "Anpassen...";
"menu.active_profile.messages.missing_credentials" = "Es wurde keine Konto konfiguriert";
"menu.organizer.title" = "Organizer";
"menu.preferences.title" = "Einstellungen";
"menu.support.title" = "Support";
"menu.quit.title" = "%@ beenden";
"menu.quit.messages.confirm" = "Wenn das VPN aktiviert wurde, läuft es weiter im Hintergrund. Möchtest du beenden?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Ανενεργό";
"organizer.title" = "%@";
"organizer.menus.provider" = "Πάροχος";
"organizer.menus.provider.unavailable" = "Δεν απομένουν πάροχοι";
"organizer.menus.host" = "Εξυπηρετητής";
"organizer.alerts.remove_profile.title" = "Κατάργηση προφίλ";
"organizer.alerts.remove_profile.message" = "Είστε βέβαιοι ότι θέλετε να διαγράψετε το προφίλ %@;";
"organizer.alerts.open_host_file.title" = "Επιλέξτε ένα αρχείο .ovpn";
"service.cells.vpn.turn_on.caption" = "Ενεργοποίηση VPN";
"service.cells.vpn.turn_off.caption" = "Απενεργοποίηση VPN";
"service.cells.category.caption" = "Κατηγορία";
"service.cells.addresses.caption" = "Διευθύνσεις";
"service.cells.only_shows_favorites.caption" = "Προβολή αγαπημένων τοποθεσιών μόνο";
"endpoint.cells.address" = "Διεύθυνση";
"endpoint.cells.protocol" = "Πρωτόκολλο";
"configuration.title" = "Ρύθμιση";
"configuration.alerts.commit.message" = "Οι νέες παράμετροι δεν θα είναι αποτελεσματικές έως ότου επανασυνδεθείτε χειροκίνητα. Οι αλλαγές στα αξιόπιστα δίκτυα θα εφαρμοστούν αμέσως.";
"configuration.alerts.commit.buttons.reconnect" = "Επανασυνδεθείτε τώρα";
"configuration.alerts.commit.buttons.skip" = "Παράλειψη";
"network_settings.dns.cells.addresses.title" = "Διακομιστές";
"network_settings.dns.cells.domains.title" = "Τομείς";
"network_settings.proxy.cells.bypass_domains.title" = "Παράκαμψη τομέων";
"preferences.title" = "Προτιμήσεις";
"preferences.sections.general.header" = "Γενικός";
"preferences.cells.launches_on_login.caption" = "Εκκίνηση κατά τη σύνδεση";
"preferences.cells.launches_on_login.footer" = "Επιλέξτε για αυτόματη εκκίνηση της εφαρμογής κατά την εκκίνηση ή τη σύνδεση.";
"preferences.cells.confirm_quit.caption" = "Επιβεβαίωση διακοπής";
"preferences.cells.confirm_quit.footer" = "Επιλέξτε για παρουσίαση ειδοποίησης ότι επιβεβαιώνεται η διακοπή.";
"debug_log.buttons.copy" = "Αντιγραφή";
"trusted.columns.trust.title" = "Εμπιστευθείτε";
"trusted.ethernet.title" = "Εμπιστευθείτε τις ενσύρματες συνδέσεις";
"trusted.ethernet.description" = "Επιλέξτε για να εμπιστευθείτε οποιαδήποτε ενσύρματη σύνδεση καλωδίου.";
"menu.show.title" = "Προβολή";
"menu.switch_profile.title" = "Ενεργό προφίλ";
"menu.active_profile.title.none" = "Δεν υπάρχει ενεργό προφίλ";
"menu.active_profile.items.customize.title" = "Προσαρμογή...";
"menu.active_profile.messages.missing_credentials" = "Δεν έχει διαμορφωθεί λογαριασμός";
"menu.organizer.title" = "Διοργανωτής";
"menu.preferences.title" = "Προτιμήσεις";
"menu.support.title" = "Υποστήριξη";
"menu.quit.title" = "Διακοπή %@";
"menu.quit.messages.confirm" = "Το VPN, αν είναι ενεργοποιημένο, θα εξακολουθεί να εκτελείται στο παρασκήνιο. Θέλετε να το διακόψετε;";

View File

@ -1,76 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Off";
"organizer.title" = "%@";
"organizer.menus.provider" = "Provider";
"organizer.menus.provider.unavailable" = "No providers left";
"organizer.menus.host" = "Host";
"organizer.alerts.remove_profile.title" = "Remove profile";
"organizer.alerts.remove_profile.message" = "Are you sure you want to delete profile %@?";
"organizer.alerts.open_host_file.title" = "Select an .ovpn file";
"service.cells.vpn.turn_on.caption" = "Enable VPN";
"service.cells.vpn.turn_off.caption" = "Disable VPN";
"service.cells.category.caption" = "Category";
"service.cells.addresses.caption" = "Addresses";
"service.cells.only_shows_favorites.caption" = "Only show favorite locations";
"endpoint.cells.address" = "Address";
"endpoint.cells.protocol" = "Protocol";
"configuration.title" = "Configuration";
"configuration.alerts.commit.message" = "New parameters will not be effective until you reconnect manually. Changes in trusted networks will apply immediately.";
"configuration.alerts.commit.buttons.reconnect" = "Reconnect now";
"configuration.alerts.commit.buttons.skip" = "Skip";
"network_settings.dns.cells.addresses.title" = "Servers";
"network_settings.dns.cells.domains.title" = "Domains";
"network_settings.proxy.cells.bypass_domains.title" = "Bypass domains";
"preferences.title" = "Preferences";
"preferences.sections.general.header" = "General";
"preferences.cells.launches_on_login.caption" = "Launch on login";
"preferences.cells.launches_on_login.footer" = "Check to automatically launch the app on boot or login.";
"preferences.cells.confirm_quit.caption" = "Confirm quit";
"preferences.cells.confirm_quit.footer" = "Check to present a quit confirmation alert.";
"debug_log.buttons.copy" = "Copy";
"trusted.columns.trust.title" = "Trust";
"trusted.ethernet.title" = "Trust wired connections";
"trusted.ethernet.description" = "Check to trust any wired cable connection.";
"menu.show.title" = "Show";
"menu.switch_profile.title" = "Active profile";
"menu.active_profile.title.none" = "No active profile";
"menu.active_profile.items.customize.title" = "Customize...";
"menu.active_profile.messages.missing_credentials" = "No account configured";
"menu.organizer.title" = "Organizer";
"menu.preferences.title" = "Preferences";
"menu.support.title" = "Support";
"menu.quit.title" = "Quit %@";
"menu.quit.messages.confirm" = "The VPN, if enabled, will still run in the background. Do you want to quit?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Desactivada";
"organizer.title" = "%@";
"organizer.menus.provider" = "Proveedor";
"organizer.menus.provider.unavailable" = "No quedan proveedores";
"organizer.menus.host" = "Host";
"organizer.alerts.remove_profile.title" = "Quitar perfil";
"organizer.alerts.remove_profile.message" = "¿Seguro que deseas eliminar el perfil %@?";
"organizer.alerts.open_host_file.title" = "Selecciona un archivo .ovpn";
"service.cells.vpn.turn_on.caption" = "Habilitar VPN";
"service.cells.vpn.turn_off.caption" = "Deshabilitar VPN";
"service.cells.category.caption" = "Categoría";
"service.cells.addresses.caption" = "Direcciones";
"service.cells.only_shows_favorites.caption" = "Mostrar solo ubicaciones favoritas";
"endpoint.cells.address" = "Dirección";
"endpoint.cells.protocol" = "Protocolo";
"configuration.title" = "Configuración";
"configuration.alerts.commit.message" = "Los nuevos parámetros no serán efectivos hasta que te reconectes manualmente. Los cambios en las redes de confianza se aplicarán de inmediato.";
"configuration.alerts.commit.buttons.reconnect" = "Reconectar ahora";
"configuration.alerts.commit.buttons.skip" = "Omitir";
"network_settings.dns.cells.addresses.title" = "Servidores";
"network_settings.dns.cells.domains.title" = "Dominios";
"network_settings.proxy.cells.bypass_domains.title" = "Dominios ignorados";
"preferences.title" = "Preferencias";
"preferences.sections.general.header" = "General";
"preferences.cells.launches_on_login.caption" = "Iniciar al iniciar sesión";
"preferences.cells.launches_on_login.footer" = "Activa esta opción para que la aplicación se inicie automáticamente al iniciar o al iniciar sesión.";
"preferences.cells.confirm_quit.caption" = "Confirmar salir";
"preferences.cells.confirm_quit.footer" = "Activa esta opción para que se muestre una alerta de confirmación al salir.";
"debug_log.buttons.copy" = "Copiar";
"trusted.columns.trust.title" = "Confianza";
"trusted.ethernet.title" = "Confiar en conexiones cableadas";
"trusted.ethernet.description" = "Activa esta opción para confiar en cualquier conexión cableada.";
"menu.show.title" = "Mostrar";
"menu.switch_profile.title" = "Perfil activo";
"menu.active_profile.title.none" = "Ningún perfil activo";
"menu.active_profile.items.customize.title" = "Personalizar...";
"menu.active_profile.messages.missing_credentials" = "Ninguna cuenta configurada";
"menu.organizer.title" = "Organizador";
"menu.preferences.title" = "Preferencias";
"menu.support.title" = "Soporte";
"menu.quit.title" = "Salir de %@";
"menu.quit.messages.confirm" = "Si la VPN está habilitada, seguirá funcionando en segundo plano. ¿Deseas salir?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Désactivé";
"organizer.title" = "%@";
"organizer.menus.provider" = "Fournisseur";
"organizer.menus.provider.unavailable" = "Aucun fournisseur restant";
"organizer.menus.host" = "Hôte";
"organizer.alerts.remove_profile.title" = "Supprimer le profil";
"organizer.alerts.remove_profile.message" = "Voulez-vous vraiment supprimer le profil %@ ?";
"organizer.alerts.open_host_file.title" = "Sélectionnez un fichier .ovpn";
"service.cells.vpn.turn_on.caption" = "Activer VPN";
"service.cells.vpn.turn_off.caption" = "Désactiver VPN";
"service.cells.category.caption" = "Catégorie";
"service.cells.addresses.caption" = "Adresses";
"service.cells.only_shows_favorites.caption" = "Afficher uniquement les emplacements favoris";
"endpoint.cells.address" = "Adresse";
"endpoint.cells.protocol" = "Protocole";
"configuration.title" = "Configuration";
"configuration.alerts.commit.message" = "Vous devez vous reconnecter manuellement pour confirmer les nouveaux paramètres. Les modifications apportées sur les réseaux de confiance seront immédiatement mises en place.";
"configuration.alerts.commit.buttons.reconnect" = "Se reconnecter";
"configuration.alerts.commit.buttons.skip" = "Passer";
"network_settings.dns.cells.addresses.title" = "Serveurs";
"network_settings.dns.cells.domains.title" = "Domaines";
"network_settings.proxy.cells.bypass_domains.title" = "Outrepasser le domaine";
"preferences.title" = "Préférences";
"preferences.sections.general.header" = "Général";
"preferences.cells.launches_on_login.caption" = "Lancer au démarrage";
"preferences.cells.launches_on_login.footer" = "Cochez pour lancer automatiquement l'application à la connexion ou au démarrage.";
"preferences.cells.confirm_quit.caption" = "Notification de sortie";
"preferences.cells.confirm_quit.footer" = "Cochez pour recevoir une demande de confirmation lorsque vous quittez.";
"debug_log.buttons.copy" = "Copier";
"trusted.columns.trust.title" = "Fiables";
"trusted.ethernet.title" = "Faire confiance aux connexions filaires";
"trusted.ethernet.description" = "Cochez pour faire confiance à toutes les connexions filaires.";
"menu.show.title" = "Afficher";
"menu.switch_profile.title" = "Profil actif";
"menu.active_profile.title.none" = "Pas de profil actif";
"menu.active_profile.items.customize.title" = "Personnaliser...";
"menu.active_profile.messages.missing_credentials" = "Pas de compte configuré";
"menu.organizer.title" = "Organisateur";
"menu.preferences.title" = "Préférences";
"menu.support.title" = "Assistance";
"menu.quit.title" = "Quitter %@";
"menu.quit.messages.confirm" = "S'il est activé, le VPN fonctionnera en tâche de fond. Voulez-vous quitter ?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Spento";
"organizer.title" = "%@";
"organizer.menus.provider" = "Provider";
"organizer.menus.provider.unavailable" = "Nessun altro provider disponibile";
"organizer.menus.host" = "Host";
"organizer.alerts.remove_profile.title" = "Cancella profilo";
"organizer.alerts.remove_profile.message" = "Sei sicuro di voler cancellare il profilo %@?";
"organizer.alerts.open_host_file.title" = "Seleziona un file .ovpn";
"service.cells.vpn.turn_on.caption" = "Abilita VPN";
"service.cells.vpn.turn_off.caption" = "Disabilita VPN";
"service.cells.category.caption" = "Categoria";
"service.cells.addresses.caption" = "Indirizzi";
"service.cells.only_shows_favorites.caption" = "Mostra solo le posizioni preferite";
"endpoint.cells.address" = "Indirizzo";
"endpoint.cells.protocol" = "Protocollo";
"configuration.title" = "Configurazione";
"configuration.alerts.commit.message" = "I nuovi parametri non saranno effettivi finché non ti riconnetti manualmente. I cambi nelle reti sicure saranno applicati immediatamente.";
"configuration.alerts.commit.buttons.reconnect" = "Riconnetti adesso";
"configuration.alerts.commit.buttons.skip" = "Ignora";
"network_settings.dns.cells.addresses.title" = "Server";
"network_settings.dns.cells.domains.title" = "Dominii";
"network_settings.proxy.cells.bypass_domains.title" = "Dominii ignorati";
"preferences.title" = "Preferenze";
"preferences.sections.general.header" = "Generale";
"preferences.cells.launches_on_login.caption" = "Apri al login";
"preferences.cells.launches_on_login.footer" = "Seleziona per aprire automaticamente l'app all'avvio o al login.";
"preferences.cells.confirm_quit.caption" = "Conferma uscita";
"preferences.cells.confirm_quit.footer" = "Seleziona per confermare l'uscita dall'applicazione.";
"debug_log.buttons.copy" = "Copia";
"trusted.columns.trust.title" = "Sicura";
"trusted.ethernet.title" = "Connessioni cablate sicure";
"trusted.ethernet.description" = "Seleziona per considerare sicura qualsiasi rete cablata.";
"menu.show.title" = "Mostra";
"menu.switch_profile.title" = "Profilo attivo";
"menu.active_profile.title.none" = "Nessun profilo attivo";
"menu.active_profile.items.customize.title" = "Personalizza...";
"menu.active_profile.messages.missing_credentials" = "Nessun account configurato";
"menu.organizer.title" = "Organizer";
"menu.preferences.title" = "Preferenze";
"menu.support.title" = "Supporto";
"menu.quit.title" = "Esci da %@";
"menu.quit.messages.confirm" = "La VPN, se abilitata, continuerà ad essere attiva in background. Vuoi comunque uscire?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Uit";
"organizer.title" = "%@";
"organizer.menus.provider" = "Aanbieder";
"organizer.menus.provider.unavailable" = "Geen aanbieders meer";
"organizer.menus.host" = "Host";
"organizer.alerts.remove_profile.title" = "Profiel verwijderen";
"organizer.alerts.remove_profile.message" = "Weet u zeker dat u profiel %@ wilt verwijderen?";
"organizer.alerts.open_host_file.title" = "Selecteer een .ovpn-bestand";
"service.cells.vpn.turn_on.caption" = "VPN activeren";
"service.cells.vpn.turn_off.caption" = "VPN deactiveren";
"service.cells.category.caption" = "Categorie";
"service.cells.addresses.caption" = "Adressen";
"service.cells.only_shows_favorites.caption" = "Alleen favoriete locaties weergeven";
"endpoint.cells.address" = "Adres";
"endpoint.cells.protocol" = "Protocol";
"configuration.title" = "Configuratie";
"configuration.alerts.commit.message" = "Nieuwe parameters worden pas van kracht als u handmatig opnieuw verbinding maakt. Wijzigingen in vertrouwde netwerken zijn direct van toepassing.";
"configuration.alerts.commit.buttons.reconnect" = "Opnieuw verbinden";
"configuration.alerts.commit.buttons.skip" = "Overslaan";
"network_settings.dns.cells.addresses.title" = "Servers";
"network_settings.dns.cells.domains.title" = "Domeinen";
"network_settings.proxy.cells.bypass_domains.title" = "Domeinen omzeilen";
"preferences.title" = "Voorkeuren";
"preferences.sections.general.header" = "Algemeen";
"preferences.cells.launches_on_login.caption" = "Lanceren bij aanmelden";
"preferences.cells.launches_on_login.footer" = "Vink aan als u wilt dat de app automatisch wordt gelanceerd bij opstarten of aanmelden.";
"preferences.cells.confirm_quit.caption" = "Sluiten bevestigen";
"preferences.cells.confirm_quit.footer" = "Vink aan om een bevestigingsmelding te sluiten.";
"debug_log.buttons.copy" = "Kopiëren";
"trusted.columns.trust.title" = "Vertrouwen";
"trusted.ethernet.title" = "Bekabelde verbindingen vertrouwen";
"trusted.ethernet.description" = "Vink aan om alle bekabelde verbindingen te vertrouwen.";
"menu.show.title" = "Weergeven";
"menu.switch_profile.title" = "Actief profiel";
"menu.active_profile.title.none" = "Geen actief profiel";
"menu.active_profile.items.customize.title" = "Aanpassen...";
"menu.active_profile.messages.missing_credentials" = "Geen account geconfigureerd";
"menu.organizer.title" = "Organisator";
"menu.preferences.title" = "Voorkeuren";
"menu.support.title" = "Ondersteuning";
"menu.quit.title" = "%@ afsluiten";
"menu.quit.messages.confirm" = "De VPN zal, indien geactiveerd, op de achtergrond blijven draaien. Wilt u sluiten?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Wył";
"organizer.title" = "%@";
"organizer.menus.provider" = "Dostawca";
"organizer.menus.provider.unavailable" = "Brak dostawców";
"organizer.menus.host" = "Host";
"organizer.alerts.remove_profile.title" = "Usuń profil";
"organizer.alerts.remove_profile.message" = "Na pewno chcesz usunąć profil %@?";
"organizer.alerts.open_host_file.title" = "Wybierz plik .ovpn";
"service.cells.vpn.turn_on.caption" = "Włącz VPN";
"service.cells.vpn.turn_off.caption" = "Wyłącz VPN";
"service.cells.category.caption" = "Kategoria";
"service.cells.addresses.caption" = "Adresy";
"service.cells.only_shows_favorites.caption" = "Pokazuj tylko ulubione lokalizacje";
"endpoint.cells.address" = "Adres";
"endpoint.cells.protocol" = "Protokół";
"configuration.title" = "Konfiguracja";
"configuration.alerts.commit.message" = "Nowe parametry zaczną obowiązywać dopiero po ponownym ręcznym połączeniu. Zmiany w sieciach zaufanych zostaną zastosowane natychmiast.";
"configuration.alerts.commit.buttons.reconnect" = "Połącz ponownie teraz";
"configuration.alerts.commit.buttons.skip" = "Pomiń";
"network_settings.dns.cells.addresses.title" = "Serwery";
"network_settings.dns.cells.domains.title" = "Domeny";
"network_settings.proxy.cells.bypass_domains.title" = "Pomiń domeny";
"preferences.title" = "Preferencje";
"preferences.sections.general.header" = "Ogólne";
"preferences.cells.launches_on_login.caption" = "Uruchom po zalogowaniu";
"preferences.cells.launches_on_login.footer" = "Zaznacz, aby automatycznie uruchamiać aplikację przy restarcie systemu lub logowaniu.";
"preferences.cells.confirm_quit.caption" = "Potwierdź zakończenie pracy";
"preferences.cells.confirm_quit.footer" = "Zaznacz, aby wyświetlić monit o potwierdzeniu zakończenia.";
"debug_log.buttons.copy" = "Kopiuj";
"trusted.columns.trust.title" = "Ufaj";
"trusted.ethernet.title" = "Ufaj połączeniom przewodowym";
"trusted.ethernet.description" = "Zaznacz, aby traktować każde przewodowe połączenie kablowe jako zaufane.";
"menu.show.title" = "Pokaż";
"menu.switch_profile.title" = "Aktywny profil";
"menu.active_profile.title.none" = "Brak aktywnych profili";
"menu.active_profile.items.customize.title" = "Personalizuj";
"menu.active_profile.messages.missing_credentials" = "Brak skonfigurowanych kont";
"menu.organizer.title" = "Organzator";
"menu.preferences.title" = "Preferencje";
"menu.support.title" = "Obsługa techniczna";
"menu.quit.title" = "Zakończ %@";
"menu.quit.messages.confirm" = "Jeśli sieć VPN, jest włączona, będzie nadal działać w tle. Chcesz zakończyć?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Desativado";
"organizer.title" = "%@";
"organizer.menus.provider" = "Fornecedor";
"organizer.menus.provider.unavailable" = "Não restam fornecedores";
"organizer.menus.host" = "Anfitreão";
"organizer.alerts.remove_profile.title" = "Remover perfil";
"organizer.alerts.remove_profile.message" = "Tem a certeza de que pretende eliminar o perfil %@?";
"organizer.alerts.open_host_file.title" = "Selecionar um ficheiro .ovpn";
"service.cells.vpn.turn_on.caption" = "Ativar VPN";
"service.cells.vpn.turn_off.caption" = "Desativar VPN";
"service.cells.category.caption" = "Categoria";
"service.cells.addresses.caption" = "Endereços";
"service.cells.only_shows_favorites.caption" = "Mostrar apenas os locais preferidos";
"endpoint.cells.address" = "Endereço";
"endpoint.cells.protocol" = "Protocolo";
"configuration.title" = "Configuração";
"configuration.alerts.commit.message" = "Os novos parâmetros não serão efetivos até que se volte a ligar manualmente. As alterações às redes de confiança serão aplicadas de imediato.";
"configuration.alerts.commit.buttons.reconnect" = "Voltar a ligar agora";
"configuration.alerts.commit.buttons.skip" = "Ignorar";
"network_settings.dns.cells.addresses.title" = "Servidores";
"network_settings.dns.cells.domains.title" = "Domínios";
"network_settings.proxy.cells.bypass_domains.title" = "Fazer um bypass aos domínios";
"preferences.title" = "Preferências";
"preferences.sections.general.header" = "Geral";
"preferences.cells.launches_on_login.caption" = "Iniciar ao iniciar a sessão";
"preferences.cells.launches_on_login.footer" = "Assinale para executar automaticamente a aplicação ao arrancar ou com o início de sessão.";
"preferences.cells.confirm_quit.caption" = "Confirmar a saída";
"preferences.cells.confirm_quit.footer" = "Assinale para apresentar um alerta de confirmação da saída.";
"debug_log.buttons.copy" = "Copiar";
"trusted.columns.trust.title" = "Confiar";
"trusted.ethernet.title" = "Confiar em ligações com fios";
"trusted.ethernet.description" = "Assinale para confiar em qualquer ligação com cabo.";
"menu.show.title" = "Mostrar";
"menu.switch_profile.title" = "Perfil ativo";
"menu.active_profile.title.none" = "Sem perfil ativo";
"menu.active_profile.items.customize.title" = "Personalizar...";
"menu.active_profile.messages.missing_credentials" = "Não há uma conta configurada";
"menu.organizer.title" = "Organizador";
"menu.preferences.title" = "Preferências";
"menu.support.title" = "Apoio";
"menu.quit.title" = "Sair %@";
"menu.quit.messages.confirm" = "A VPN, se ativa, ainda vai ser executada em segundo plano. Quer sair?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Выкл";
"organizer.title" = "%@";
"organizer.menus.provider" = "Провайдер";
"organizer.menus.provider.unavailable" = "Не осталось провайдеров";
"organizer.menus.host" = "Хост";
"organizer.alerts.remove_profile.title" = "Удалить профиль";
"organizer.alerts.remove_profile.message" = "Вы точно хотите удалить профиль %@?";
"organizer.alerts.open_host_file.title" = "Выберите файл .ovpn";
"service.cells.vpn.turn_on.caption" = "Включить VPN";
"service.cells.vpn.turn_off.caption" = "Отключить VPN";
"service.cells.category.caption" = "Категория";
"service.cells.addresses.caption" = "Адреса";
"service.cells.only_shows_favorites.caption" = "Показывать только места из избранного";
"endpoint.cells.address" = "Адрес";
"endpoint.cells.protocol" = "Протокол";
"configuration.title" = "Конфигурация";
"configuration.alerts.commit.message" = "Новые параметры не вступят в силу до ручного переподключения. Изменения в доверенных сетях вступят в силу сразу.";
"configuration.alerts.commit.buttons.reconnect" = "Переподключиться";
"configuration.alerts.commit.buttons.skip" = "Пропустить";
"network_settings.dns.cells.addresses.title" = "Серверы";
"network_settings.dns.cells.domains.title" = "Домены";
"network_settings.proxy.cells.bypass_domains.title" = "Обходные домены";
"preferences.title" = "Настройки";
"preferences.sections.general.header" = "Общие";
"preferences.cells.launches_on_login.caption" = "Запускать при входе";
"preferences.cells.launches_on_login.footer" = "Включите, чтобы приложение автоматически запускалось при загрузке или входе.";
"preferences.cells.confirm_quit.caption" = "Подтверждать выход";
"preferences.cells.confirm_quit.footer" = "Включите, чтобы выход надо было подтверждать.";
"debug_log.buttons.copy" = "Копировать";
"trusted.columns.trust.title" = "Доверенные";
"trusted.ethernet.title" = "Доверенные проводные подключения";
"trusted.ethernet.description" = "Включите, чтобы добавить в доверенные проводное подключение.";
"menu.show.title" = "Показать";
"menu.switch_profile.title" = "Активный профиль";
"menu.active_profile.title.none" = "Нет активных профилей";
"menu.active_profile.items.customize.title" = "Настроить...";
"menu.active_profile.messages.missing_credentials" = "Нет настроенных аккаунтов";
"menu.organizer.title" = "Организатор";
"menu.preferences.title" = "Настройки";
"menu.support.title" = "Поддержка";
"menu.quit.title" = "Выйти из %@";
"menu.quit.messages.confirm" = "Если включить VPN, он всё равно будет работать в фоновом режиме. Вы точно хотите выйти?";

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "Av";
"organizer.title" = "%@";
"organizer.menus.provider" = "Leverantör";
"organizer.menus.provider.unavailable" = "Inga leverantörer kvar";
"organizer.menus.host" = "Värd";
"organizer.alerts.remove_profile.title" = "Ta bort profil";
"organizer.alerts.remove_profile.message" = "Är det säkert att du vill ta bort profilen %@?";
"organizer.alerts.open_host_file.title" = "Välj en .ovpn-fil";
"service.cells.vpn.turn_on.caption" = "Aktivera VPN";
"service.cells.vpn.turn_off.caption" = "Inaktivera VPN";
"service.cells.category.caption" = "Kategori";
"service.cells.addresses.caption" = "Adresser";
"service.cells.only_shows_favorites.caption" = "Visa endast favoritplatser";
"endpoint.cells.address" = "Adress";
"endpoint.cells.protocol" = "Protokoll";
"configuration.title" = "Konfiguration";
"configuration.alerts.commit.message" = "Nya parametrar kommer inte att införas förrän du återansluter manuellt. Ändringar i betrodda nätverk kommer att införas omedelbart.";
"configuration.alerts.commit.buttons.reconnect" = "Återanslut nu";
"configuration.alerts.commit.buttons.skip" = "Hoppa över";
"network_settings.dns.cells.addresses.title" = "Servrar";
"network_settings.dns.cells.domains.title" = "Domäner";
"network_settings.proxy.cells.bypass_domains.title" = "Kringgå domäner";
"preferences.title" = "Inställningar";
"preferences.sections.general.header" = "Allmänt";
"preferences.cells.launches_on_login.caption" = "Öppna vid inloggning";
"preferences.cells.launches_on_login.footer" = "Markera för att starta appen automatiskt efter omstart eller vid inloggning.";
"preferences.cells.confirm_quit.caption" = "Bekräfta lämna";
"preferences.cells.confirm_quit.footer" = "Markera för att visa en uppmaning att bekräfta att man vill lämna appen.";
"debug_log.buttons.copy" = "Kopiera";
"trusted.columns.trust.title" = "Betrodda";
"trusted.ethernet.title" = "Lita på kabelanslutna uppkopplingar";
"trusted.ethernet.description" = "Markera för att lita på alla kabelanslutna uppkopplingar.";
"menu.show.title" = "Visa";
"menu.switch_profile.title" = "Aktiv profil";
"menu.active_profile.title.none" = "Ingen aktiv profil";
"menu.active_profile.items.customize.title" = "Anpassa";
"menu.active_profile.messages.missing_credentials" = "Inget konto har konfigurerats";
"menu.organizer.title" = "Organisatör";
"menu.preferences.title" = "Inställningar";
"menu.support.title" = "Support";
"menu.quit.title" = "Lämna %@";
"menu.quit.messages.confirm" = "Om ett VPN är aktiverat kommer detta fortfarande att köra i bakgrunden. Vill du lämna?";

View File

@ -1,7 +1,6 @@
strings:
inputs:
- ../../Core/Resources/en.lproj/Core.strings
- en.lproj/App.strings
outputs:
- templateName: structured-swift4
output: Global/SwiftGen+Strings.swift

View File

@ -1,77 +0,0 @@
//
// App.strings
// Passepartout
//
// Created by Davide De Rosa on 6/21/19.
// Copyright (c) 2021 Davide De Rosa. All rights reserved.
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
"vpn.unused" = "关";
"organizer.title" = "%@";
"organizer.menus.provider" = "提供商";
"organizer.menus.provider.unavailable" = "没有提供商了";
"organizer.menus.host" = "主机";
"organizer.alerts.remove_profile.title" = "删除配置";
"organizer.alerts.remove_profile.message" = "确定要删除配置%@吗?";
"organizer.alerts.open_host_file.title" = "选择.ovpn文件";
"service.cells.vpn.turn_on.caption" = "启用VPN";
"service.cells.vpn.turn_off.caption" = "禁用VPN";
"service.cells.category.caption" = "类别";
"service.cells.addresses.caption" = "地址";
"service.cells.only_shows_favorites.caption" = "仅显示收藏的地点";
"endpoint.cells.address" = "地址";
"endpoint.cells.protocol" = "协议";
"configuration.title" = "配置";
"configuration.alerts.commit.message" = "除非手动重新连接,否则新参数将无效。受信任的网络中的更改将立即生效。";
"configuration.alerts.commit.buttons.reconnect" = "立即重新连接";
"configuration.alerts.commit.buttons.skip" = "跳过";
"network_settings.dns.cells.addresses.title" = "服务器";
"network_settings.dns.cells.domains.title" = "域";
"network_settings.proxy.cells.bypass_domains.title" = "旁路域";
"preferences.title" = "偏好设置";
"preferences.sections.general.header" = "一般";
"preferences.cells.launches_on_login.caption" = "登录时启动";
"preferences.cells.launches_on_login.footer" = "选中以在启动或登录时自动启动应用。";
"preferences.cells.confirm_quit.caption" = "确认退出";
"preferences.cells.confirm_quit.footer" = "选中以显示退出确认提醒。";
"debug_log.buttons.copy" = "复制";
"trusted.columns.trust.title" = "信任";
"trusted.ethernet.title" = "信任有线连接";
"trusted.ethernet.description" = "选中以信任所有有线连接。";
"menu.show.title" = "显示";
"menu.switch_profile.title" = "有效配置";
"menu.active_profile.title.none" = "无有效配置";
"menu.active_profile.items.customize.title" = "自定义......";
"menu.active_profile.messages.missing_credentials" = "未配置账户";
"menu.organizer.title" = "分类页面";
"menu.preferences.title" = "偏好设置";
"menu.support.title" = "支持";
"menu.quit.title" = "退出%@";
"menu.quit.messages.confirm" = "VPN如果启用仍将在后台运行。您要退出吗";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Trenne";
"vpn.inactive" = "Inaktiv";
"vpn.disabled" = "Deaktiviert";
"vpn.unused" = "Aus";
"vpn.errors.timeout" = "Timeout";
"vpn.errors.dns" = "DNS fehlgeschlagen";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Anbieter";
"organizer.menus.provider.unavailable" = "Keine Anbieter übrig";
"organizer.menus.host" = "Host";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Come watch me make Passepartout live on Twitch, join the chat to interact and contribute!";
"organizer.sections.providers.header" = "Anbieter";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Übersetzung anbieten";
"organizer.cells.about.caption" = "Über %@";
"organizer.cells.uninstall.caption" = "VPN-Konfiguration entfernen";
"organizer.cells.add_provider.caption" = "Neuen Anbieter hinzufügen";
"organizer.cells.add_host.caption" = "Aus Dateien hinzufügen";
"organizer.cells.import_host.caption" = "Vom Import hinzufügen";
"organizer.alerts.exhausted_providers.message" = "Du hast Profile für alle verfügbaren Anbieter erstellt.";
"organizer.alerts.add_host.message" = "Öffne eine URL zu einer .ovpn-Konfigurationsdatei aus Safari, Mail oder anderen App um ein Host-Profil einzurichten.\n\nDu kannst auch eine .ovpn-Datei mit iTunes Dateifreigabe importieren.";
"organizer.alerts.cannot_donate.message" = "Auf diesem Gerät ist keine Bezahlmethode konfiguriert.";
"organizer.alerts.delete_vpn_profile.message" = "Möchtest du wirklich die VPN-Konfiguration aus deinen Geräte-Einstellungen löschen? Dies behebt möglicherweise manche kaputten VPN-Zustände und beeinflusst nicht deine Anbieter und Hosts-Profile.";
"organizer.alerts.remove_profile.title" = "Profil entfernen";
"organizer.alerts.remove_profile.message" = "Bist du sicher, dass du das Profil %@ löschen möchtest?";
"organizer.alerts.open_host_file.title" = "Wähle eine .ovpn-Datei.";
"wizards.provider.cells.update_list.caption" = "Aktualisiere Liste";
"wizards.provider.alerts.unavailable.message" = "Die Provider-Infrastruktur konnte nicht heruntergeladen werden. Bitte versuchen Sie es später erneut.";
"wizards.host.sections.existing.header" = "Bestehende Profile";
"wizards.host.cells.title_input.caption" = "Titel";
"wizards.host.alerts.existing.message" = "Ein Host-Profil mit identischem Titel existiert bereits. Ersetzen?";
"service.welcome.message" = "Willkommen bei Passepartout!\n\nBenutze den Organizer um ein neues Profil hinzuzufügen.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "Die Verbindung wird immer aufgebaut wenn notwendig.";
"service.sections.status.header" = "Verbindung";
"service.sections.configuration.header" = "Konfiguration";
"service.sections.provider_infrastructure.footer" = "Zuletzt aktualisiert am %@.";
"service.sections.vpn_survives_sleep.footer" = "Deaktivieren um die Batterielaufzeit zu verbessern, allerdings verzögert sich der Verbindungsaufbau beim Aufwachen.";
"service.sections.vpn_resolves_hostname.footer" = "Bevorzugt in den meisten Netzwerken und benötigt in manchen IPv6 Netzwerken. Deaktivieren wo DNS geblockt ist oder um die Aushandlung zu beschleunigen bei langsam antwortenden DNS.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnose";
"service.sections.diagnostics.footer" = "Zensier-Status wird aktiv nach erneutem Verbinden. Netzwerk-Daten sind Hostnamen, IP-Adressen, Routingtabellen, SSID. Zugangsdaten und Private Keys werden nie gelogged.";
"service.cells.use_profile.caption" = "Dieses Profil verwenden";
"service.cells.vpn_service.caption" = "Aktiviert";
"service.cells.vpn.turn_on.caption" = "Aktiviere VPN";
"service.cells.vpn.turn_off.caption" = "Deaktiviere VPN";
"service.cells.connection_status.caption" = "Status";
"service.cells.host.parameters.caption" = "Parameter";
"service.cells.provider.pool.caption" = "Ort";
"service.cells.provider.preset.caption" = "Voreinstellung";
"service.cells.provider.refresh.caption" = "Infrastruktur neu laden";
"service.cells.category.caption" = "Kategorie";
"service.cells.addresses.caption" = "Adressen";
"service.cells.only_shows_favorites.caption" = "Nur favorisierte Standorte anzeigen";
"service.cells.vpn_survives_sleep.caption" = "Verbindung aktiv halten trotz Schlafmodus";
"service.cells.vpn_resolves_hostname.caption" = "Server Hostname auflösen";
"service.cells.trusted_add_wifi.caption" = "WLAN hinzufügen";
"service.cells.trusted_mobile.caption" = "Mobilfunknetz";
"service.cells.trusted_policy.caption" = "Vertrauen deaktiviert VPN";
"service.cells.test_connectivity.caption" = "Verbindung testen";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ benötigt den Download von zusätzlichen Konfigurationsdateien.\n\nBestätige um mit dem Download zu beginnen.";
"service.alerts.download.failed" = "Herunterladen der Konfigurationsdateien fehlgeschlagen. %@";
"service.alerts.download.hud.extracting" = "Extrahiere Dateien, bitte warten...";
"service.alerts.location.message.denied" = "Sie müssen den Standortzugriff zulassen, um diesem Wi-Fi-Netzwerk vertrauen zu können. Gehen Sie zu den iOS-Einstellungen und überprüfen Sie Ihre Standortberechtigungen für Passepartout.";
"service.alerts.location.button.settings" = "Einstellungen";
"provider.pool.sections.empty_favorites.footer" = "Wische nach Links um einen Standort zu den Favoriten hinzuzufügen oder zu entfernen.";
"provider.pool.actions.favorite" = "Favorit hinzuzufügen";
"provider.pool.actions.unfavorite" = "Favorit entfernen";
"provider.preset.cells.tech_details.caption" = "Technische Details";
"account.title" = "Account";
"account.sections.credentials.header" = "Zugangsdaten";
"account.sections.guidance.footer.infrastructure.default.web" = "Benutze deine %@ Web-Zugangsdaten.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Verwenden Sie Ihre %@ service-Anmeldeinformationen, die von den Website-Anmeldeinformationen abweichen können.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Benutze deine %@ Web-Zugangsdaten. Dein Benutzername ist üblicherweise numerischt (ohne Zwischenraum).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Registrieren bei %@";
"endpoint.title" = "Endpoint";
"endpoint.sections.location_addresses.header" = "Adressen";
"endpoint.sections.location_protocols.header" = "Protokolle";
"endpoint.cells.address" = "Adresse";
"endpoint.cells.protocol" = "Protokoll";
"endpoint.cells.any_address.caption" = "Automatisch";
"endpoint.cells.any_protocol.caption" = "Automatisch";
"network_settings.title" = "Netzwerk-Einstellungen";
"network_settings.cells.add_dns_server.caption" = "Adresse hinzufügen";
"network_settings.cells.add_dns_domain.caption" = "Domäne hinzufügen";
"network_settings.cells.proxy_bypass.caption" = "Domäne umgehen";
"network_settings.cells.add_proxy_bypass.caption" = "Zu umgehende Domäne hinzufügen";
"configuration.title" = "Konfiguration";
"configuration.sections.communication.header" = "Kommunikation";
"configuration.sections.reset.footer" = "Wenn du nach einer Änderung der Kommunikations-Parameter dich nicht mehr verbinden kannst, hier tippen um zur originalen Konfiguration zurückzukehren.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "erneute Aushandlung";
"configuration.cells.renegotiation_seconds.value.after" = "nach %@";
"configuration.cells.random_endpoint.caption" = "Endpunkt zufällig wählen";
"configuration.alerts.commit.message" = "Neue Parameter werden erst nach einer manuellen Wiederherstellung der Verbindung wirksam. Änderungen in vertrauenswürdigen Netzwerken werden sofort wirksam.";
"configuration.alerts.commit.buttons.reconnect" = "Jetzt erneut verbinden";
"configuration.alerts.commit.buttons.skip" = "Überspringen";
"trusted.columns.trust.title" = "Vertrauen";
"trusted.ethernet.title" = "Kabelverbindungen vertrauen";
"trusted.ethernet.description" = "Hier ein Häkchen setzen, um jeder Kabelverbindung zu vertrauen.";
"preferences.title" = "Einstellungen";
"preferences.sections.general.header" = "Allgemein";
"preferences.cells.launches_on_login.caption" = "Bei Anmeldung starten";
"preferences.cells.launches_on_login.footer" = "Hier ein Häkchen setzen, um die App beim Systemstart oder der Anmeldung automatisch zu starten.";
"preferences.cells.confirm_quit.caption" = "Beenden bestätigen";
"preferences.cells.confirm_quit.footer" = "Hier ein Häkchen setzen, um einen Hinweis zur Bestätigung des Beendens anzuzeigen.";
"network_settings.gateway.title" = "Standard-Gateway";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Server";
"network_settings.dns.cells.domain.caption" = "Domäne";
"network_settings.dns.cells.domains.title" = "Domänen";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Domänen umgehen";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Zurück";
"debug_log.buttons.next" = "Weiter";
"debug_log.buttons.copy" = "Kopieren";
"debug_log.alerts.empty_log.message" = "Das Debug-Log ist leer.";
"shortcuts.add.title" = "Füge Kurzbefehl hinzu";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "WLAN";
"shortcuts.add.sections.cellular.header" = "Mobilfunknetz";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Misstraue Mobilfunknetz";
"shortcuts.add.alerts.no_profiles.message" = "Es gibt kein Profil mit dem eine Verbindung hergestellt werden kann.";
"shortcuts.edit.title" = "Kurzbefehle bearbeiten";
"shortcuts.edit.sections.all.header" = "Existierende Kurzbefehle";
"shortcuts.edit.cells.add_shortcut.caption" = "Kurzbefehl hinzufügen";
"purchase.title" = "Kaufen";
"purchase.sections.products.footer" = "Jedes Produkt ist ein einmaliger Kauf. Der Kauf eines Providers beinhaltet kein VPN-Abonnement.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Übersetzungen";
"label.license.error" = "Konnte vollständigen Lizenz-Inhalt nicht herunterladen.";
// iOS only
"imported_hosts.title" = "Importierte Hosts";
// macOS only
"menu.show.title" = "Anzeigen";
"menu.switch_profile.title" = "Aktives Profil";
"menu.active_profile.title.none" = "Keine aktiven Profile";
"menu.active_profile.items.customize.title" = "Anpassen...";
"menu.active_profile.messages.missing_credentials" = "Es wurde keine Konto konfiguriert";
"menu.organizer.title" = "Organizer";
"menu.preferences.title" = "Einstellungen";
"menu.support.title" = "Support";
"menu.quit.title" = "%@ beenden";
"menu.quit.messages.confirm" = "Wenn das VPN aktiviert wurde, läuft es weiter im Hintergrund. Möchtest du beenden?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Αποσυνδέετε";
"vpn.inactive" = "Μη ενεργό";
"vpn.disabled" = "Απενεργοποιημένο";
"vpn.unused" = "Ανενεργό";
"vpn.errors.timeout" = "Τέλος χρονικού Ορίου";
"vpn.errors.dns" = "Το DNS απέτυχε";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Πάροχος";
"organizer.menus.provider.unavailable" = "Δεν απομένουν πάροχοι";
"organizer.menus.host" = "Εξυπηρετητής";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Ελάτε να με παρακολουθήσετε ζωντανά το Passepartout στο Twitch, εγγραφείτε στη συνομιλία για να αλληλεπιδράσετε και να συνεισφέρετε!";
"organizer.sections.providers.header" = "Πάροχοι";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Βοηθήστε στη μετάφραση";
"organizer.cells.about.caption" = "Σχετικά με %@";
"organizer.cells.uninstall.caption" = "Αφαίρεση ρύθμισης VPN";
"organizer.cells.add_provider.caption" = "Προσθήκη νέου παρόχου";
"organizer.cells.add_host.caption" = "Προσθήκη από αρχεία";
"organizer.cells.import_host.caption" = "Προσθήκη από εισαγωγή";
"organizer.alerts.exhausted_providers.message" = "Έχετε δημιουργήσει προφίλ για οποιονδήποτε διαθέσιμο πάροχο.";
"organizer.alerts.add_host.message" = "Εισάγετε μια διεύθυνση από ένα αρχείο .ovpn στο Safari, το Mail ή άλλη εφαρμογή για να ρυθμίσετε ένα προφίλ διακομιστή.\n\nΜπορείτε επίσης να εισάγετε ένα .ovpn αρχείο από το iTunes File Sharing.";
"organizer.alerts.cannot_donate.message" = "Δεν έχει ρυθμιστεί καμία μέθοδος πληρωμής σε αυτήν τη συσκευή.";
"organizer.alerts.delete_vpn_profile.message" = "Θέλετε πραγματικά να διαγράψετε τη διαμόρφωση VPN από τις ρυθμίσεις της συσκευής σας; Αυτό μπορεί να διορθώσει κάποιες καταστραμμένες καταστάσεις VPN και δεν θα επηρεάσει τα προφίλ του παροχέα και του διακομιστή σας.";
"organizer.alerts.remove_profile.title" = "Κατάργηση προφίλ";
"organizer.alerts.remove_profile.message" = "Είστε βέβαιοι ότι θέλετε να διαγράψετε το προφίλ %@;";
"organizer.alerts.open_host_file.title" = "Επιλέξτε ένα αρχείο .ovpn";
"wizards.provider.cells.update_list.caption" = "Αναβάθμιση Λίστας";
"wizards.provider.alerts.unavailable.message" = "Δεν ήταν δυνατή η λήψη της υποδομής του παρόχου, δοκιμάστε ξανά αργότερα.";
"wizards.host.sections.existing.header" = "Υπάρχον Προφίλ";
"wizards.host.cells.title_input.caption" = "Τίτλος";
"wizards.host.alerts.existing.message" = "Ένα προφίλ διακομιστή με τον ίδιο τίτλο υπάρχει ήδη. Αντικατέστησέ το;";
"service.welcome.message" = "Καλώς Ήλθατε στο Passepartout!\n\nΧρησιμοποιήστε τον διοργανωτή για να προσθέσετε ένα νέο προφίλ.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "Η σύνδεση θα πραγματοποιηθεί όποτε είναι απαραίτητο.";
"service.sections.status.header" = "Σύνδεση";
"service.sections.configuration.header" = "Ρύθμιση";
"service.sections.provider_infrastructure.footer" = "Τελευταία ενημέρωση στις %@.";
"service.sections.vpn_survives_sleep.footer" = "Απενεργοποιήστε για να βελτιώσετε τη χρήση της μπαταρίας, εις βάρος των περιστασιακών επιβραδύνσεων που οφείλονται σε επανασύνδεση αφύπνισης.";
"service.sections.vpn_resolves_hostname.footer" = "Προτιμάται στα περισσότερα δίκτυα και απαιτείται σε ορισμένα δίκτυα IPv6. Απενεργοποιήστε το εκεί που μπλοκάρεται το DNS ή για να επιταχύνετε τη επικοινωνία όταν το DNS είναι αργό για να ανταποκριθεί.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Διαγνωστικά";
"service.sections.diagnostics.footer" = "Η κατάσταση κάλυψης θα είναι αποτελεσματική μετά την επανασύνδεση. Τα δεδομένα δικτύου είναι του διακομιστή, διευθύνσεις IP, δρομολόγηση και SSID. Τα διαπιστευτήρια και τα ιδιωτικά κλειδιά δεν καταγράφονται ανεξάρτητα.";
"service.cells.use_profile.caption" = "Χρησιμοποιήστε αυτό το προφίλ";
"service.cells.vpn_service.caption" = "Ενεργοποιήθηκε";
"service.cells.vpn.turn_on.caption" = "Ενεργοποίηση VPN";
"service.cells.vpn.turn_off.caption" = "Απενεργοποίηση VPN";
"service.cells.connection_status.caption" = "Κατάσταση";
"service.cells.host.parameters.caption" = "Παράμετροι";
"service.cells.provider.pool.caption" = "Τοποθεσία";
"service.cells.provider.preset.caption" = "Προεπιλογή";
"service.cells.provider.refresh.caption" = "Ανανέωση της υποδομής";
"service.cells.category.caption" = "Κατηγορία";
"service.cells.addresses.caption" = "Διευθύνσεις";
"service.cells.only_shows_favorites.caption" = "Προβολή αγαπημένων τοποθεσιών μόνο";
"service.cells.vpn_survives_sleep.caption" = "Κρατήστε ζωντανό στον ύπνο";
"service.cells.vpn_resolves_hostname.caption" = "Επίλυση του ονόματος σέρβερ διακομιστή";
"service.cells.trusted_add_wifi.caption" = "Προσθέστε Wi-Fi";
"service.cells.trusted_mobile.caption" = "Δίκτυο Κινητής";
"service.cells.trusted_policy.caption" = "Τα αξιόπιστα δίκτυα απενεργοποιούν το VPN";
"service.cells.test_connectivity.caption" = "Δοκιμή συνδεσιμότητας";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ απαιτεί τη λήψη πρόσθετων αρχείων ρυθμίσεων.\n\nΕπιβεβαιώστε για να ξεκινήσετε τη λήψη.";
"service.alerts.download.failed" = "Αποτυχία λήψης αρχείων ρυθμίσεων. %@";
"service.alerts.download.hud.extracting" = "Εξάγοντας τα αρχεία, παρακαλώ να είστε υπομονετικοί...";
"service.alerts.location.message.denied" = "Πρέπει να επιτρέψετε τη πρόσβαση τοποθεσίας για να εμπιστευτείτε το Wi-Fi δίκτυο. Μεταβείτε στις ρυθμίσεις του iOS και επιθεωρείστε τις ρυθμίσεις για το Passepartout.";
"service.alerts.location.button.settings" = "Ρυθμίσεις";
"provider.pool.sections.empty_favorites.footer" = "Σείρετε αριστερά για να προσθέσετε ή να αφαιρέσεται από τα αγαπημένα.";
"provider.pool.actions.favorite" = "Αγαπημένο";
"provider.pool.actions.unfavorite" = "Δεν προτιμάται";
"provider.preset.cells.tech_details.caption" = "Τεχνικές Λεπτομέρειες";
"account.title" = "Λογαριασμός";
"account.sections.credentials.header" = "Διαπιστευτήρια";
"account.sections.guidance.footer.infrastructure.default.web" = "Χρησιμοποιήστε τα διαπιστευτήρια ιστοτόπου %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Χρησιμοποιήστε τα διαπιστευτήρια της υπηρεσίας %@, τα οποία ενδέχεται να διαφέρουν από τα διαπιστευτήρια του ιστότοπου.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Χρησιμοποιήστε τα διαπιστευτήρια ιστοτόπου %@. Το όνομα χρήστη είναι συνήθως αριθμητικό (χωρίς διαστήματα).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Εγγραφείτε με %@";
"endpoint.title" = "Τελικό σημείο";
"endpoint.sections.location_addresses.header" = "Διεθύνσεις";
"endpoint.sections.location_protocols.header" = "Πρωτόκολλα";
"endpoint.cells.address" = "Διεύθυνση";
"endpoint.cells.protocol" = "Πρωτόκολλο";
"endpoint.cells.any_address.caption" = "Αυτόματο";
"endpoint.cells.any_protocol.caption" = "Αυτόματο";
"network_settings.title" = "Ρυθμίσεις Δικτύου";
"network_settings.cells.add_dns_server.caption" = "Προσθήκη Διεύθυνσης";
"network_settings.cells.add_dns_domain.caption" = "Προσθήκη τομέα αναζήτησης";
"network_settings.cells.proxy_bypass.caption" = "Παράκαμψη Τομέα";
"network_settings.cells.add_proxy_bypass.caption" = "Προσθήκη τομέα παράκαμψης";
"configuration.title" = "Ρύθμιση";
"configuration.sections.communication.header" = "Επικοινωνία";
"configuration.sections.reset.footer" = "Αν καταλήξατε σε κατεστραμένη συνδεσιμότητα μετά την αλλαγή των παραμέτρων επικοινωνίας, πατήστε για να επανέλθετε στην αρχική διαμόρφωση.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Επαναδιαπραγμάτευση";
"configuration.cells.renegotiation_seconds.value.after" = "μετά από %@";
"configuration.cells.random_endpoint.caption" = "Τυχαίο τελικό σημείο";
"configuration.alerts.commit.message" = "Οι νέες παράμετροι δεν θα είναι αποτελεσματικές έως ότου επανασυνδεθείτε χειροκίνητα. Οι αλλαγές στα αξιόπιστα δίκτυα θα εφαρμοστούν αμέσως.";
"configuration.alerts.commit.buttons.reconnect" = "Επανασυνδεθείτε τώρα";
"configuration.alerts.commit.buttons.skip" = "Παράλειψη";
"trusted.columns.trust.title" = "Εμπιστευθείτε";
"trusted.ethernet.title" = "Εμπιστευθείτε τις ενσύρματες συνδέσεις";
"trusted.ethernet.description" = "Επιλέξτε για να εμπιστευθείτε οποιαδήποτε ενσύρματη σύνδεση καλωδίου.";
"preferences.title" = "Προτιμήσεις";
"preferences.sections.general.header" = "Γενικός";
"preferences.cells.launches_on_login.caption" = "Εκκίνηση κατά τη σύνδεση";
"preferences.cells.launches_on_login.footer" = "Επιλέξτε για αυτόματη εκκίνηση της εφαρμογής κατά την εκκίνηση ή τη σύνδεση.";
"preferences.cells.confirm_quit.caption" = "Επιβεβαίωση διακοπής";
"preferences.cells.confirm_quit.footer" = "Επιλέξτε για παρουσίαση ειδοποίησης ότι επιβεβαιώνεται η διακοπή.";
"network_settings.gateway.title" = "Προεπιλεγμένη πύλη";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Διακομιστές";
"network_settings.dns.cells.domain.caption" = "Domain";
"network_settings.dns.cells.domains.title" = "Τομείς";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Παράκαμψη τομέων";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Προηγούμενο";
"debug_log.buttons.next" = "Επόμενο";
"debug_log.buttons.copy" = "Αντιγραφή";
"debug_log.alerts.empty_log.message" = "Το αρχείο εντοπισμού σφαλμάτων είναι κενό.";
"shortcuts.add.title" = "Προσθήκη Συντόμευσης";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Δίκτυο Κινητής";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Μην εμπιστευθείτε το δίκτυο κινητής τηλεφωνίας";
"shortcuts.add.alerts.no_profiles.message" = "Δεν υπάρχει προφίλ για σύνδεση.";
"shortcuts.edit.title" = "Διαχείριση συντομεύσεων";
"shortcuts.edit.sections.all.header" = "Υπάρχουσες συντομεύσεις";
"shortcuts.edit.cells.add_shortcut.caption" = "Προσθήκη Συντόμευσης";
"purchase.title" = "Αγορά";
"purchase.sections.products.footer" = "Κάθε προϊόν είναι μια αγορά. Οι αγορές παρόχων δεν περιλαμβάνουν τη συνδρομή VPN.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Μεταφράσεις";
"label.license.error" = "Δεν είναι δυνατή η λήψη πλήρους περιεχομένου άδειας χρήσης.";
// iOS only
"imported_hosts.title" = "Εισαγόμενοι διακομιστές";
// macOS only
"menu.show.title" = "Προβολή";
"menu.switch_profile.title" = "Ενεργό προφίλ";
"menu.active_profile.title.none" = "Δεν υπάρχει ενεργό προφίλ";
"menu.active_profile.items.customize.title" = "Προσαρμογή...";
"menu.active_profile.messages.missing_credentials" = "Δεν έχει διαμορφωθεί λογαριασμός";
"menu.organizer.title" = "Διοργανωτής";
"menu.preferences.title" = "Προτιμήσεις";
"menu.support.title" = "Υποστήριξη";
"menu.quit.title" = "Διακοπή %@";
"menu.quit.messages.confirm" = "Το VPN, αν είναι ενεργοποιημένο, θα εξακολουθεί να εκτελείται στο παρασκήνιο. Θέλετε να το διακόψετε;";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Disconnecting";
"vpn.inactive" = "Inactive";
"vpn.disabled" = "Disabled";
"vpn.unused" = "Off";
"vpn.errors.timeout" = "Timeout";
"vpn.errors.dns" = "DNS failed";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Provider";
"organizer.menus.provider.unavailable" = "No providers left";
"organizer.menus.host" = "Host";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Come watch me make Passepartout live on Twitch, join the chat to interact and contribute!";
"organizer.sections.providers.header" = "Providers";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Offer to translate";
"organizer.cells.about.caption" = "About %@";
"organizer.cells.uninstall.caption" = "Remove VPN configuration";
"organizer.cells.add_provider.caption" = "Add new provider";
"organizer.cells.add_host.caption" = "Add from Files";
"organizer.cells.import_host.caption" = "Add from imported";
"organizer.alerts.exhausted_providers.message" = "You have created profiles for any available provider.";
"organizer.alerts.add_host.message" = "Open an URL to an .ovpn configuration file from Safari, Mail or another app to set up a host profile.\n\nYou can also import an .ovpn with iTunes File Sharing.";
"organizer.alerts.cannot_donate.message" = "There is no payment method configured on this device.";
"organizer.alerts.delete_vpn_profile.message" = "Do you really want to erase the VPN configuration from your device settings? This may fix some broken VPN states and will not affect your provider and host profiles.";
"organizer.alerts.remove_profile.title" = "Remove profile";
"organizer.alerts.remove_profile.message" = "Are you sure you want to delete profile %@?";
"organizer.alerts.open_host_file.title" = "Select an .ovpn file";
"wizards.provider.cells.update_list.caption" = "Update list";
"wizards.provider.alerts.unavailable.message" = "Could not download provider infrastructure, please retry later.";
"wizards.host.sections.existing.header" = "Existing profiles";
"wizards.host.cells.title_input.caption" = "Title";
"wizards.host.alerts.existing.message" = "A host profile with the same title already exists. Replace it?";
"service.welcome.message" = "Welcome to Passepartout!\n\nUse the organizer to add a new profile.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "The connection will be established whenever necessary.";
"service.sections.status.header" = "Connection";
"service.sections.configuration.header" = "Configuration";
"service.sections.provider_infrastructure.footer" = "Last updated on %@.";
"service.sections.vpn_survives_sleep.footer" = "Disable to improve battery usage, at the expense of occasional slowdowns due to wake-up reconnections.";
"service.sections.vpn_resolves_hostname.footer" = "Preferred in most networks and required in some IPv6 networks. Disable where DNS is blocked, or to speed up negotiation when DNS is slow to respond.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnostics";
"service.sections.diagnostics.footer" = "Masking status will be effective after reconnecting. Network data are hostnames, IP addresses, routing, SSID. Credentials and private keys are not logged regardless.";
"service.cells.use_profile.caption" = "Use this profile";
"service.cells.vpn_service.caption" = "Enabled";
"service.cells.vpn.turn_on.caption" = "Enable VPN";
"service.cells.vpn.turn_off.caption" = "Disable VPN";
"service.cells.connection_status.caption" = "Status";
"service.cells.host.parameters.caption" = "Parameters";
"service.cells.provider.pool.caption" = "Location";
"service.cells.provider.preset.caption" = "Preset";
"service.cells.provider.refresh.caption" = "Refresh infrastructure";
"service.cells.category.caption" = "Category";
"service.cells.addresses.caption" = "Addresses";
"service.cells.only_shows_favorites.caption" = "Only show favorite locations";
"service.cells.vpn_survives_sleep.caption" = "Keep alive on sleep";
"service.cells.vpn_resolves_hostname.caption" = "Resolve provider hostname";
"service.cells.trusted_add_wifi.caption" = "Add Wi-Fi";
"service.cells.trusted_mobile.caption" = "Cellular network";
"service.cells.trusted_policy.caption" = "Trust disables VPN";
"service.cells.test_connectivity.caption" = "Test connectivity";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ requires the download of additional configuration files.\n\nConfirm to start the download.";
"service.alerts.download.failed" = "Failed to download configuration files. %@";
"service.alerts.download.hud.extracting" = "Extracting files, please be patient...";
"service.alerts.location.message.denied" = "You must allow location access to trust this Wi-Fi network. Go to iOS settings and review your location permissions for Passepartout.";
"service.alerts.location.button.settings" = "Settings";
"provider.pool.sections.empty_favorites.footer" = "Swipe left on a location to add or remove it from Favorites.";
"provider.pool.actions.favorite" = "Favorite";
"provider.pool.actions.unfavorite" = "Unfavorite";
"provider.preset.cells.tech_details.caption" = "Technical details";
"account.title" = "Account";
"account.sections.credentials.header" = "Credentials";
"account.sections.guidance.footer.infrastructure.default.web" = "Use your %@ website credentials.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Use your %@ service credentials, which may differ from website credentials.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Use your %@ website credentials. Your username is usually numeric (without spaces).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Register with %@";
"endpoint.title" = "Endpoint";
"endpoint.sections.location_addresses.header" = "Addresses";
"endpoint.sections.location_protocols.header" = "Protocols";
"endpoint.cells.address" = "Address";
"endpoint.cells.protocol" = "Protocol";
"endpoint.cells.any_address.caption" = "Automatic";
"endpoint.cells.any_protocol.caption" = "Automatic";
"network_settings.title" = "Network settings";
"network_settings.cells.add_dns_server.caption" = "Add address";
"network_settings.cells.add_dns_domain.caption" = "Add search domain";
"network_settings.cells.proxy_bypass.caption" = "Bypass domain";
"network_settings.cells.add_proxy_bypass.caption" = "Add bypass domain";
"configuration.title" = "Configuration";
"configuration.sections.communication.header" = "Communication";
"configuration.sections.reset.footer" = "If you ended up with broken connectivity after changing the communication parameters, tap to revert to the original configuration.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Renegotiation";
"configuration.cells.renegotiation_seconds.value.after" = "after %@";
"configuration.cells.random_endpoint.caption" = "Randomize endpoint";
"configuration.alerts.commit.message" = "New parameters will not be effective until you reconnect manually. Changes in trusted networks will apply immediately.";
"configuration.alerts.commit.buttons.reconnect" = "Reconnect now";
"configuration.alerts.commit.buttons.skip" = "Skip";
"trusted.columns.trust.title" = "Trust";
"trusted.ethernet.title" = "Trust wired connections";
"trusted.ethernet.description" = "Check to trust any wired cable connection.";
"preferences.title" = "Preferences";
"preferences.sections.general.header" = "General";
"preferences.cells.launches_on_login.caption" = "Launch on login";
"preferences.cells.launches_on_login.footer" = "Check to automatically launch the app on boot or login.";
"preferences.cells.confirm_quit.caption" = "Confirm quit";
"preferences.cells.confirm_quit.footer" = "Check to present a quit confirmation alert.";
"network_settings.gateway.title" = "Default gateway";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Servers";
"network_settings.dns.cells.domain.caption" = "Domain";
"network_settings.dns.cells.domains.title" = "Domains";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Bypass domains";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Previous";
"debug_log.buttons.next" = "Next";
"debug_log.buttons.copy" = "Copy";
"debug_log.alerts.empty_log.message" = "The debug log is empty.";
"shortcuts.add.title" = "Add shortcut";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Cellular";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Untrust cellular network";
"shortcuts.add.alerts.no_profiles.message" = "There is no profile to connect to.";
"shortcuts.edit.title" = "Manage shortcuts";
"shortcuts.edit.sections.all.header" = "Existing shortcuts";
"shortcuts.edit.cells.add_shortcut.caption" = "Add shortcut";
"purchase.title" = "Purchase";
"purchase.sections.products.footer" = "Every product is a one-time purchase. Provider purchases do not include a VPN subscription.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Translations";
"label.license.error" = "Unable to download full license content.";
// iOS only
"imported_hosts.title" = "Imported hosts";
// macOS only
"menu.show.title" = "Show";
"menu.switch_profile.title" = "Active profile";
"menu.active_profile.title.none" = "No active profile";
"menu.active_profile.items.customize.title" = "Customize...";
"menu.active_profile.messages.missing_credentials" = "No account configured";
"menu.organizer.title" = "Organizer";
"menu.preferences.title" = "Preferences";
"menu.support.title" = "Support";
"menu.quit.title" = "Quit %@";
"menu.quit.messages.confirm" = "The VPN, if enabled, will still run in the background. Do you want to quit?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Desconectando";
"vpn.inactive" = "Inactivo";
"vpn.disabled" = "Deshabilitado";
"vpn.unused" = "Desactivada";
"vpn.errors.timeout" = "Timeout";
"vpn.errors.dns" = "DNS fallido";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Proveedor";
"organizer.menus.provider.unavailable" = "No quedan proveedores";
"organizer.menus.host" = "Host";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "¡Ven a ver cómo hago Passepartout en vivo en Twitch, únete al chat para interactuar y contribuir!";
"organizer.sections.providers.header" = "Proveedores";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Ofrecer una traducción";
"organizer.cells.about.caption" = "Sobre %@";
"organizer.cells.uninstall.caption" = "Borrar configuración VPN";
"organizer.cells.add_provider.caption" = "Añadir proveedor";
"organizer.cells.add_host.caption" = "Añadir desde Ficheros";
"organizer.cells.import_host.caption" = "Añadir desde importados";
"organizer.alerts.exhausted_providers.message" = "Has creado perfiles para todos los proveedores disponibles.";
"organizer.alerts.add_host.message" = "Abre el URL de un fichero de configuración .ovpn a través de Safari, Mail u otra aplicación para configurar un host.\n\nTambién puedes importar un .ovpn con iTunes File Sharing.";
"organizer.alerts.cannot_donate.message" = "No hay métodos de pago configurados en este dispositivo.";
"organizer.alerts.delete_vpn_profile.message" = "Realmente quieres eliminar la configuración VPN de tu dispositivo? Ésto puede corregir algunos estados incorrectos del VPN y no afectará tus perfiles.";
"organizer.alerts.remove_profile.title" = "Quitar perfil";
"organizer.alerts.remove_profile.message" = "¿Seguro que deseas eliminar el perfil %@?";
"organizer.alerts.open_host_file.title" = "Selecciona un archivo .ovpn";
"wizards.provider.cells.update_list.caption" = "Actualizar lista";
"wizards.provider.alerts.unavailable.message" = "No fue posible bajar la infraestructura del proveedor, por favor reinténtalo más tarde.";
"wizards.host.sections.existing.header" = "Perfiles existentes";
"wizards.host.cells.title_input.caption" = "Título";
"wizards.host.alerts.existing.message" = "Ya existe un host con el mismo título. Reemplazar?";
"service.welcome.message" = "Bienvenid@ a Passepartout!\n\nUsa el organizador para añadir un nuevo perfil.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "La conexión se establecerá siempre y cuando sea necesario.";
"service.sections.status.header" = "Conexión";
"service.sections.configuration.header" = "Configuración";
"service.sections.provider_infrastructure.footer" = "Última actualización: %@.";
"service.sections.vpn_survives_sleep.footer" = "Deshabilitar para mejorar el uso de la batería, a costa de ralentizaciones ocasionales por las reconexiones al despertar el dispositivo.";
"service.sections.vpn_resolves_hostname.footer" = "Preferido en la mayoría de las redes y necesario en algunas redes IPv6. Deshabilitar donde el DNS esté bloqueado, o para acelerar la negociación cuando el DNS sea lento en responder.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnósticos";
"service.sections.diagnostics.footer" = "El estado de ocultación será efectivo tras reconectar. Los datos de red son hostnames, direcciones IP, routing, SSID. Las credenciales y las claves privadas no son registrados a pesar.";
"service.cells.use_profile.caption" = "Usar este perfil";
"service.cells.vpn_service.caption" = "Habilitado";
"service.cells.vpn.turn_on.caption" = "Habilitar VPN";
"service.cells.vpn.turn_off.caption" = "Deshabilitar VPN";
"service.cells.connection_status.caption" = "Estado";
"service.cells.host.parameters.caption" = "Parámetros";
"service.cells.provider.pool.caption" = "Ubicación";
"service.cells.provider.preset.caption" = "Ajuste";
"service.cells.provider.refresh.caption" = "Refrescar infraestructura";
"service.cells.category.caption" = "Categoría";
"service.cells.addresses.caption" = "Direcciones";
"service.cells.only_shows_favorites.caption" = "Mostrar solo ubicaciones favoritas";
"service.cells.vpn_survives_sleep.caption" = "Mantener en modo inactivo";
"service.cells.vpn_resolves_hostname.caption" = "Resolver hostname del servidor";
"service.cells.trusted_add_wifi.caption" = "Añadir Wi-Fi";
"service.cells.trusted_mobile.caption" = "Red móvil";
"service.cells.trusted_policy.caption" = "Red de confianza deshabilita el VPN";
"service.cells.test_connectivity.caption" = "Testear conectividad";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ requiere la descarga de fichero de configuración adicionales.\n\nConfirmar para empezar la descarga.";
"service.alerts.download.failed" = "Imposible descargar los ficheros de configuración. %@";
"service.alerts.download.hud.extracting" = "Extrayendo ficheros, por favor ten paciencia...";
"service.alerts.location.message.denied" = "Debes dar acceso a tu posición para añadir esta red Wi-Fi a las redes de confianza. Mira los ajustes iOS y revisa los permisos de posición para Passepartout.";
"service.alerts.location.button.settings" = "Ajustes";
"provider.pool.sections.empty_favorites.footer" = "Desliza a la izquierda de una ubicación para agregarla o quitarla de los Favoritos.";
"provider.pool.actions.favorite" = "Favorita";
"provider.pool.actions.unfavorite" = "No favorita";
"provider.preset.cells.tech_details.caption" = "Detalles técnicos";
"account.title" = "Cuenta";
"account.sections.credentials.header" = "Credenciales";
"account.sections.guidance.footer.infrastructure.default.web" = "Usa tus credenciales de la web %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Usa tus credenciales de servicio %@, que pueden diferir de las credenciales de la web.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Usa tus credenciales de la web %@. Normalmente tu usuario es numérico (sin espacios).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Registrarse con %@";
"endpoint.title" = "Destino";
"endpoint.sections.location_addresses.header" = "Direcciones";
"endpoint.sections.location_protocols.header" = "Protocolos";
"endpoint.cells.address" = "Dirección";
"endpoint.cells.protocol" = "Protocolo";
"endpoint.cells.any_address.caption" = "Automática";
"endpoint.cells.any_protocol.caption" = "Automático";
"network_settings.title" = "Ajustes de red";
"network_settings.cells.add_dns_server.caption" = "Añadir dirección";
"network_settings.cells.add_dns_domain.caption" = "Añadir dominio";
"network_settings.cells.proxy_bypass.caption" = "Dominio ignorado";
"network_settings.cells.add_proxy_bypass.caption" = "Añadir dominio ignorado";
"configuration.title" = "Configuración";
"configuration.sections.communication.header" = "Comunicación";
"configuration.sections.reset.footer" = "Si acabaste estropeando tu conectividad tras cambiar los parámetros de comunicación, pulsa para volver a la configuración inicial.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Renegociación";
"configuration.cells.renegotiation_seconds.value.after" = "después de %@";
"configuration.cells.random_endpoint.caption" = "Aleatorizar destino";
"configuration.alerts.commit.message" = "Los nuevos parámetros no serán efectivos hasta que te reconectes manualmente. Los cambios en las redes de confianza se aplicarán de inmediato.";
"configuration.alerts.commit.buttons.reconnect" = "Reconectar ahora";
"configuration.alerts.commit.buttons.skip" = "Omitir";
"trusted.columns.trust.title" = "Confianza";
"trusted.ethernet.title" = "Confiar en conexiones cableadas";
"trusted.ethernet.description" = "Activa esta opción para confiar en cualquier conexión cableada.";
"preferences.title" = "Preferencias";
"preferences.sections.general.header" = "General";
"preferences.cells.launches_on_login.caption" = "Iniciar al iniciar sesión";
"preferences.cells.launches_on_login.footer" = "Activa esta opción para que la aplicación se inicie automáticamente al iniciar o al iniciar sesión.";
"preferences.cells.confirm_quit.caption" = "Confirmar salir";
"preferences.cells.confirm_quit.footer" = "Activa esta opción para que se muestre una alerta de confirmación al salir.";
"network_settings.gateway.title" = "Puerta de enlace";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Servidores";
"network_settings.dns.cells.domain.caption" = "Dominio";
"network_settings.dns.cells.domains.title" = "Dominios";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Dominios ignorados";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Anterior";
"debug_log.buttons.next" = "Siguiente";
"debug_log.buttons.copy" = "Copiar";
"debug_log.alerts.empty_log.message" = "El registro de debug está vacío.";
"shortcuts.add.title" = "Añadir atajo";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Móvil";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Borrar red móvil de confianza";
"shortcuts.add.alerts.no_profiles.message" = "No hay ningún perfil al que conectarse.";
"shortcuts.edit.title" = "Gestionar atajos";
"shortcuts.edit.sections.all.header" = "Atajos existentes";
"shortcuts.edit.cells.add_shortcut.caption" = "Añadir atajo";
"purchase.title" = "Comprar";
"purchase.sections.products.footer" = "Cada producto es una compra única y no recurrente. La compra de un proveedor no incluye una suscripción al servicio.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Traducciones";
"label.license.error" = "Imposible descargar el contenido completo de la licencia.";
// iOS only
"imported_hosts.title" = "Hosts importados";
// macOS only
"menu.show.title" = "Mostrar";
"menu.switch_profile.title" = "Perfil activo";
"menu.active_profile.title.none" = "Ningún perfil activo";
"menu.active_profile.items.customize.title" = "Personalizar...";
"menu.active_profile.messages.missing_credentials" = "Ninguna cuenta configurada";
"menu.organizer.title" = "Organizador";
"menu.preferences.title" = "Preferencias";
"menu.support.title" = "Soporte";
"menu.quit.title" = "Salir de %@";
"menu.quit.messages.confirm" = "Si la VPN está habilitada, seguirá funcionando en segundo plano. ¿Deseas salir?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Déconnection...";
"vpn.inactive" = "Inactif";
"vpn.disabled" = "Désactivé";
"vpn.unused" = "Désactivé";
"vpn.errors.timeout" = "Délais dépassé";
"vpn.errors.dns" = "Échec DNS";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Fournisseur";
"organizer.menus.provider.unavailable" = "Aucun fournisseur restant";
"organizer.menus.host" = "Hôte";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Venez me regarder faire passer Passepartout en direct sur Twitch, rejoignez le chat pour interagir et contribuer!";
"organizer.sections.providers.header" = "Fournisseurs";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Offre de traduction";
"organizer.cells.about.caption" = "À propos %@";
"organizer.cells.uninstall.caption" = "Supprimer la configuration VPN";
"organizer.cells.add_provider.caption" = "Ajouter un nouveau fournisseur";
"organizer.cells.add_host.caption" = "Ajouter de Fichiers";
"organizer.cells.import_host.caption" = "Ajouter depuis importé";
"organizer.alerts.exhausted_providers.message" = "Vous avez créé un profile pour un fournisseur existant.";
"organizer.alerts.add_host.message" = "Ouvrir un URL vers un fichier de configuration .ovpn depuis Safari, Courriels ou un autre app pour installer un profile hôte.\n\nVous pouvez importer une configuration .ovpn avec le transfert de fichiers iTunes.";
"organizer.alerts.cannot_donate.message" = "Il n'y a aucune méthode de paiement configuré sur cet appareil.";
"organizer.alerts.delete_vpn_profile.message" = "Voulez-vous vraiment effacer la configuration VPN de vos paramètres? Ceci peux fixer certains VPN en arrêt et n'affectera pas vos profiles de fournisseurs et hôtes.";
"organizer.alerts.remove_profile.title" = "Supprimer le profil";
"organizer.alerts.remove_profile.message" = "Voulez-vous vraiment supprimer le profil %@ ?";
"organizer.alerts.open_host_file.title" = "Sélectionnez un fichier .ovpn";
"wizards.provider.cells.update_list.caption" = "Actualiser la liste";
"wizards.provider.alerts.unavailable.message" = "Impossible de télécharger l'infrastructure du fournisseur, veuillez réessayer plus tard.";
"wizards.host.sections.existing.header" = "Profiles existants";
"wizards.host.cells.title_input.caption" = "Titre";
"wizards.host.alerts.existing.message" = "Un profile hôte avec ce même nom existe déjà. Le remplacer?";
"service.welcome.message" = "Bienvenue à Passepartout!\n\nUtilisez l'organiseur pour ajouter un nouveau profile.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "La connection sera établie lorsque nécessaire.";
"service.sections.status.header" = "Connection";
"service.sections.configuration.header" = "Configuration";
"service.sections.provider_infrastructure.footer" = "Mis à jour : %@.";
"service.sections.vpn_survives_sleep.footer" = "Désactiver pour augmenter l'autonomie de la batterie, au dépends de la rapidité au réveil pour la reconnection.";
"service.sections.vpn_resolves_hostname.footer" = "Préféré dans la plus part des réseaux et requis dans certains réseaux IPv6. Désactiver lorsque le DNS est bloqué ou pour augmenter la rapidité des négociations lorsque le DNS est lent à répondre.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnostiques";
"service.sections.diagnostics.footer" = "Camouflage du status sera effectif après la reconnection. Les données réseaux sont les noms d'hôtes, adresses IP, routage, SSID. Les identifiants et clés privés ne sont pas enregistrés.";
"service.cells.use_profile.caption" = "Utiliser ce profile";
"service.cells.vpn_service.caption" = "Activer";
"service.cells.vpn.turn_on.caption" = "Activer VPN";
"service.cells.vpn.turn_off.caption" = "Désactiver VPN";
"service.cells.connection_status.caption" = "Statut";
"service.cells.host.parameters.caption" = "Paramètres";
"service.cells.provider.pool.caption" = "Locallisation";
"service.cells.provider.preset.caption" = "Préréglage";
"service.cells.provider.refresh.caption" = "Rafraîchir l'infrastructure";
"service.cells.category.caption" = "Catégorie";
"service.cells.addresses.caption" = "Adresses";
"service.cells.only_shows_favorites.caption" = "Afficher uniquement les emplacements favoris";
"service.cells.vpn_survives_sleep.caption" = "Garder actif lors de la veille";
"service.cells.vpn_resolves_hostname.caption" = "Résoudre le nom d'hôte du serveur";
"service.cells.trusted_add_wifi.caption" = "Ajouter Wi-Fi";
"service.cells.trusted_mobile.caption" = "Réseau cellulaire";
"service.cells.trusted_policy.caption" = "La confiance désactive le VPN";
"service.cells.test_connectivity.caption" = "Tester la connection";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ requiert le téléchargement de fichiers de configuration supplémentaires.\n\nConfirmer le début du téléchargement.";
"service.alerts.download.failed" = "Échec de téléchargement des fichiers de configuration. %@";
"service.alerts.download.hud.extracting" = "Extraction des fichiers, veuillez patienter...";
"service.alerts.location.message.denied" = "Vous devez autoriser la localisation pour faire confiance à ce réseau WiFi. Acceptez les permissions de localisation pour Passepartout dans les réglages.";
"service.alerts.location.button.settings" = "Réglages";
"provider.pool.sections.empty_favorites.footer" = "Glissez vers la gauche d'un item pour l'ajouter ou le retirer des Favoris.";
"provider.pool.actions.favorite" = "Favoris";
"provider.pool.actions.unfavorite" = "Retirer des Favoris";
"provider.preset.cells.tech_details.caption" = "Détails techniques";
"account.title" = "Compte";
"account.sections.credentials.header" = "Indetifiants";
"account.sections.guidance.footer.infrastructure.default.web" = "Utilisez votre identifiants web de %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Utilisez vos informations d'identification de service %@, qui peuvent différer des informations d'identification du web.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Utilisez votre identifiants web de %@. Votre nom d'utilisateur est normalement numérique (sans espaces).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "S'inscrire avec %@";
"endpoint.title" = "Extrémité";
"endpoint.sections.location_addresses.header" = "Adresses";
"endpoint.sections.location_protocols.header" = "Protocols";
"endpoint.cells.address" = "Adresse";
"endpoint.cells.protocol" = "Protocole";
"endpoint.cells.any_address.caption" = "Automatique";
"endpoint.cells.any_protocol.caption" = "Automatique";
"network_settings.title" = "Paramètres réseaux";
"network_settings.cells.add_dns_server.caption" = "Ajouter une adresse";
"network_settings.cells.add_dns_domain.caption" = "Ajouter un domaine";
"network_settings.cells.proxy_bypass.caption" = "Outrepasser le domaine";
"network_settings.cells.add_proxy_bypass.caption" = "Ajouter outrepasser le domaine";
"configuration.title" = "Configuration";
"configuration.sections.communication.header" = "Communications";
"configuration.sections.reset.footer" = "Si vous obtenez une connection erronnée après le changement des parameters de communication, tapotez pour revenir à la configuration initiale.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Renégociation";
"configuration.cells.renegotiation_seconds.value.after" = "aprè %@";
"configuration.cells.random_endpoint.caption" = "Extrémité aléatoire";
"configuration.alerts.commit.message" = "Vous devez vous reconnecter manuellement pour confirmer les nouveaux paramètres. Les modifications apportées sur les réseaux de confiance seront immédiatement mises en place.";
"configuration.alerts.commit.buttons.reconnect" = "Se reconnecter";
"configuration.alerts.commit.buttons.skip" = "Passer";
"trusted.columns.trust.title" = "Fiables";
"trusted.ethernet.title" = "Faire confiance aux connexions filaires";
"trusted.ethernet.description" = "Cochez pour faire confiance à toutes les connexions filaires.";
"preferences.title" = "Préférences";
"preferences.sections.general.header" = "Général";
"preferences.cells.launches_on_login.caption" = "Lancer au démarrage";
"preferences.cells.launches_on_login.footer" = "Cochez pour lancer automatiquement l'application à la connexion ou au démarrage.";
"preferences.cells.confirm_quit.caption" = "Notification de sortie";
"preferences.cells.confirm_quit.footer" = "Cochez pour recevoir une demande de confirmation lorsque vous quittez.";
"network_settings.gateway.title" = "Gateway";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Serveurs";
"network_settings.dns.cells.domain.caption" = "Domaine";
"network_settings.dns.cells.domains.title" = "Domaines";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Outrepasser le domaine";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Précédent";
"debug_log.buttons.next" = "Suivant";
"debug_log.buttons.copy" = "Copier";
"debug_log.alerts.empty_log.message" = "Le journal de débogage est vide. ";
"shortcuts.add.title" = "Ajouter un raccourcis";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Cellulaire";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Retirer le présent réseau cellulaire des réseaux de confiance.";
"shortcuts.add.alerts.no_profiles.message" = "Il n'y a aucun profile pour se connecter.";
"shortcuts.edit.title" = "Gérer les raccourcis";
"shortcuts.edit.sections.all.header" = "Raccourcis existants";
"shortcuts.edit.cells.add_shortcut.caption" = "Ajouter un raccourcis";
"purchase.title" = "Acheter";
"purchase.sections.products.footer" = "Chaque produit est un achat unique. Les achats n'incluent pas une souscription à un service de VPN.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Traductions";
"label.license.error" = "Impossible de télécharger le contenu complet de la license.";
// iOS only
"imported_hosts.title" = "Hôtes importés";
// macOS only
"menu.show.title" = "Afficher";
"menu.switch_profile.title" = "Profil actif";
"menu.active_profile.title.none" = "Pas de profil actif";
"menu.active_profile.items.customize.title" = "Personnaliser...";
"menu.active_profile.messages.missing_credentials" = "Pas de compte configuré";
"menu.organizer.title" = "Organisateur";
"menu.preferences.title" = "Préférences";
"menu.support.title" = "Assistance";
"menu.quit.title" = "Quitter %@";
"menu.quit.messages.confirm" = "S'il est activé, le VPN fonctionnera en tâche de fond. Voulez-vous quitter ?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Disconnettendo";
"vpn.inactive" = "Inattiva";
"vpn.disabled" = "Disabilitata";
"vpn.unused" = "Spento";
"vpn.errors.timeout" = "Timeout";
"vpn.errors.dns" = "DNS fallito";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Provider";
"organizer.menus.provider.unavailable" = "Nessun altro provider disponibile";
"organizer.menus.host" = "Host";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Vieni a vedermi creare Passepartout in diretta su Twitch, unisciti alla chat per interagire e contribuire!";
"organizer.sections.providers.header" = "Provider";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Offri una traduzione";
"organizer.cells.about.caption" = "Informazioni su %@";
"organizer.cells.uninstall.caption" = "Rimuovi configurazione VPN";
"organizer.cells.add_provider.caption" = "Aggiungi provider";
"organizer.cells.add_host.caption" = "Aggiungi da Files";
"organizer.cells.import_host.caption" = "Aggiungi da importati";
"organizer.alerts.exhausted_providers.message" = "Hai creato profili per tutti i provider disponibili.";
"organizer.alerts.add_host.message" = "Apri l'URL di un file di configurazione .ovpn da Safari, Mail o da un'altra app per configurare un host.\n\nPuoi anche importare un file .ovpn con iTunes File Sharing.";
"organizer.alerts.cannot_donate.message" = "Nessun metodo di pagamento configurato su questo dispositivo.";
"organizer.alerts.delete_vpn_profile.message" = "Vuoi veramente cancellare la configurazione VPN dalle impostazioni del tuo dispositivo? Quest'azione potrebbe risolvere alcuni stati erronei della VPN e non altererà i tuoi provider e i tuoi host.";
"organizer.alerts.remove_profile.title" = "Cancella profilo";
"organizer.alerts.remove_profile.message" = "Sei sicuro di voler cancellare il profilo %@?";
"organizer.alerts.open_host_file.title" = "Seleziona un file .ovpn";
"wizards.provider.cells.update_list.caption" = "Aggiorna lista";
"wizards.provider.alerts.unavailable.message" = "Non è stato possibile scaricare l'infrastruttura del provider, per favore riprova più tardi.";
"wizards.host.sections.existing.header" = "Profili esistenti";
"wizards.host.cells.title_input.caption" = "Titolo";
"wizards.host.alerts.existing.message" = "Esiste già un host con lo stesso titolo. Sostituire?";
"service.welcome.message" = "Benvenuto in Passepartout!\n\nUsa il menu per aggiungere un nuovo profilo.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "La connessione sarà stabilita ogni volta che è necessario.";
"service.sections.status.header" = "Connessione";
"service.sections.configuration.header" = "Configurazione";
"service.sections.provider_infrastructure.footer" = "Ultimo aggiornamento: %@.";
"service.sections.vpn_survives_sleep.footer" = "Disabilita per migliorare il consumo della batteria, a discapito di rallentamenti occasionali causati dalle riconnessioni.";
"service.sections.vpn_resolves_hostname.footer" = "Preferibile nella maggior parte delle reti e necessario in alcune reti IPv6. Disabilita dove il DNS è bloccato, o per velocizzare la negoziazione quando il DNS tarda a rispondere.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnostica";
"service.sections.diagnostics.footer" = "Il mascheramento sarà effettivo dopo una riconnessione. I dati di rete sono hostname, indirizzi IP, routing, SSID. Credenziali e chiavi private non sono registrati in ogni caso.";
"service.cells.use_profile.caption" = "Usa questo profilo";
"service.cells.vpn_service.caption" = "Abilitato";
"service.cells.vpn.turn_on.caption" = "Abilita VPN";
"service.cells.vpn.turn_off.caption" = "Disabilita VPN";
"service.cells.connection_status.caption" = "Stato";
"service.cells.host.parameters.caption" = "Parametri";
"service.cells.provider.pool.caption" = "Regione";
"service.cells.provider.preset.caption" = "Preset";
"service.cells.provider.refresh.caption" = "Aggiorna infrastruttura";
"service.cells.category.caption" = "Categoria";
"service.cells.addresses.caption" = "Indirizzi";
"service.cells.only_shows_favorites.caption" = "Mostra solo le posizioni preferite";
"service.cells.vpn_survives_sleep.caption" = "Mantieni attivo in sleep";
"service.cells.vpn_resolves_hostname.caption" = "Risolvi hostname del server";
"service.cells.trusted_add_wifi.caption" = "Aggiungi Wi-Fi";
"service.cells.trusted_mobile.caption" = "Rete cellulare";
"service.cells.trusted_policy.caption" = "Spegni VPN in rete sicura";
"service.cells.test_connectivity.caption" = "Verifica connettività";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ richiede lo scaricamento di file di configurazione aggiuntivi.\n\nConferma per avviare lo scaricamento.";
"service.alerts.download.failed" = "Impossibile scaricare i file di configurazione. %@";
"service.alerts.download.hud.extracting" = "Estraendo i file, un attimo di pazienza...";
"service.alerts.location.message.denied" = "Devi dare accesso alla tua posizione per aggiungere questa rete Wi-Fi alle reti sicure. Vai alle impostazioni iOS e verifica i permessi sulla posizione per Passepartout.";
"service.alerts.location.button.settings" = "Impostazioni";
"provider.pool.sections.empty_favorites.footer" = "Scorri a sinistra su una regione per aggiungerla o rimuoverla dai Preferiti.";
"provider.pool.actions.favorite" = "Preferita";
"provider.pool.actions.unfavorite" = "Non preferita";
"provider.preset.cells.tech_details.caption" = "Dettagli tecnici";
"account.title" = "Account";
"account.sections.credentials.header" = "Credenziali";
"account.sections.guidance.footer.infrastructure.default.web" = "Usa le credenziali del sito di %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Usa le tue credenziali del servizio %@, che potrebbero differire dalle credenziali del sito web.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Usa le credenziali del sito di %@. Il tuo username è generalmente numerico (senza spazi).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Registrati con %@";
"endpoint.title" = "Endpoint";
"endpoint.sections.location_addresses.header" = "Indirizzi";
"endpoint.sections.location_protocols.header" = "Protocolli";
"endpoint.cells.address" = "Indirizzo";
"endpoint.cells.protocol" = "Protocollo";
"endpoint.cells.any_address.caption" = "Automatico";
"endpoint.cells.any_protocol.caption" = "Automatico";
"network_settings.title" = "Impostazioni di rete";
"network_settings.cells.add_dns_server.caption" = "Aggiungi indirizzo";
"network_settings.cells.add_dns_domain.caption" = "Aggiungi dominio";
"network_settings.cells.proxy_bypass.caption" = "Dominio ignorato";
"network_settings.cells.add_proxy_bypass.caption" = "Aggiungi dominio ignorato";
"configuration.title" = "Configurazione";
"configuration.sections.communication.header" = "Comunicazione";
"configuration.sections.reset.footer" = "Se ti trovi con una connettività compromessa dopo aver cambiato i parametri di comunicazione, tocca per tornare alla configurazione originale.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Rinegoziazione";
"configuration.cells.renegotiation_seconds.value.after" = "dopo %@";
"configuration.cells.random_endpoint.caption" = "Endpoint casuale";
"configuration.alerts.commit.message" = "I nuovi parametri non saranno effettivi finché non ti riconnetti manualmente. I cambi nelle reti sicure saranno applicati immediatamente.";
"configuration.alerts.commit.buttons.reconnect" = "Riconnetti adesso";
"configuration.alerts.commit.buttons.skip" = "Ignora";
"trusted.columns.trust.title" = "Sicura";
"trusted.ethernet.title" = "Connessioni cablate sicure";
"trusted.ethernet.description" = "Seleziona per considerare sicura qualsiasi rete cablata.";
"preferences.title" = "Preferenze";
"preferences.sections.general.header" = "Generale";
"preferences.cells.launches_on_login.caption" = "Apri al login";
"preferences.cells.launches_on_login.footer" = "Seleziona per aprire automaticamente l'app all'avvio o al login.";
"preferences.cells.confirm_quit.caption" = "Conferma uscita";
"preferences.cells.confirm_quit.footer" = "Seleziona per confermare l'uscita dall'applicazione.";
"network_settings.gateway.title" = "Gateway predefinito";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Server";
"network_settings.dns.cells.domain.caption" = "Dominio";
"network_settings.dns.cells.domains.title" = "Dominii";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Dominii ignorati";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Precedente";
"debug_log.buttons.next" = "Successivo";
"debug_log.buttons.copy" = "Copia";
"debug_log.alerts.empty_log.message" = "Il debug log è vuoto.";
"shortcuts.add.title" = "Aggiungi comando rapido";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Cellulare";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Rimuovi rete mobile sicura";
"shortcuts.add.alerts.no_profiles.message" = "Non c'è nessun profilo a cui connettersi.";
"shortcuts.edit.title" = "Gestisci comandi rapidi";
"shortcuts.edit.sections.all.header" = "Comandi esistenti";
"shortcuts.edit.cells.add_shortcut.caption" = "Aggiungi comando rapido";
"purchase.title" = "Acquista";
"purchase.sections.products.footer" = "Ogni prodotto è un acquisto unico e non ricorrente. L'acquisto di un provider non include una sottoscrizione.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Traduzioni";
"label.license.error" = "Impossibile scaricare il contenuto completo della licenza.";
// iOS only
"imported_hosts.title" = "Host importati";
// macOS only
"menu.show.title" = "Mostra";
"menu.switch_profile.title" = "Profilo attivo";
"menu.active_profile.title.none" = "Nessun profilo attivo";
"menu.active_profile.items.customize.title" = "Personalizza...";
"menu.active_profile.messages.missing_credentials" = "Nessun account configurato";
"menu.organizer.title" = "Organizer";
"menu.preferences.title" = "Preferenze";
"menu.support.title" = "Supporto";
"menu.quit.title" = "Esci da %@";
"menu.quit.messages.confirm" = "La VPN, se abilitata, continuerà ad essere attiva in background. Vuoi comunque uscire?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Verbinding verbreken";
"vpn.inactive" = "Inactief";
"vpn.disabled" = "Uitgeschakeld";
"vpn.unused" = "Uit";
"vpn.errors.timeout" = "Time-out";
"vpn.errors.dns" = "DNS niet gelukt";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Aanbieder";
"organizer.menus.provider.unavailable" = "Geen aanbieders meer";
"organizer.menus.host" = "Host";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Kom kijken hoe ik Passepartout live maak op Twitch, doe mee aan de chat om te communiceren en bij te dragen!";
"organizer.sections.providers.header" = "Aanbieders";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Help met vertalen";
"organizer.cells.about.caption" = "Over %@";
"organizer.cells.uninstall.caption" = "Verwijder VPN configuratie";
"organizer.cells.add_provider.caption" = "Voeg nieuwe aanbieder toe";
"organizer.cells.add_host.caption" = "Toevoegen vanuit Bestanden";
"organizer.cells.import_host.caption" = "Toevoegen vanuit geïmporteerd";
"organizer.alerts.exhausted_providers.message" = "Er zijn profielen gemaakt voor elke beschikbare aanbieder.";
"organizer.alerts.add_host.message" = "Open een URL naar een .ovpn configuratie bestand met Safari, Mail of een andere app om een host profile te configureren.\n\nJe kan ook een .ovpn importeren met behulp van iTunes bestandsdeling.";
"organizer.alerts.cannot_donate.message" = "Er is geen betaalmethode geconfigureerd op dit apparaat.";
"organizer.alerts.delete_vpn_profile.message" = "Wilt u de VPN-configuratie van uw apparaatinstellingen verwijderen? Dit kan enkele problemen met VPN oplossen en heeft geen invloed op uw provider- en hostprofielen.";
"organizer.alerts.remove_profile.title" = "Profiel verwijderen";
"organizer.alerts.remove_profile.message" = "Weet u zeker dat u profiel %@ wilt verwijderen?";
"organizer.alerts.open_host_file.title" = "Selecteer een .ovpn-bestand";
"wizards.provider.cells.update_list.caption" = "Lijst bijwerken";
"wizards.provider.alerts.unavailable.message" = "Kon de provider-infrastructuur niet downloaden, probeer het later opnieuw.";
"wizards.host.sections.existing.header" = "Bestaande profielen";
"wizards.host.cells.title_input.caption" = "Titel";
"wizards.host.alerts.existing.message" = "Er bestaat al een host profiel met deze titel, wil je hem vervangen?";
"service.welcome.message" = "Welkom bij Passepartout!\n\nGebruik de organizer om een nieuw profiel toe te voegen.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "De verbinding zal worden gestart wanneer nodig.";
"service.sections.status.header" = "Verbinding";
"service.sections.configuration.header" = "Configuratie";
"service.sections.provider_infrastructure.footer" = "Laatste update was op %@.";
"service.sections.vpn_survives_sleep.footer" = "Uitschakelen om het batterijverbruik te verbeteren, ten koste van incidentele vertragingen als gevolg van het opnieuw opstarten na wake-up.";
"service.sections.vpn_resolves_hostname.footer" = "Voorkeur om dit aan te zetten voor de meeste netwerken en vereist in sommige IPv6-netwerken. Uitschakelen waar DNS wordt geblokkeerd, of om de onderhandelingen te versnellen wanneer DNS traag reageert.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnose";
"service.sections.diagnostics.footer" = "De maskeerstatus is effectief na opnieuw verbinden. Netwerkgegevens zijn hostnamen, IP-adressen, routing, SSID's. Inloggegevens en privésleutels worden niet geregistreerd.";
"service.cells.use_profile.caption" = "Gebruik dit profiel";
"service.cells.vpn_service.caption" = "Ingeschakeld";
"service.cells.vpn.turn_on.caption" = "VPN activeren";
"service.cells.vpn.turn_off.caption" = "VPN deactiveren";
"service.cells.connection_status.caption" = "Status";
"service.cells.host.parameters.caption" = "Parameters";
"service.cells.provider.pool.caption" = "Locatie";
"service.cells.provider.preset.caption" = "Voorkeur";
"service.cells.provider.refresh.caption" = "Vernieuw de infrastructuur";
"service.cells.category.caption" = "Categorie";
"service.cells.addresses.caption" = "Adressen";
"service.cells.only_shows_favorites.caption" = "Alleen favoriete locaties weergeven";
"service.cells.vpn_survives_sleep.caption" = "Actief tijdens slaapstand";
"service.cells.vpn_resolves_hostname.caption" = "Haal de naam van de host op";
"service.cells.trusted_add_wifi.caption" = "Wi-Fi toevoegen";
"service.cells.trusted_mobile.caption" = "Mobiel netwerk";
"service.cells.trusted_policy.caption" = "Trust disables VPN";
"service.cells.test_connectivity.caption" = "Test connectiviteit";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ vereist het downloaden van extra configuratiebestanden.\n\nBevestig om het downloaden te starten.";
"service.alerts.download.failed" = "Downloaden van configuratiebestanden is mislukt. %@";
"service.alerts.download.hud.extracting" = "Bestanden uitpakken, even geduld...";
"service.alerts.location.message.denied" = "Om dit Wi-Fi netwerk te vertrouwen is toestemming tot locatie gegevens nodig. Ga naar Instellingen -> Privacy -> Locatievoorzieningen en check de locatie bevoegdheden voor Passepartout.";
"service.alerts.location.button.settings" = "Instellingen";
"provider.pool.sections.empty_favorites.footer" = "Veeg naar links op een locatie om deze toe te voegen of te verwijderen aan Favorieten.";
"provider.pool.actions.favorite" = "Favoriet";
"provider.pool.actions.unfavorite" = "Geen favoriet";
"provider.preset.cells.tech_details.caption" = "Technische details";
"account.title" = "Account";
"account.sections.credentials.header" = "Inloggegevens";
"account.sections.guidance.footer.infrastructure.default.web" = "Gebruik de inloggegevens van %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Gebruik uw %@ service-gegevens, die kunnen verschillen van de gegevens van de website.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Gebruik de inloggegevens van %@. Uw gebruikersnaam is meestal numeriek (zonder ruimte).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Registreer bij %@";
"endpoint.title" = "Endpoint";
"endpoint.sections.location_addresses.header" = "Adressen";
"endpoint.sections.location_protocols.header" = "Protocollen";
"endpoint.cells.address" = "Adres";
"endpoint.cells.protocol" = "Protocol";
"endpoint.cells.any_address.caption" = "Automatisch";
"endpoint.cells.any_protocol.caption" = "Automatisch";
"network_settings.title" = "Netwerk instellingen";
"network_settings.cells.add_dns_server.caption" = "Voeg adress toe";
"network_settings.cells.add_dns_domain.caption" = "Zoekdomein toevoegen";
"network_settings.cells.proxy_bypass.caption" = "Omzeil domein";
"network_settings.cells.add_proxy_bypass.caption" = "Voeg omzeil optie voor domein toe";
"configuration.title" = "Configuratie";
"configuration.sections.communication.header" = "Communicatie";
"configuration.sections.reset.footer" = "Tik hier als de connectiviteit niet meer werkt na het aanpassen van instellingen, om terug te gaan naar de originele configuratie.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Renegotiation";
"configuration.cells.renegotiation_seconds.value.after" = "na %@";
"configuration.cells.random_endpoint.caption" = "Willekeurig eindpunt";
"configuration.alerts.commit.message" = "Nieuwe parameters worden pas van kracht als u handmatig opnieuw verbinding maakt. Wijzigingen in vertrouwde netwerken zijn direct van toepassing.";
"configuration.alerts.commit.buttons.reconnect" = "Opnieuw verbinden";
"configuration.alerts.commit.buttons.skip" = "Overslaan";
"trusted.columns.trust.title" = "Vertrouwen";
"trusted.ethernet.title" = "Bekabelde verbindingen vertrouwen";
"trusted.ethernet.description" = "Vink aan om alle bekabelde verbindingen te vertrouwen.";
"preferences.title" = "Voorkeuren";
"preferences.sections.general.header" = "Algemeen";
"preferences.cells.launches_on_login.caption" = "Lanceren bij aanmelden";
"preferences.cells.launches_on_login.footer" = "Vink aan als u wilt dat de app automatisch wordt gelanceerd bij opstarten of aanmelden.";
"preferences.cells.confirm_quit.caption" = "Sluiten bevestigen";
"preferences.cells.confirm_quit.footer" = "Vink aan om een bevestigingsmelding te sluiten.";
"network_settings.gateway.title" = "Standaard gateway";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Servers";
"network_settings.dns.cells.domain.caption" = "Domein";
"network_settings.dns.cells.domains.title" = "Domeinen";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Domeinen omzeilen";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Vorige";
"debug_log.buttons.next" = "Volgende";
"debug_log.buttons.copy" = "Kopiëren";
"debug_log.alerts.empty_log.message" = "Het logboek voor foutopsporing is leeg.";
"shortcuts.add.title" = "Voeg snelkoppeling toe";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Mobiel";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Untrust mobiel netwerk";
"shortcuts.add.alerts.no_profiles.message" = "Er is geen profiel om verbinding mee te maken.";
"shortcuts.edit.title" = "Beheer snelkoppelingen";
"shortcuts.edit.sections.all.header" = "Bestaande snelkoppelingen";
"shortcuts.edit.cells.add_shortcut.caption" = "Voeg snelkoppeling toe";
"purchase.title" = "Aanschaffen";
"purchase.sections.products.footer" = "Elk product is een eenmalige aankoop. Aankopen van providers bevatten geen VPN-abonnement.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Vertalingen";
"label.license.error" = "Kan volledige licentie-inhoud niet downloaden.";
// iOS only
"imported_hosts.title" = "Geïmporteerde hosts";
// macOS only
"menu.show.title" = "Weergeven";
"menu.switch_profile.title" = "Actief profiel";
"menu.active_profile.title.none" = "Geen actief profiel";
"menu.active_profile.items.customize.title" = "Aanpassen...";
"menu.active_profile.messages.missing_credentials" = "Geen account geconfigureerd";
"menu.organizer.title" = "Organisator";
"menu.preferences.title" = "Voorkeuren";
"menu.support.title" = "Ondersteuning";
"menu.quit.title" = "%@ afsluiten";
"menu.quit.messages.confirm" = "De VPN zal, indien geactiveerd, op de achtergrond blijven draaien. Wilt u sluiten?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Rozłączanie";
"vpn.inactive" = "Nieaktywne";
"vpn.disabled" = "Wyłączone";
"vpn.unused" = "Wył";
"vpn.errors.timeout" = "Upłynąl limit czasu połączenia";
"vpn.errors.dns" = "Błąd DNS";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Dostawca";
"organizer.menus.provider.unavailable" = "Brak dostawców";
"organizer.menus.host" = "Host";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Przyjdź i zobacz, jak tworzę Passepartout na żywo na Twitchu, dołącz do czatu, aby współdziałać i udzielać się!";
"organizer.sections.providers.header" = "Usługodawcy";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Zaproponuj tłumaczenie";
"organizer.cells.about.caption" = "O %@";
"organizer.cells.uninstall.caption" = "Usuń konfiguracje VPN";
"organizer.cells.add_provider.caption" = "Dodaj nowego usługodawcę";
"organizer.cells.add_host.caption" = "Dodaj z Plików";
"organizer.cells.import_host.caption" = "Dodaj z zaimportowanych";
"organizer.alerts.exhausted_providers.message" = "Stworzyłeś/aś już profile dla każdego usługodawcy.";
"organizer.alerts.add_host.message" = "Otwórz link z plikiem .ovpn w Safari, Poczcie lub innej aplikacji aby utworzyć profil hosta.\n\nMożesz też zaimportować plik .ovpn używając 'File Sharing' w iTunes.";
"organizer.alerts.cannot_donate.message" = "Żadna metoda płatności nie jest skonfigurowana na tym urządzeniu.";
"organizer.alerts.delete_vpn_profile.message" = "Na pewno chcesz usunąć konfigurację VPN z urządzenia? Może to naprawić błędy z statusem VPN i nie będzie miało wpływu na konfigurację usługodawców/hostów.";
"organizer.alerts.remove_profile.title" = "Usuń profil";
"organizer.alerts.remove_profile.message" = "Na pewno chcesz usunąć profil %@?";
"organizer.alerts.open_host_file.title" = "Wybierz plik .ovpn";
"wizards.provider.cells.update_list.caption" = "Zaktualizuj listę";
"wizards.provider.alerts.unavailable.message" = "Nie można pobrać infrastruktury dostawcy, spróbuj ponownie później.";
"wizards.host.sections.existing.header" = "Istniejące profile";
"wizards.host.cells.title_input.caption" = "Tytuł";
"wizards.host.alerts.existing.message" = "Profil hosta z taką nazwą już istnieje. Nadpisać profil?";
"service.welcome.message" = "Witaj w Passepartout!\n\nUżyj organizera by utworzyć nowy profil.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "Połączenie zostanie nawiązane zgodnie z ustawieniami.";
"service.sections.status.header" = "Połączenie";
"service.sections.configuration.header" = "Konfiguracja";
"service.sections.provider_infrastructure.footer" = "Ostatnio aktualizowane %@.";
"service.sections.vpn_survives_sleep.footer" = "Wyłącz dla mniejszego zużycia baterii kosztem wolniejszego działania spowodowanego ponownym połączeniem przy wybudzeniu urządzenia.";
"service.sections.vpn_resolves_hostname.footer" = "Preferowane w większości sieci i potrzebne w niektórych sieciach IPv6. Wyłącz kiedy DNS jest zablokowane, lub żeby przyspieszyć ustanawianie połączenia gdy DNS jest zbyt wolne.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnostyka";
"service.sections.diagnostics.footer" = "Status maskowania będzie widoczny po ponownym połączeniu. Dane połączenia to nazwy hostów, adresy IP, routing, SSID. Loginy i klucze prywatne nie są zapisywane.";
"service.cells.use_profile.caption" = "Używaj tego profilu";
"service.cells.vpn_service.caption" = "Włączone";
"service.cells.vpn.turn_on.caption" = "Włącz VPN";
"service.cells.vpn.turn_off.caption" = "Wyłącz VPN";
"service.cells.connection_status.caption" = "Status";
"service.cells.host.parameters.caption" = "Parametry";
"service.cells.provider.pool.caption" = "Lokalizacja";
"service.cells.provider.preset.caption" = "Preset";
"service.cells.provider.refresh.caption" = "Odśwież infrastrukturę";
"service.cells.category.caption" = "Kategoria";
"service.cells.addresses.caption" = "Adresy";
"service.cells.only_shows_favorites.caption" = "Pokazuj tylko ulubione lokalizacje";
"service.cells.vpn_survives_sleep.caption" = "Utrzymuj połączenie przy zablokowanym ekranie";
"service.cells.vpn_resolves_hostname.caption" = "Rozwiązuj nazwy hostów usługodawcy";
"service.cells.trusted_add_wifi.caption" = "Dodaj Wi-Fi";
"service.cells.trusted_mobile.caption" = "Sieć komórkowa";
"service.cells.trusted_policy.caption" = "Wyłącz VPN dla zaufanych sieci";
"service.cells.test_connectivity.caption" = "Testuj połączenie";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ potrzebuje pobrania dodatkowych plików konfiguracyjnych.\n\nPotwierdź aby zacząć pobieranie.";
"service.alerts.download.failed" = "Nie udało się pobrać plików konfiguracyjnych. %@";
"service.alerts.download.hud.extracting" = "Wypakowywanie plików, proszę czekać ...";
"service.alerts.location.message.denied" = "Musisz pozwolić na dostęp do lokalizacji żeby zaufać tej sieci Wi-Fi. Przejdź do ustawień prywatności i pozwól Passepartout na wykorzystywanie usług lokalizacji.";
"service.alerts.location.button.settings" = "Ustawienia";
"provider.pool.sections.empty_favorites.footer" = "Aby usunąć zakładkę, przesuń w lewo.";
"provider.pool.actions.favorite" = "Dodaj do ulubionych";
"provider.pool.actions.unfavorite" = "Usuń z ulubionych";
"provider.preset.cells.tech_details.caption" = "Dane techniczne";
"account.title" = "Konto";
"account.sections.credentials.header" = "Dane logowania";
"account.sections.guidance.footer.infrastructure.default.web" = "Użyj loginu do %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Użyj poświadczeń usługi %@, które mogą różnić się od poświadczeń witryny.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Użyj loginu do %@. Twoja nazwa użytkownika jest najczęściej ciągiem liczb (bez przestrzeni).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Zarejstruj się w %@";
"endpoint.title" = "Host końcowy";
"endpoint.sections.location_addresses.header" = "Adresy";
"endpoint.sections.location_protocols.header" = "Protokoły";
"endpoint.cells.address" = "Adres";
"endpoint.cells.protocol" = "Protokół";
"endpoint.cells.any_address.caption" = "Automatyczny";
"endpoint.cells.any_protocol.caption" = "Automatyczny";
"network_settings.title" = "Ustawienia sieci";
"network_settings.cells.add_dns_server.caption" = "Dodaj adres";
"network_settings.cells.add_dns_domain.caption" = "Dodaj domenę wyszukiwania";
"network_settings.cells.proxy_bypass.caption" = "Pomiń domenę";
"network_settings.cells.add_proxy_bypass.caption" = "Dodaj domenę";
"configuration.title" = "Konfiguracja";
"configuration.sections.communication.header" = "Komunikacja";
"configuration.sections.reset.footer" = "Jeśli masz problemy z połączeniem po zmianie konfiguracji komunikacji, kliknij żeby przywrócić domyślną konfigurację.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Ponowna negocjacja";
"configuration.cells.renegotiation_seconds.value.after" = "po %@";
"configuration.cells.random_endpoint.caption" = "Losowy host końcowy";
"configuration.alerts.commit.message" = "Nowe parametry zaczną obowiązywać dopiero po ponownym ręcznym połączeniu. Zmiany w sieciach zaufanych zostaną zastosowane natychmiast.";
"configuration.alerts.commit.buttons.reconnect" = "Połącz ponownie teraz";
"configuration.alerts.commit.buttons.skip" = "Pomiń";
"trusted.columns.trust.title" = "Ufaj";
"trusted.ethernet.title" = "Ufaj połączeniom przewodowym";
"trusted.ethernet.description" = "Zaznacz, aby traktować każde przewodowe połączenie kablowe jako zaufane.";
"preferences.title" = "Preferencje";
"preferences.sections.general.header" = "Ogólne";
"preferences.cells.launches_on_login.caption" = "Uruchom po zalogowaniu";
"preferences.cells.launches_on_login.footer" = "Zaznacz, aby automatycznie uruchamiać aplikację przy restarcie systemu lub logowaniu.";
"preferences.cells.confirm_quit.caption" = "Potwierdź zakończenie pracy";
"preferences.cells.confirm_quit.footer" = "Zaznacz, aby wyświetlić monit o potwierdzeniu zakończenia.";
"network_settings.gateway.title" = "Domyślna brama sieciowa";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Serwery";
"network_settings.dns.cells.domain.caption" = "Domena";
"network_settings.dns.cells.domains.title" = "Domeny";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Pomiń domeny";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Poprzedni";
"debug_log.buttons.next" = "Następny";
"debug_log.buttons.copy" = "Kopiuj";
"debug_log.alerts.empty_log.message" = "Rejestr debugowania jest pusty.";
"shortcuts.add.title" = "Dodaj skrót";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Dane komórkowe";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Przestań ufać danym komórkowym";
"shortcuts.add.alerts.no_profiles.message" = "Brak wybranego profilu połączenia.";
"shortcuts.edit.title" = "Zarządzaj skrótami";
"shortcuts.edit.sections.all.header" = "Istniejące skróty";
"shortcuts.edit.cells.add_shortcut.caption" = "Dodaj skrót";
"purchase.title" = "Kup";
"purchase.sections.products.footer" = "Każdy produkt to zakup jednorazowy. Kuipno usługodawcy nie zawiera subskrypcji VPN.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Tłumaczenia";
"label.license.error" = "Nie udało się pobrać danych licencyjnych.";
// iOS only
"imported_hosts.title" = "Zaimportowane hosty";
// macOS only
"menu.show.title" = "Pokaż";
"menu.switch_profile.title" = "Aktywny profil";
"menu.active_profile.title.none" = "Brak aktywnych profili";
"menu.active_profile.items.customize.title" = "Personalizuj";
"menu.active_profile.messages.missing_credentials" = "Brak skonfigurowanych kont";
"menu.organizer.title" = "Organzator";
"menu.preferences.title" = "Preferencje";
"menu.support.title" = "Obsługa techniczna";
"menu.quit.title" = "Zakończ %@";
"menu.quit.messages.confirm" = "Jeśli sieć VPN, jest włączona, będzie nadal działać w tle. Chcesz zakończyć?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Desconectando";
"vpn.inactive" = "Inativo";
"vpn.disabled" = "Desativado";
"vpn.unused" = "Desativado";
"vpn.errors.timeout" = "Timeout";
"vpn.errors.dns" = "Falha no DNS";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Fornecedor";
"organizer.menus.provider.unavailable" = "Não restam fornecedores";
"organizer.menus.host" = "Anfitreão";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Venha me ver fazer o Passepartout ao vivo no Twitch, entre no chat para interagir e contribuir!";
"organizer.sections.providers.header" = "Provedores";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Ajudar-nos na tradução";
"organizer.cells.about.caption" = "Sobre %@";
"organizer.cells.uninstall.caption" = "Remover configuração VPN";
"organizer.cells.add_provider.caption" = "Adicionar novo perfil";
"organizer.cells.add_host.caption" = "Adicionar dos Arquivos";
"organizer.cells.import_host.caption" = "Adicionar dos importados";
"organizer.alerts.exhausted_providers.message" = "Você criou um perfil para qualquer provedor disponível.";
"organizer.alerts.add_host.message" = "Abre uma URL para um arquivo de configuração .ovpn no Safari, Mail ou outro aplicativo.\n\nVocê pode também importar um .ovpn com o compartilhamento de arquivos do iTunes.";
"organizer.alerts.cannot_donate.message" = "Nenhum meio de pagamento configurado nesse dispositivo.";
"organizer.alerts.delete_vpn_profile.message" = "Tem certeza que deseja remover as configurações de VPN do seu dispositivo? Isso poderá corrigir problemas com o estado atual, sem afetar seu provedor e perfis do host.";
"organizer.alerts.remove_profile.title" = "Remover perfil";
"organizer.alerts.remove_profile.message" = "Tem a certeza de que pretende eliminar o perfil %@?";
"organizer.alerts.open_host_file.title" = "Selecionar um ficheiro .ovpn";
"wizards.provider.cells.update_list.caption" = "Atualizar lista";
"wizards.provider.alerts.unavailable.message" = "Não foi possível baixar a infraestrutura do provedor, tente novamente mais tarde.";
"wizards.host.sections.existing.header" = "Perfis existentes";
"wizards.host.cells.title_input.caption" = "Título";
"wizards.host.alerts.existing.message" = "Já existe um perfil com esse nome, deseja substituí-lo?";
"service.welcome.message" = "Bem-vindo ao Passepartout!\n\nUse o organizador para adicionar um novo perfil.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "A conexão será estabelecida assim que necessária.";
"service.sections.status.header" = "Conexão";
"service.sections.configuration.header" = "Configuração";
"service.sections.provider_infrastructure.footer" = "Última atualização em %@.";
"service.sections.vpn_survives_sleep.footer" = "Desative para melhorar o consumo de bateria, o que poderá ocasionar queda de performance quando o restabelecimento de conexão for realizado.";
"service.sections.vpn_resolves_hostname.footer" = "Recomendado para maioria das redes e requirido em algumas redes IPv6. Desative se o DNS estiver bloqueado, ou para acelerar o DNS quando o mesmo está devagar.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnóstico";
"service.sections.diagnostics.footer" = "O status será escondido após reconectado. Os dados da rede são hostnames, endereços de IP, rotas, SSID. Credenciais e chaves privadas não será logadas em nenhum dos casos.";
"service.cells.use_profile.caption" = "Usar esse perfil";
"service.cells.vpn_service.caption" = "Ativado";
"service.cells.vpn.turn_on.caption" = "Ativar VPN";
"service.cells.vpn.turn_off.caption" = "Desativar VPN";
"service.cells.connection_status.caption" = "Status";
"service.cells.host.parameters.caption" = "Parâmetros";
"service.cells.provider.pool.caption" = "Localização";
"service.cells.provider.preset.caption" = "Pré-definição";
"service.cells.provider.refresh.caption" = "Atualizar infraestrutura";
"service.cells.category.caption" = "Categoria";
"service.cells.addresses.caption" = "Endereços";
"service.cells.only_shows_favorites.caption" = "Mostrar apenas os locais preferidos";
"service.cells.vpn_survives_sleep.caption" = "Manter ativo em modo descanço";
"service.cells.vpn_resolves_hostname.caption" = "Resolver hostname do servidor";
"service.cells.trusted_add_wifi.caption" = "Adicionar Wi-Fi";
"service.cells.trusted_mobile.caption" = "Rede celular";
"service.cells.trusted_policy.caption" = "Trust disables VPN";
"service.cells.test_connectivity.caption" = "Testar conexão";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ requer o download de arquivos de configuração adicionais.\n\nConfirme para iniciar.";
"service.alerts.download.failed" = "Erro no download do arquivo de configuração. %@";
"service.alerts.download.hud.extracting" = "Extraindo arquivos, seja paciente...";
"service.alerts.location.message.denied" = "Você precisa autorizar o compartilhamento de localização. Acesse ajustes do iOS e verifique permissões de localização do Passepartout.";
"service.alerts.location.button.settings" = "Ajustes";
"provider.pool.sections.empty_favorites.footer" = "Deslize para a esquerda em um local para adicioná-lo ou removê-lo dos Favoritos.";
"provider.pool.actions.favorite" = "Favorito";
"provider.pool.actions.unfavorite" = "Não favorito";
"provider.preset.cells.tech_details.caption" = "Detalhes técnicos";
"account.title" = "Conta";
"account.sections.credentials.header" = "Credenciais";
"account.sections.guidance.footer.infrastructure.default.web" = "Utilize %@ credenciais do site.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Utilize suas credenciais de serviço %@, que podem diferir das credenciais do site.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Utilize %@ credenciais do site. Seu usuário é normalmente numérico (sem espaços).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Registrar com %@";
"endpoint.title" = "Endereço";
"endpoint.sections.location_addresses.header" = "Endereços";
"endpoint.sections.location_protocols.header" = "Protocolos";
"endpoint.cells.address" = "Endereço";
"endpoint.cells.protocol" = "Protocolo";
"endpoint.cells.any_address.caption" = "Automático";
"endpoint.cells.any_protocol.caption" = "Automático";
"network_settings.title" = "Configurações de rede";
"network_settings.cells.add_dns_server.caption" = "Adicionar endereço";
"network_settings.cells.add_dns_domain.caption" = "Adicionar domínio";
"network_settings.cells.proxy_bypass.caption" = "Domínio ignorado";
"network_settings.cells.add_proxy_bypass.caption" = "Adicionar domínio ignorado";
"configuration.title" = "Configuração";
"configuration.sections.communication.header" = "Comunicação";
"configuration.sections.reset.footer" = "Se você foi desconectado após mudar parâmetros de comunicação, toque para restaurar a configuração original.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Renegociando";
"configuration.cells.renegotiation_seconds.value.after" = "depois de %@";
"configuration.cells.random_endpoint.caption" = "Destino randômico";
"configuration.alerts.commit.message" = "Os novos parâmetros não serão efetivos até que se volte a ligar manualmente. As alterações às redes de confiança serão aplicadas de imediato.";
"configuration.alerts.commit.buttons.reconnect" = "Voltar a ligar agora";
"configuration.alerts.commit.buttons.skip" = "Ignorar";
"trusted.columns.trust.title" = "Confiar";
"trusted.ethernet.title" = "Confiar em ligações com fios";
"trusted.ethernet.description" = "Assinale para confiar em qualquer ligação com cabo.";
"preferences.title" = "Preferências";
"preferences.sections.general.header" = "Geral";
"preferences.cells.launches_on_login.caption" = "Iniciar ao iniciar a sessão";
"preferences.cells.launches_on_login.footer" = "Assinale para executar automaticamente a aplicação ao arrancar ou com o início de sessão.";
"preferences.cells.confirm_quit.caption" = "Confirmar a saída";
"preferences.cells.confirm_quit.footer" = "Assinale para apresentar um alerta de confirmação da saída.";
"network_settings.gateway.title" = "Gateway padrão";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Servidores";
"network_settings.dns.cells.domain.caption" = "Domínio";
"network_settings.dns.cells.domains.title" = "Domínios";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Fazer um bypass aos domínios";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Anterior";
"debug_log.buttons.next" = "Próximo";
"debug_log.buttons.copy" = "Copiar";
"debug_log.alerts.empty_log.message" = "O log está vazio.";
"shortcuts.add.title" = "Adicionar atalho";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Celular";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Não confiar em rede celular";
"shortcuts.add.alerts.no_profiles.message" = "Ainda não existe nenhum perfil para se conectar.";
"shortcuts.edit.title" = "Configuração de atalhos";
"shortcuts.edit.sections.all.header" = "Atalhos existentes";
"shortcuts.edit.cells.add_shortcut.caption" = "Adicionar atalho";
"purchase.title" = "Comprar";
"purchase.sections.products.footer" = "Todo produto é uma compra única. As compras do fornecedor não incluem uma assinatura VPN.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Traduções";
"label.license.error" = "Não foi possível realizar o download da licença.";
// iOS only
"imported_hosts.title" = "Hosts importados";
// macOS only
"menu.show.title" = "Mostrar";
"menu.switch_profile.title" = "Perfil ativo";
"menu.active_profile.title.none" = "Sem perfil ativo";
"menu.active_profile.items.customize.title" = "Personalizar...";
"menu.active_profile.messages.missing_credentials" = "Não há uma conta configurada";
"menu.organizer.title" = "Organizador";
"menu.preferences.title" = "Preferências";
"menu.support.title" = "Apoio";
"menu.quit.title" = "Sair %@";
"menu.quit.messages.confirm" = "A VPN, se ativa, ainda vai ser executada em segundo plano. Quer sair?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Отключается";
"vpn.inactive" = "Не активен";
"vpn.disabled" = "Отключен";
"vpn.unused" = "Выкл";
"vpn.errors.timeout" = "Тайм-аут";
"vpn.errors.dns" = "Ошибка DNS";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Провайдер";
"organizer.menus.provider.unavailable" = "Не осталось провайдеров";
"organizer.menus.host" = "Хост";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Приходите посмотреть, как я делаю Passepartout в прямом эфире на Twitch, присоединяйтесь к чату, чтобы общаться и вносить свой вклад!";
"organizer.sections.providers.header" = "Провайдеры";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Помощь с переводом";
"organizer.cells.about.caption" = "Об %@";
"organizer.cells.uninstall.caption" = "Удалить VPN конфигурацию";
"organizer.cells.add_provider.caption" = "Добавить нового провайдера";
"organizer.cells.add_host.caption" = "Добавить из файлов";
"organizer.cells.import_host.caption" = "Добавить из импортированных";
"organizer.alerts.exhausted_providers.message" = "Вы создали профили для всех доступных провайдеров.";
"organizer.alerts.add_host.message" = "Откройте ссылку на .ovpn файл конфигурации через Safari, Почту или другое приложение для добавление хост профиля.\n\nВы также можете импортировать .ovpn файл через общие файлы iTunes.";
"organizer.alerts.cannot_donate.message" = "На этом усторйстве не выбран способ платежа.";
"organizer.alerts.delete_vpn_profile.message" = "Вы действительно хотите убрать VPN конфигурацию из настроек устройства? Это может исправить несколько VPN ошибок, но не изменит установки приложения.";
"organizer.alerts.remove_profile.title" = "Удалить профиль";
"organizer.alerts.remove_profile.message" = "Вы точно хотите удалить профиль %@?";
"organizer.alerts.open_host_file.title" = "Выберите файл .ovpn";
"wizards.provider.cells.update_list.caption" = "Обновить список";
"wizards.provider.alerts.unavailable.message" = "Не удалось загрузить инфраструктуру провайдера, повторите попытку позже.";
"wizards.host.sections.existing.header" = "Существующие профили";
"wizards.host.cells.title_input.caption" = "Название";
"wizards.host.alerts.existing.message" = "Хост профиль с этим названием уже существует. Заменить?";
"service.welcome.message" = "Добро пожаловать в Passepartout!\n\nИспользуйте организатор для добавления нового профиля.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "Соединение будет установлено при необходимости.";
"service.sections.status.header" = "Соединение";
"service.sections.configuration.header" = "Конфигурация";
"service.sections.provider_infrastructure.footer" = "Последнее обновление %@.";
"service.sections.vpn_survives_sleep.footer" = "Отключите для уменьшения расхода заряда аккумулятора, может привести к временным замедлениям в связи с повторным подключением после \"пробуждения\".";
"service.sections.vpn_resolves_hostname.footer" = "Предпочтительно в большинстве сетей и необходимо в некоторых IPv6 сетях. Отключите если  DNS заблокирован, или для увеличения скорости в случае медленных ответов DNS.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Диагностика";
"service.sections.diagnostics.footer" = "Маскировка включится после повторного подключения. Информация о сети - это названия хост профилей, IP адрес, маршрутизация и SSID. Данные для входа и приватные ключи не собираются.";
"service.cells.use_profile.caption" = "Использовать это профиль.";
"service.cells.vpn_service.caption" = "Включен";
"service.cells.vpn.turn_on.caption" = "Включить VPN";
"service.cells.vpn.turn_off.caption" = "Отключить VPN";
"service.cells.connection_status.caption" = "Статус";
"service.cells.host.parameters.caption" = "Параметры";
"service.cells.provider.pool.caption" = "Местоположение";
"service.cells.provider.preset.caption" = "Пресет";
"service.cells.provider.refresh.caption" = "Обновить инфраструктуру";
"service.cells.category.caption" = "Категория";
"service.cells.addresses.caption" = "Адреса";
"service.cells.only_shows_favorites.caption" = "Показывать только места из избранного";
"service.cells.vpn_survives_sleep.caption" = "Оставлять включенным во время сна";
"service.cells.vpn_resolves_hostname.caption" = "Разрешить имя хоста сервера";
"service.cells.trusted_add_wifi.caption" = "Добавить Wi-Fi";
"service.cells.trusted_mobile.caption" = "Мобильная сеть";
"service.cells.trusted_policy.caption" = "Дов. сеть отключает VPN";
"service.cells.test_connectivity.caption" = "Проверить подключение";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ необходимы дополнительные файлы конфигурации.\n\nПодтвердите для скачивания.";
"service.alerts.download.failed" = "Не удалось скачать файлы конфигурации.%@";
"service.alerts.download.hud.extracting" = "Извлечение файлов, пожалуста подождите...";
"service.alerts.location.message.denied" = "Вам нужно разрешить использование геопозиции для добавления этой Wi-Fi сети в доверенные. Перейдите в настройки iOS, и измените разрешения геолокации для Passepartout.";
"service.alerts.location.button.settings" = "Настройки";
"provider.pool.sections.empty_favorites.footer" = "Свайп в лево на локации, чтобы добавить или убрать из избранного.";
"provider.pool.actions.favorite" = "Добавить в избранное";
"provider.pool.actions.unfavorite" = "Убрать из избранного";
"provider.preset.cells.tech_details.caption" = "Техническая информация";
"account.title" = "Аккаунт";
"account.sections.credentials.header" = "Данные для входа";
"account.sections.guidance.footer.infrastructure.default.web" = "Используйте Ваши данные для входа с веб-сайта %@.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Используйте свои учетные данные %@ service, которые могут отличаться от учетных данных веб-сайта.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Используйте Ваши данные для входа с веб-сайта %@. Ваш логин обычно числовой с (без пробелов).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Зарегистрируйтесь с %@";
"endpoint.title" = "Конечная точка";
"endpoint.sections.location_addresses.header" = "Адреса";
"endpoint.sections.location_protocols.header" = "Протоколы";
"endpoint.cells.address" = "Адрес";
"endpoint.cells.protocol" = "Протокол";
"endpoint.cells.any_address.caption" = "Автоматически";
"endpoint.cells.any_protocol.caption" = "Автоматически";
"network_settings.title" = "Сетевые настройки";
"network_settings.cells.add_dns_server.caption" = "Добавить адрес";
"network_settings.cells.add_dns_domain.caption" = "Добавить домен поиска";
"network_settings.cells.proxy_bypass.caption" = "Обход домена";
"network_settings.cells.add_proxy_bypass.caption" = "Добавить обходной домен";
"configuration.title" = "Конфигурация";
"configuration.sections.communication.header" = "Связь";
"configuration.sections.reset.footer" = "Если после изменения параметров связи у Вас разорвалось соединение, нажмите, чтобы вернуться к исходной конфигурации.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Перезаключение";
"configuration.cells.renegotiation_seconds.value.after" = "после %@";
"configuration.cells.random_endpoint.caption" = "Рандомная конечная точка";
"configuration.alerts.commit.message" = "Новые параметры не вступят в силу до ручного переподключения. Изменения в доверенных сетях вступят в силу сразу.";
"configuration.alerts.commit.buttons.reconnect" = "Переподключиться";
"configuration.alerts.commit.buttons.skip" = "Пропустить";
"trusted.columns.trust.title" = "Доверенные";
"trusted.ethernet.title" = "Доверенные проводные подключения";
"trusted.ethernet.description" = "Включите, чтобы добавить в доверенные проводное подключение.";
"preferences.title" = "Настройки";
"preferences.sections.general.header" = "Общие";
"preferences.cells.launches_on_login.caption" = "Запускать при входе";
"preferences.cells.launches_on_login.footer" = "Включите, чтобы приложение автоматически запускалось при загрузке или входе.";
"preferences.cells.confirm_quit.caption" = "Подтверждать выход";
"preferences.cells.confirm_quit.footer" = "Включите, чтобы выход надо было подтверждать.";
"network_settings.gateway.title" = "Шлюз по умолчанию";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Серверы";
"network_settings.dns.cells.domain.caption" = "Домен";
"network_settings.dns.cells.domains.title" = "Домены";
"network_settings.proxy.title" = "Прокси";
"network_settings.proxy.cells.bypass_domains.title" = "Обходные домены";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "байты";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Предыдущий";
"debug_log.buttons.next" = "Следующий";
"debug_log.buttons.copy" = "Копировать";
"debug_log.alerts.empty_log.message" = "Журнал отладки пуст.";
"shortcuts.add.title" = "Создать команду";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Мобильная сеть";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Не доверять мобильной сети";
"shortcuts.add.alerts.no_profiles.message" = "Нет профиля для подключения.";
"shortcuts.edit.title" = "Управлять командами";
"shortcuts.edit.sections.all.header" = "Существующие команды";
"shortcuts.edit.cells.add_shortcut.caption" = "Создать команду";
"purchase.title" = "Покупка";
"purchase.sections.products.footer" = "Каждый продукт является разовой покупкой. Покупка провайдера не включает подписку на VPN.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Переводы";
"label.license.error" = "Не получается загрузить полную лицензию.";
// iOS only
"imported_hosts.title" = "Импортированные хост профили";
// macOS only
"menu.show.title" = "Показать";
"menu.switch_profile.title" = "Активный профиль";
"menu.active_profile.title.none" = "Нет активных профилей";
"menu.active_profile.items.customize.title" = "Настроить...";
"menu.active_profile.messages.missing_credentials" = "Нет настроенных аккаунтов";
"menu.organizer.title" = "Организатор";
"menu.preferences.title" = "Настройки";
"menu.support.title" = "Поддержка";
"menu.quit.title" = "Выйти из %@";
"menu.quit.messages.confirm" = "Если включить VPN, он всё равно будет работать в фоновом режиме. Вы точно хотите выйти?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "Koppla från";
"vpn.inactive" = "Inaktiv";
"vpn.disabled" = "Inaktiverad";
"vpn.unused" = "Av";
"vpn.errors.timeout" = "Timeout";
"vpn.errors.dns" = "DNS misslyckades";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "Leverantör";
"organizer.menus.provider.unavailable" = "Inga leverantörer kvar";
"organizer.menus.host" = "Värd";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "Kom och se mig göra Passepartout live på Twitch, gå med i chatten för att interagera och bidra!";
"organizer.sections.providers.header" = "Leverantörer";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "Erbjuda att översätta";
"organizer.cells.about.caption" = "Om %@";
"organizer.cells.uninstall.caption" = "Ta bort VPN-konfiguration";
"organizer.cells.add_provider.caption" = "Lägg till ny leverantör";
"organizer.cells.add_host.caption" = "Lägg till från Filer";
"organizer.cells.import_host.caption" = "Lägg till från importerad";
"organizer.alerts.exhausted_providers.message" = "Du har skapat profiler för alla tillgängliga leverantörer.";
"organizer.alerts.add_host.message" = "Öppna en URL till en .ovpn konfigurationsfil från Safari, Mail eller en annan app för att skapa en värdprofil. \n\nDu kan också importera en .ovpn med iTunes Fildelning.";
"organizer.alerts.cannot_donate.message" = "Det finns ingen betalningsmetod konfigurerad på den här enheten.";
"organizer.alerts.delete_vpn_profile.message" = "Vill du verkligen radera VPN-konfigurationen från enhetens inställningar? Detta kan fixa några trasiga VPN tillstånd och påverkar inte dina leverantörs- och värdprofiler.";
"organizer.alerts.remove_profile.title" = "Ta bort profil";
"organizer.alerts.remove_profile.message" = "Är det säkert att du vill ta bort profilen %@?";
"organizer.alerts.open_host_file.title" = "Välj en .ovpn-fil";
"wizards.provider.cells.update_list.caption" = "Uppdatera listan";
"wizards.provider.alerts.unavailable.message" = "Det gick inte att ladda ner leverantörens infrastruktur, försök igen senare.";
"wizards.host.sections.existing.header" = "Befintliga profiler";
"wizards.host.cells.title_input.caption" = "Namn";
"wizards.host.alerts.existing.message" = "En värdprofil med samma namn finns redan. Byt ut det?";
"service.welcome.message" = "Välkommen till Passepartout! \n\nAnvänd arrangören för att lägga till en ny profil.";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "Anslutningen kommer att upprättas vid behov.";
"service.sections.status.header" = "Koppling";
"service.sections.configuration.header" = "Konfiguration";
"service.sections.provider_infrastructure.footer" = "Senast uppdaterad på %@.";
"service.sections.vpn_survives_sleep.footer" = "Inaktivera för att förbättra batterianvändningen, på bekostnad av tillfälliga avmattningar på grund av återuppkoppling.";
"service.sections.vpn_resolves_hostname.footer" = "Föredragna i de flesta nätverk och krävs i vissa IPv6-nätverk. Inaktivera var DNS blockeras eller för att påskynda förhandlingar när DNS är långsamt att svara.";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "Diagnostics";
"service.sections.diagnostics.footer" = "Masking status kommer att fungera efter återanslutning. Nätverksdata är värdnamn, IP-adresser, routing, SSID. Referenser och privata nycklar loggas inte oavsett.";
"service.cells.use_profile.caption" = "Använd den här profilen";
"service.cells.vpn_service.caption" = "Aktiverad";
"service.cells.vpn.turn_on.caption" = "Aktivera VPN";
"service.cells.vpn.turn_off.caption" = "Inaktivera VPN";
"service.cells.connection_status.caption" = "Status";
"service.cells.host.parameters.caption" = "Parametrar";
"service.cells.provider.pool.caption" = "Plats";
"service.cells.provider.preset.caption" = "Förinställt";
"service.cells.provider.refresh.caption" = "Uppdatera infrastruktur";
"service.cells.category.caption" = "Kategori";
"service.cells.addresses.caption" = "Adresser";
"service.cells.only_shows_favorites.caption" = "Visa endast favoritplatser";
"service.cells.vpn_survives_sleep.caption" = "Håll dig levande i sömnen";
"service.cells.vpn_resolves_hostname.caption" = "Lösa server värdnamn";
"service.cells.trusted_add_wifi.caption" = "Lägg till Wi-Fi";
"service.cells.trusted_mobile.caption" = "Mobilt nätverk";
"service.cells.trusted_policy.caption" = "Förtroende inaktiverar VPN";
"service.cells.test_connectivity.caption" = "Testanslutning";
@ -159,8 +185,17 @@
"service.alerts.download.message" = "%@ kräver nedladdning av ytterligare konfigurationsfiler. \n\nKontrollera för att starta nedladdningen.";
"service.alerts.download.failed" = "Misslyckades med att ladda ner konfigurationsfiler. %@";
"service.alerts.download.hud.extracting" = "Extraherar filer, var så tålmodig ...";
"service.alerts.location.message.denied" = "Du måste tillåta lägetillgång för att förlita detta nätverk. Öppna iOS inställningar och se över tillstånd för Passepartout.";
"service.alerts.location.button.settings" = "Inställningar";
"provider.pool.sections.empty_favorites.footer" = "Dra åt vänster på en plats för att lägga till eller ta bort den från favoriter.";
"provider.pool.actions.favorite" = "Favorit";
"provider.pool.actions.unfavorite" = "Inte favorit";
"provider.preset.cells.tech_details.caption" = "Tekniska detaljer";
"account.title" = "Konto";
"account.sections.credentials.header" = "Referenser";
"account.sections.guidance.footer.infrastructure.default.web" = "Använd dina %@ webbplatsuppgifter.";
"account.sections.guidance.footer.infrastructure.default.specific" = "Använd dina %@ service-referenser, som kan skilja sig från webbplatsens referenser.";
"account.sections.guidance.footer.infrastructure.mullvad" = "Använd dina %@ webbplatsuppgifter. Ditt användarnamn är vanligtvis numeriskt (utan utrymmen).";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "Registrera med %@";
"endpoint.title" = "Slutpunkt";
"endpoint.sections.location_addresses.header" = "Adresser";
"endpoint.sections.location_protocols.header" = "Protokoll";
"endpoint.cells.address" = "Adress";
"endpoint.cells.protocol" = "Protokoll";
"endpoint.cells.any_address.caption" = "Automatiskt";
"endpoint.cells.any_protocol.caption" = "Automatiskt";
"network_settings.title" = "Nätverksinställningar";
"network_settings.cells.add_dns_server.caption" = "Lägg till adress";
"network_settings.cells.add_dns_domain.caption" = "Lägg till domän";
"network_settings.cells.proxy_bypass.caption" = "Bypass-domän";
"network_settings.cells.add_proxy_bypass.caption" = "Add bypass domain";
"configuration.title" = "Konfiguration";
"configuration.sections.communication.header" = "Communication";
"configuration.sections.reset.footer" = "Om du slutade med bruten anslutning efter att ha ändrat kommunikationsparametrarna trycker du på för att återgå till den ursprungliga konfigurationen.";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "Omförhandling";
"configuration.cells.renegotiation_seconds.value.after" = "efter %@";
"configuration.cells.random_endpoint.caption" = "Omställ slutpunkt på slumpmässigt sätt";
"configuration.alerts.commit.message" = "Nya parametrar kommer inte att införas förrän du återansluter manuellt. Ändringar i betrodda nätverk kommer att införas omedelbart.";
"configuration.alerts.commit.buttons.reconnect" = "Återanslut nu";
"configuration.alerts.commit.buttons.skip" = "Hoppa över";
"trusted.columns.trust.title" = "Betrodda";
"trusted.ethernet.title" = "Lita på kabelanslutna uppkopplingar";
"trusted.ethernet.description" = "Markera för att lita på alla kabelanslutna uppkopplingar.";
"preferences.title" = "Inställningar";
"preferences.sections.general.header" = "Allmänt";
"preferences.cells.launches_on_login.caption" = "Öppna vid inloggning";
"preferences.cells.launches_on_login.footer" = "Markera för att starta appen automatiskt efter omstart eller vid inloggning.";
"preferences.cells.confirm_quit.caption" = "Bekräfta lämna";
"preferences.cells.confirm_quit.footer" = "Markera för att visa en uppmaning att bekräfta att man vill lämna appen.";
"network_settings.gateway.title" = "Normal gateway";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "Servrar";
"network_settings.dns.cells.domain.caption" = "Domain";
"network_settings.dns.cells.domains.title" = "Domäner";
"network_settings.proxy.title" = "Proxy";
"network_settings.proxy.cells.bypass_domains.title" = "Kringgå domäner";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "Previous";
"debug_log.buttons.next" = "Next";
"debug_log.buttons.copy" = "Kopiera";
"debug_log.alerts.empty_log.message" = "Felsökningsloggen är tom.";
"shortcuts.add.title" = "Lägg till genväg";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "Cellular";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "Untrust cellular network";
"shortcuts.add.alerts.no_profiles.message" = "Det finns ingen profil att ansluta till.";
"shortcuts.edit.title" = "Hantera genvägar";
"shortcuts.edit.sections.all.header" = "Befintliga genvägar";
"shortcuts.edit.cells.add_shortcut.caption" = "Lägg till genväg";
"purchase.title" = "Köp";
"purchase.sections.products.footer" = "Varje produkt är ett engångsköp. Leverantörsköp inkluderar inte ett VPN-abonnemang.";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "Translations";
"label.license.error" = "Kan inte ladda ner fullständigt licensinnehåll.";
// iOS only
"imported_hosts.title" = "Importerade värdar";
// macOS only
"menu.show.title" = "Visa";
"menu.switch_profile.title" = "Aktiv profil";
"menu.active_profile.title.none" = "Ingen aktiv profil";
"menu.active_profile.items.customize.title" = "Anpassa";
"menu.active_profile.messages.missing_credentials" = "Inget konto har konfigurerats";
"menu.organizer.title" = "Organisatör";
"menu.preferences.title" = "Inställningar";
"menu.support.title" = "Support";
"menu.quit.title" = "Lämna %@";
"menu.quit.messages.confirm" = "Om ett VPN är aktiverat kommer detta fortfarande att köra i bakgrunden. Vill du lämna?";

View File

@ -53,6 +53,7 @@
"vpn.disconnecting" = "断开中";
"vpn.inactive" = "不活动";
"vpn.disabled" = "未启用";
"vpn.unused" = "关";
"vpn.errors.timeout" = "超时";
"vpn.errors.dns" = "DNS解析失败";
@ -87,6 +88,11 @@
// ////////////////////
"organizer.title" = "%@";
"organizer.menus.provider" = "提供商";
"organizer.menus.provider.unavailable" = "没有提供商了";
"organizer.menus.host" = "主机";
/* //////////////////// */
"organizer.sections.twitch.header" = "Twitch";
"organizer.sections.twitch.footer" = "快来看我让Passepartout在Twitch上直播加入聊天互动并做出贡献";
"organizer.sections.providers.header" = "提供商";
@ -107,17 +113,28 @@
"organizer.cells.translate.caption" = "提供翻译";
"organizer.cells.about.caption" = "关于 %@";
"organizer.cells.uninstall.caption" = "移除VPN配置";
"organizer.cells.add_provider.caption" = "添加新的提供商配置";
"organizer.cells.add_host.caption" = "从文件添加";
"organizer.cells.import_host.caption" = "从导入中添加";
"organizer.alerts.exhausted_providers.message" = "你已针对每个可用的提供商创建了配置。";
"organizer.alerts.add_host.message" = "从Safari、邮件或其他App中打开.ovpn文件的URL来设置主机配置。\n\n你同样可以通过iTunes文件分享来导入.ovpnf文件。";
"organizer.alerts.cannot_donate.message" = "此设备未设置付款方式。";
"organizer.alerts.delete_vpn_profile.message" = "你确定要从此设备移除VPN配置吗这可能会固定一些断开的VPN状态不会影响已经存在的配置。";
"organizer.alerts.remove_profile.title" = "删除配置";
"organizer.alerts.remove_profile.message" = "确定要删除配置%@吗?";
"organizer.alerts.open_host_file.title" = "选择.ovpn文件";
"wizards.provider.cells.update_list.caption" = "更新列表";
"wizards.provider.alerts.unavailable.message" = "无法下载提供商基础架构,请稍后重试。";
"wizards.host.sections.existing.header" = "已存在的配置";
"wizards.host.cells.title_input.caption" = "名称";
"wizards.host.alerts.existing.message" = "已经存在同名的配置。要替换它吗?";
"service.welcome.message" = "欢迎使用Passepartout!\n\n使用分类页面来添加一个新的配置。";
"service.sections.vpn.header" = "VPN";
"service.sections.vpn.footer" = "必要时连接将会建立。";
"service.sections.status.header" = "连接";
"service.sections.configuration.header" = "配置";
"service.sections.provider_infrastructure.footer" = "最后在%@时更新";
"service.sections.vpn_survives_sleep.footer" = "禁用以减少电池消耗,由于存在可能的唤醒时重连消耗。";
"service.sections.vpn_resolves_hostname.footer" = "推荐在大部分的网络中打开并要求在IPv6环境下。当DNS被阻断或相应缓慢时禁用。";
@ -126,11 +143,20 @@
"service.sections.diagnostics.header" = "分析数据";
"service.sections.diagnostics.footer" = "在重连后状态隐藏才有效。网络数据包括主机名、IP地址、路由、SSID、认证方式但私钥不会出现在日志中。";
"service.cells.use_profile.caption" = "使用此配置";
"service.cells.vpn_service.caption" = "已启用";
"service.cells.vpn.turn_on.caption" = "启用VPN";
"service.cells.vpn.turn_off.caption" = "禁用VPN";
"service.cells.connection_status.caption" = "状态";
"service.cells.host.parameters.caption" = "参数";
"service.cells.provider.pool.caption" = "位置";
"service.cells.provider.preset.caption" = "预设";
"service.cells.provider.refresh.caption" = "刷新基础设置";
"service.cells.category.caption" = "类别";
"service.cells.addresses.caption" = "地址";
"service.cells.only_shows_favorites.caption" = "仅显示收藏的地点";
"service.cells.vpn_survives_sleep.caption" = "休眠时保持连接";
"service.cells.vpn_resolves_hostname.caption" = "解析服务器主机名";
"service.cells.trusted_add_wifi.caption" = "新增Wi-Fi";
"service.cells.trusted_mobile.caption" = "蜂窝网络";
"service.cells.trusted_policy.caption" = "信任网络中禁用VPN";
"service.cells.test_connectivity.caption" = "测试连接性";
@ -159,10 +185,19 @@
"service.alerts.download.message" = "%@要求下载额外的配置文件。\n\n确认以开始下载。";
"service.alerts.download.failed" = "下载配置文件失败。 %@";
"service.alerts.download.hud.extracting" = "提取文件中,请等待...";
"service.alerts.location.message.denied" = "你必须允许位置访问以信任此Wi-Fi。请至iOS设置对Passepartout的位置权限。";
"service.alerts.location.button.settings" = "设置";
"provider.pool.sections.empty_favorites.footer" = "向左轻扫以将其从最喜爱列表中移除或添加。";
"provider.pool.actions.favorite" = "最喜爱";
"provider.pool.actions.unfavorite" = "不喜爱";
"provider.preset.cells.tech_details.caption" = "技术细节";
"account.title" = "账户";
"account.sections.credentials.header" = "认证方式";
"account.sections.guidance.footer.infrastructure.default.web" = "使用你的%@网站认证信息。";
"account.sections.guidance.footer.infrastructure.default.specific" = "使用您的%@服务凭据,该凭据可能与网站凭据不同。";
"account.sections.guidance.footer.infrastructure.default.specific" = "使用您的%@服务凭据,该凭据可能与网站凭据不同。";
"account.sections.guidance.footer.infrastructure.mullvad" = "使用你的%@网站认证信息。你的用户名一般是数字 (没有空格)。";
"account.sections.guidance.footer.infrastructure.nordvpn" = "使用你的%@网站认证信息。你的用户名一般是你的e-mail。";
"account.sections.guidance.footer.infrastructure.pia" = "使用你的%@网站认证信息。你的用户名一般是数字且带有前缀\"p\"。";
@ -179,11 +214,20 @@
"account.cells.signup.caption" = "以%@注册";
"endpoint.title" = "服务端";
"endpoint.sections.location_addresses.header" = "地址";
"endpoint.sections.location_protocols.header" = "协议";
"endpoint.cells.address" = "地址";
"endpoint.cells.protocol" = "协议";
"endpoint.cells.any_address.caption" = "自动";
"endpoint.cells.any_protocol.caption" = "自动";
"network_settings.title" = "网络设置";
"network_settings.cells.add_dns_server.caption" = "添加地址";
"network_settings.cells.add_dns_domain.caption" = "添加搜索域名";
"network_settings.cells.proxy_bypass.caption" = "旁路域名";
"network_settings.cells.add_proxy_bypass.caption" = "添加旁路域名";
"configuration.title" = "配置";
"configuration.sections.communication.header" = "通信";
"configuration.sections.reset.footer" = "如果你在更改连接参数后变成断开状态,点按已恢复到原始的配置。";
"configuration.sections.tls.header" = "TLS";
@ -212,11 +256,28 @@
"configuration.cells.renegotiation_seconds.caption" = "重协商";
"configuration.cells.renegotiation_seconds.value.after" = "在%@之后";
"configuration.cells.random_endpoint.caption" = "随机的服务端";
"configuration.alerts.commit.message" = "除非手动重新连接,否则新参数将无效。受信任的网络中的更改将立即生效。";
"configuration.alerts.commit.buttons.reconnect" = "立即重新连接";
"configuration.alerts.commit.buttons.skip" = "跳过";
"trusted.columns.trust.title" = "信任";
"trusted.ethernet.title" = "信任有线连接";
"trusted.ethernet.description" = "选中以信任所有有线连接。";
"preferences.title" = "偏好设置";
"preferences.sections.general.header" = "一般";
"preferences.cells.launches_on_login.caption" = "登录时启动";
"preferences.cells.launches_on_login.footer" = "选中以在启动或登录时自动启动应用。";
"preferences.cells.confirm_quit.caption" = "确认退出";
"preferences.cells.confirm_quit.footer" = "选中以显示退出确认提醒。";
"network_settings.gateway.title" = "默认网关";
"network_settings.dns.title" = "DNS";
"network_settings.dns.cells.addresses.title" = "服务器";
"network_settings.dns.cells.domain.caption" = "域名";
"network_settings.dns.cells.domains.title" = "域";
"network_settings.proxy.title" = "代理";
"network_settings.proxy.cells.bypass_domains.title" = "旁路域";
"network_settings.mtu.title" = "MTU";
"network_settings.mtu.cells.bytes.caption" = "Bytes";
@ -224,8 +285,10 @@
"debug_log.buttons.previous" = "上一步";
"debug_log.buttons.next" = "下一步";
"debug_log.buttons.copy" = "复制";
"debug_log.alerts.empty_log.message" = "日志为空";
"shortcuts.add.title" = "添加捷径";
"shortcuts.add.sections.vpn.header" = "VPN";
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
"shortcuts.add.sections.cellular.header" = "蜂窝网络";
@ -238,7 +301,9 @@
"shortcuts.add.cells.untrust_cellular.caption" = "不信任蜂窝网络";
"shortcuts.add.alerts.no_profiles.message" = "没有可以连接的配置。";
"shortcuts.edit.title" = "管理捷径";
"shortcuts.edit.sections.all.header" = "已经存在的捷径";
"shortcuts.edit.cells.add_shortcut.caption" = "添加捷径";
"purchase.title" = "购买";
"purchase.sections.products.footer" = "每件产品都是一次性的购买。 购买的提供商并不包含VPN订阅。";
@ -275,3 +340,20 @@
"credits.sections.translations.header" = "翻译";
"label.license.error" = "不能下载到完整的许可证内容。";
// iOS only
"imported_hosts.title" = "导入主机配置";
// macOS only
"menu.show.title" = "显示";
"menu.switch_profile.title" = "有效配置";
"menu.active_profile.title.none" = "无有效配置";
"menu.active_profile.items.customize.title" = "自定义......";
"menu.active_profile.messages.missing_credentials" = "未配置账户";
"menu.organizer.title" = "分类页面";
"menu.preferences.title" = "偏好设置";
"menu.support.title" = "支持";
"menu.quit.title" = "退出%@";
"menu.quit.messages.confirm" = "VPN如果启用仍将在后台运行。您要退出吗";

View File

@ -1,7 +1,6 @@
#!/bin/sh
SRC="$1"
DST="$2"
for LANG in "de" "el" "en" "es" "fr" "it" "nl" "pl" "ru" "sv" "zh-Hans"; do
cp $SRC/$LANG/* $DST/$LANG.lproj/*
for LANG in "de" "el" "en" "es" "fr" "it" "nl" "pl" "pt" "ru" "sv" "zh-Hans"; do
cp $SRC/$LANG/* $DST/$LANG.lproj
done
cp $SRC/pt-PT/* $DST/pt.lproj/*