Merge branch 'merge-strings'
This commit is contained in:
commit
3ce6678f51
|
@ -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 = (
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
@ -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:
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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";
|
|
@ -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" = "Προσθήκη Συντόμευσης";
|
|
@ -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";
|
|
@ -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";
|
|
@ -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";
|
|
@ -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";
|
|
@ -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";
|
|
@ -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";
|
|
@ -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";
|
|
@ -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" = "Создать команду";
|
|
@ -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";
|
|
@ -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
|
||||
|
|
|
@ -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" = "添加捷径";
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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?")
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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 ?? ""
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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([
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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([
|
||||
|
|
|
@ -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() ?? ""
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?";
|
||||
|
|
@ -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, αν είναι ενεργοποιημένο, θα εξακολουθεί να εκτελείται στο παρασκήνιο. Θέλετε να το διακόψετε;";
|
||||
|
|
@ -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?";
|
|
@ -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?";
|
||||
|
|
@ -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 ?";
|
||||
|
|
@ -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?";
|
||||
|
|
@ -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?";
|
||||
|
|
@ -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ć?";
|
||||
|
|
@ -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?";
|
||||
|
|
@ -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, он всё равно будет работать в фоновом режиме. Вы точно хотите выйти?";
|
||||
|
|
@ -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?";
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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(如果启用)仍将在后台运行。您要退出吗?";
|
||||
|
|
@ -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?";
|
||||
|
|
|
@ -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, αν είναι ενεργοποιημένο, θα εξακολουθεί να εκτελείται στο παρασκήνιο. Θέλετε να το διακόψετε;";
|
||||
|
|
|
@ -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?";
|
||||
|
|
|
@ -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?";
|
||||
|
|
|
@ -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 ?";
|
||||
|
|
|
@ -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?";
|
||||
|
|
|
@ -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?";
|
||||
|
|
|
@ -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ć?";
|
||||
|
|
|
@ -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?";
|
||||
|
|
|
@ -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, он всё равно будет работать в фоновом режиме. Вы точно хотите выйти?";
|
||||
|
|
|
@ -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?";
|
||||
|
|
|
@ -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(如果启用)仍将在后台运行。您要退出吗?";
|
||||
|
|
|
@ -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/*
|
||||
|
|
Loading…
Reference in New Issue