Merge macOS strings into Core
This commit is contained in:
parent
cda9bdcc3f
commit
23c497968f
|
@ -90,8 +90,8 @@ 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.Core.Menu.Quit.title(GroupConstants.App.name),
|
||||
L10n.Core.Menu.Quit.Messages.confirm
|
||||
)
|
||||
switch alert.presentModallyEx(withOK: L10n.Core.Global.ok, other1: L10n.Core.Global.cancel, other2: L10n.Core.Reddit.Buttons.never) {
|
||||
case .alertSecondButtonReturn:
|
||||
|
|
|
@ -11,204 +11,6 @@ import Foundation
|
|||
// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
|
||||
internal enum L10n {
|
||||
internal enum App {
|
||||
internal enum Configuration {
|
||||
/// Configuration
|
||||
internal static let title = L10n.tr("App", "configuration.title")
|
||||
internal enum Alerts {
|
||||
internal enum Commit {
|
||||
/// New parameters will not be effective until you reconnect manually. Changes in trusted networks will apply immediately.
|
||||
internal static let message = L10n.tr("App", "configuration.alerts.commit.message")
|
||||
internal enum Buttons {
|
||||
/// Reconnect now
|
||||
internal static let reconnect = L10n.tr("App", "configuration.alerts.commit.buttons.reconnect")
|
||||
/// Skip
|
||||
internal static let skip = L10n.tr("App", "configuration.alerts.commit.buttons.skip")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum DebugLog {
|
||||
internal enum Buttons {
|
||||
/// Copy
|
||||
internal static let copy = L10n.tr("App", "debug_log.buttons.copy")
|
||||
}
|
||||
}
|
||||
internal enum Endpoint {
|
||||
internal enum Cells {
|
||||
/// Address
|
||||
internal static let address = L10n.tr("App", "endpoint.cells.address")
|
||||
/// Protocol
|
||||
internal static let `protocol` = L10n.tr("App", "endpoint.cells.protocol")
|
||||
}
|
||||
}
|
||||
internal enum Menu {
|
||||
internal enum ActiveProfile {
|
||||
internal enum Items {
|
||||
internal enum Customize {
|
||||
/// Customize...
|
||||
internal static let title = L10n.tr("App", "menu.active_profile.items.customize.title")
|
||||
}
|
||||
}
|
||||
internal enum Messages {
|
||||
/// No account configured
|
||||
internal static let missingCredentials = L10n.tr("App", "menu.active_profile.messages.missing_credentials")
|
||||
}
|
||||
internal enum Title {
|
||||
/// No active profile
|
||||
internal static let `none` = L10n.tr("App", "menu.active_profile.title.none")
|
||||
}
|
||||
}
|
||||
internal enum Organizer {
|
||||
/// Organizer
|
||||
internal static let title = L10n.tr("App", "menu.organizer.title")
|
||||
}
|
||||
internal enum Preferences {
|
||||
/// Preferences
|
||||
internal static let title = L10n.tr("App", "menu.preferences.title")
|
||||
}
|
||||
internal enum Quit {
|
||||
/// Quit %@
|
||||
internal static func title(_ p1: Any) -> String {
|
||||
return L10n.tr("App", "menu.quit.title", String(describing: p1))
|
||||
}
|
||||
internal enum Messages {
|
||||
/// The VPN, if enabled, will still run in the background. Do you want to quit?
|
||||
internal static let confirm = L10n.tr("App", "menu.quit.messages.confirm")
|
||||
}
|
||||
}
|
||||
internal enum Show {
|
||||
/// Show
|
||||
internal static let title = L10n.tr("App", "menu.show.title")
|
||||
}
|
||||
internal enum Support {
|
||||
/// Support
|
||||
internal static let title = L10n.tr("App", "menu.support.title")
|
||||
}
|
||||
internal enum SwitchProfile {
|
||||
/// Active profile
|
||||
internal static let title = L10n.tr("App", "menu.switch_profile.title")
|
||||
}
|
||||
}
|
||||
internal enum NetworkSettings {
|
||||
internal enum Dns {
|
||||
internal enum Cells {
|
||||
internal enum Addresses {
|
||||
/// Servers
|
||||
internal static let title = L10n.tr("App", "network_settings.dns.cells.addresses.title")
|
||||
}
|
||||
internal enum Domains {
|
||||
/// Domains
|
||||
internal static let title = L10n.tr("App", "network_settings.dns.cells.domains.title")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Proxy {
|
||||
internal enum Cells {
|
||||
internal enum BypassDomains {
|
||||
/// Bypass domains
|
||||
internal static let title = L10n.tr("App", "network_settings.proxy.cells.bypass_domains.title")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Organizer {
|
||||
/// %@
|
||||
internal static func title(_ p1: Any) -> String {
|
||||
return L10n.tr("App", "organizer.title", String(describing: p1))
|
||||
}
|
||||
internal enum Alerts {
|
||||
internal enum OpenHostFile {
|
||||
/// Select an .ovpn file
|
||||
internal static let title = L10n.tr("App", "organizer.alerts.open_host_file.title")
|
||||
}
|
||||
internal enum RemoveProfile {
|
||||
/// Are you sure you want to delete profile %@?
|
||||
internal static func message(_ p1: Any) -> String {
|
||||
return L10n.tr("App", "organizer.alerts.remove_profile.message", String(describing: p1))
|
||||
}
|
||||
/// Remove profile
|
||||
internal static let title = L10n.tr("App", "organizer.alerts.remove_profile.title")
|
||||
}
|
||||
}
|
||||
internal enum Menus {
|
||||
/// Host
|
||||
internal static let host = L10n.tr("App", "organizer.menus.host")
|
||||
/// Provider
|
||||
internal static let provider = L10n.tr("App", "organizer.menus.provider")
|
||||
internal enum Provider {
|
||||
/// No providers left
|
||||
internal static let unavailable = L10n.tr("App", "organizer.menus.provider.unavailable")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Preferences {
|
||||
/// Preferences
|
||||
internal static let title = L10n.tr("App", "preferences.title")
|
||||
internal enum Cells {
|
||||
internal enum ConfirmQuit {
|
||||
/// Confirm quit
|
||||
internal static let caption = L10n.tr("App", "preferences.cells.confirm_quit.caption")
|
||||
/// Check to present a quit confirmation alert.
|
||||
internal static let footer = L10n.tr("App", "preferences.cells.confirm_quit.footer")
|
||||
}
|
||||
internal enum LaunchesOnLogin {
|
||||
/// Launch on login
|
||||
internal static let caption = L10n.tr("App", "preferences.cells.launches_on_login.caption")
|
||||
/// Check to automatically launch the app on boot or login.
|
||||
internal static let footer = L10n.tr("App", "preferences.cells.launches_on_login.footer")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum General {
|
||||
/// General
|
||||
internal static let header = L10n.tr("App", "preferences.sections.general.header")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Service {
|
||||
internal enum Cells {
|
||||
internal enum Addresses {
|
||||
/// Addresses
|
||||
internal static let caption = L10n.tr("App", "service.cells.addresses.caption")
|
||||
}
|
||||
internal enum Category {
|
||||
/// Category
|
||||
internal static let caption = L10n.tr("App", "service.cells.category.caption")
|
||||
}
|
||||
internal enum OnlyShowsFavorites {
|
||||
/// Only show favorite locations
|
||||
internal static let caption = L10n.tr("App", "service.cells.only_shows_favorites.caption")
|
||||
}
|
||||
internal enum Vpn {
|
||||
internal enum TurnOff {
|
||||
/// Disable VPN
|
||||
internal static let caption = L10n.tr("App", "service.cells.vpn.turn_off.caption")
|
||||
}
|
||||
internal enum TurnOn {
|
||||
/// Enable VPN
|
||||
internal static let caption = L10n.tr("App", "service.cells.vpn.turn_on.caption")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Trusted {
|
||||
internal enum Columns {
|
||||
internal enum Trust {
|
||||
/// Trust
|
||||
internal static let title = L10n.tr("App", "trusted.columns.trust.title")
|
||||
}
|
||||
}
|
||||
internal enum Ethernet {
|
||||
/// Check to trust any wired cable connection.
|
||||
internal static let description = L10n.tr("App", "trusted.ethernet.description")
|
||||
/// Trust wired connections
|
||||
internal static let title = L10n.tr("App", "trusted.ethernet.title")
|
||||
}
|
||||
}
|
||||
internal enum Vpn {
|
||||
/// Off
|
||||
internal static let unused = L10n.tr("App", "vpn.unused")
|
||||
}
|
||||
}
|
||||
internal enum Core {
|
||||
internal enum About {
|
||||
|
@ -283,6 +85,10 @@ internal enum L10n {
|
|||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum Credentials {
|
||||
/// Credentials
|
||||
internal static let header = L10n.tr("Core", "account.sections.credentials.header")
|
||||
}
|
||||
internal enum Guidance {
|
||||
internal enum Footer {
|
||||
internal enum Infrastructure {
|
||||
|
@ -336,6 +142,20 @@ internal enum L10n {
|
|||
}
|
||||
}
|
||||
internal enum Configuration {
|
||||
/// Configuration
|
||||
internal static let title = L10n.tr("Core", "configuration.title")
|
||||
internal enum Alerts {
|
||||
internal enum Commit {
|
||||
/// New parameters will not be effective until you reconnect manually. Changes in trusted networks will apply immediately.
|
||||
internal static let message = L10n.tr("Core", "configuration.alerts.commit.message")
|
||||
internal enum Buttons {
|
||||
/// Reconnect now
|
||||
internal static let reconnect = L10n.tr("Core", "configuration.alerts.commit.buttons.reconnect")
|
||||
/// Skip
|
||||
internal static let skip = L10n.tr("Core", "configuration.alerts.commit.buttons.skip")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Cells {
|
||||
internal enum Cipher {
|
||||
/// Cipher
|
||||
|
@ -475,6 +295,8 @@ internal enum L10n {
|
|||
}
|
||||
}
|
||||
internal enum Buttons {
|
||||
/// Copy
|
||||
internal static let copy = L10n.tr("Core", "debug_log.buttons.copy")
|
||||
/// Next
|
||||
internal static let next = L10n.tr("Core", "debug_log.buttons.next")
|
||||
/// Previous
|
||||
|
@ -523,6 +345,10 @@ internal enum L10n {
|
|||
/// Endpoint
|
||||
internal static let title = L10n.tr("Core", "endpoint.title")
|
||||
internal enum Cells {
|
||||
/// Address
|
||||
internal static let address = L10n.tr("Core", "endpoint.cells.address")
|
||||
/// Protocol
|
||||
internal static let `protocol` = L10n.tr("Core", "endpoint.cells.protocol")
|
||||
internal enum AnyAddress {
|
||||
/// Automatic
|
||||
internal static let caption = L10n.tr("Core", "endpoint.cells.any_address.caption")
|
||||
|
@ -532,6 +358,16 @@ internal enum L10n {
|
|||
internal static let caption = L10n.tr("Core", "endpoint.cells.any_protocol.caption")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum LocationAddresses {
|
||||
/// Addresses
|
||||
internal static let header = L10n.tr("Core", "endpoint.sections.location_addresses.header")
|
||||
}
|
||||
internal enum LocationProtocols {
|
||||
/// Protocols
|
||||
internal static let header = L10n.tr("Core", "endpoint.sections.location_protocols.header")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Global {
|
||||
/// Cancel
|
||||
|
@ -575,6 +411,10 @@ internal enum L10n {
|
|||
internal static let `none` = L10n.tr("Core", "global.values.none")
|
||||
}
|
||||
}
|
||||
internal enum ImportedHosts {
|
||||
/// Imported hosts
|
||||
internal static let title = L10n.tr("Core", "imported_hosts.title")
|
||||
}
|
||||
internal enum IssueReporter {
|
||||
/// The debug log of your latest connections is crucial to resolve your connectivity issues and is completely anonymous.\n\nThe .ovpn configuration file, if any, is attached stripped of any sensitive data.\n\nPlease double check the e-mail attachments if unsure.
|
||||
internal static let message = L10n.tr("Core", "issue_reporter.message")
|
||||
|
@ -591,6 +431,54 @@ internal enum L10n {
|
|||
internal static let error = L10n.tr("Core", "label.license.error")
|
||||
}
|
||||
}
|
||||
internal enum Menu {
|
||||
internal enum ActiveProfile {
|
||||
internal enum Items {
|
||||
internal enum Customize {
|
||||
/// Customize...
|
||||
internal static let title = L10n.tr("Core", "menu.active_profile.items.customize.title")
|
||||
}
|
||||
}
|
||||
internal enum Messages {
|
||||
/// No account configured
|
||||
internal static let missingCredentials = L10n.tr("Core", "menu.active_profile.messages.missing_credentials")
|
||||
}
|
||||
internal enum Title {
|
||||
/// No active profile
|
||||
internal static let `none` = L10n.tr("Core", "menu.active_profile.title.none")
|
||||
}
|
||||
}
|
||||
internal enum Organizer {
|
||||
/// Organizer
|
||||
internal static let title = L10n.tr("Core", "menu.organizer.title")
|
||||
}
|
||||
internal enum Preferences {
|
||||
/// Preferences
|
||||
internal static let title = L10n.tr("Core", "menu.preferences.title")
|
||||
}
|
||||
internal enum Quit {
|
||||
/// Quit %@
|
||||
internal static func title(_ p1: Any) -> String {
|
||||
return L10n.tr("Core", "menu.quit.title", String(describing: p1))
|
||||
}
|
||||
internal enum Messages {
|
||||
/// The VPN, if enabled, will still run in the background. Do you want to quit?
|
||||
internal static let confirm = L10n.tr("Core", "menu.quit.messages.confirm")
|
||||
}
|
||||
}
|
||||
internal enum Show {
|
||||
/// Show
|
||||
internal static let title = L10n.tr("Core", "menu.show.title")
|
||||
}
|
||||
internal enum Support {
|
||||
/// Support
|
||||
internal static let title = L10n.tr("Core", "menu.support.title")
|
||||
}
|
||||
internal enum SwitchProfile {
|
||||
/// Active profile
|
||||
internal static let title = L10n.tr("Core", "menu.switch_profile.title")
|
||||
}
|
||||
}
|
||||
internal enum NetworkChoice {
|
||||
/// Read .ovpn
|
||||
internal static let client = L10n.tr("Core", "network_choice.client")
|
||||
|
@ -600,14 +488,40 @@ internal enum L10n {
|
|||
internal enum NetworkSettings {
|
||||
/// Network settings
|
||||
internal static let title = L10n.tr("Core", "network_settings.title")
|
||||
internal enum Cells {
|
||||
internal enum AddDnsDomain {
|
||||
/// Add search domain
|
||||
internal static let caption = L10n.tr("Core", "network_settings.cells.add_dns_domain.caption")
|
||||
}
|
||||
internal enum AddDnsServer {
|
||||
/// Add address
|
||||
internal static let caption = L10n.tr("Core", "network_settings.cells.add_dns_server.caption")
|
||||
}
|
||||
internal enum AddProxyBypass {
|
||||
/// Add bypass domain
|
||||
internal static let caption = L10n.tr("Core", "network_settings.cells.add_proxy_bypass.caption")
|
||||
}
|
||||
internal enum ProxyBypass {
|
||||
/// Bypass domain
|
||||
internal static let caption = L10n.tr("Core", "network_settings.cells.proxy_bypass.caption")
|
||||
}
|
||||
}
|
||||
internal enum Dns {
|
||||
/// DNS
|
||||
internal static let title = L10n.tr("Core", "network_settings.dns.title")
|
||||
internal enum Cells {
|
||||
internal enum Addresses {
|
||||
/// Servers
|
||||
internal static let title = L10n.tr("Core", "network_settings.dns.cells.addresses.title")
|
||||
}
|
||||
internal enum Domain {
|
||||
/// Domain
|
||||
internal static let caption = L10n.tr("Core", "network_settings.dns.cells.domain.caption")
|
||||
}
|
||||
internal enum Domains {
|
||||
/// Domains
|
||||
internal static let title = L10n.tr("Core", "network_settings.dns.cells.domains.title")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Gateway {
|
||||
|
@ -627,9 +541,19 @@ internal enum L10n {
|
|||
internal enum Proxy {
|
||||
/// Proxy
|
||||
internal static let title = L10n.tr("Core", "network_settings.proxy.title")
|
||||
internal enum Cells {
|
||||
internal enum BypassDomains {
|
||||
/// Bypass domains
|
||||
internal static let title = L10n.tr("Core", "network_settings.proxy.cells.bypass_domains.title")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Organizer {
|
||||
/// %@
|
||||
internal static func title(_ p1: Any) -> String {
|
||||
return L10n.tr("Core", "organizer.title", String(describing: p1))
|
||||
}
|
||||
internal enum Alerts {
|
||||
internal enum AddHost {
|
||||
/// 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.
|
||||
|
@ -647,6 +571,18 @@ internal enum L10n {
|
|||
/// You have created profiles for any available provider.
|
||||
internal static let message = L10n.tr("Core", "organizer.alerts.exhausted_providers.message")
|
||||
}
|
||||
internal enum OpenHostFile {
|
||||
/// Select an .ovpn file
|
||||
internal static let title = L10n.tr("Core", "organizer.alerts.open_host_file.title")
|
||||
}
|
||||
internal enum RemoveProfile {
|
||||
/// Are you sure you want to delete profile %@?
|
||||
internal static func message(_ p1: Any) -> String {
|
||||
return L10n.tr("Core", "organizer.alerts.remove_profile.message", String(describing: p1))
|
||||
}
|
||||
/// Remove profile
|
||||
internal static let title = L10n.tr("Core", "organizer.alerts.remove_profile.title")
|
||||
}
|
||||
}
|
||||
internal enum Cells {
|
||||
internal enum About {
|
||||
|
@ -655,6 +591,14 @@ internal enum L10n {
|
|||
return L10n.tr("Core", "organizer.cells.about.caption", String(describing: p1))
|
||||
}
|
||||
}
|
||||
internal enum AddHost {
|
||||
/// Add from Files
|
||||
internal static let caption = L10n.tr("Core", "organizer.cells.add_host.caption")
|
||||
}
|
||||
internal enum AddProvider {
|
||||
/// Add new provider
|
||||
internal static let caption = L10n.tr("Core", "organizer.cells.add_provider.caption")
|
||||
}
|
||||
internal enum Donate {
|
||||
/// Make a donation
|
||||
internal static let caption = L10n.tr("Core", "organizer.cells.donate.caption")
|
||||
|
@ -667,6 +611,10 @@ internal enum L10n {
|
|||
/// Support me on GitHub
|
||||
internal static let caption = L10n.tr("Core", "organizer.cells.github_sponsors.caption")
|
||||
}
|
||||
internal enum ImportHost {
|
||||
/// Add from imported
|
||||
internal static let caption = L10n.tr("Core", "organizer.cells.import_host.caption")
|
||||
}
|
||||
internal enum JoinCommunity {
|
||||
/// Join community
|
||||
internal static let caption = L10n.tr("Core", "organizer.cells.join_community.caption")
|
||||
|
@ -694,6 +642,16 @@ internal enum L10n {
|
|||
internal static let caption = L10n.tr("Core", "organizer.cells.write_review.caption")
|
||||
}
|
||||
}
|
||||
internal enum Menus {
|
||||
/// Host
|
||||
internal static let host = L10n.tr("Core", "organizer.menus.host")
|
||||
/// Provider
|
||||
internal static let provider = L10n.tr("Core", "organizer.menus.provider")
|
||||
internal enum Provider {
|
||||
/// No providers left
|
||||
internal static let unavailable = L10n.tr("Core", "organizer.menus.provider.unavailable")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum Feedback {
|
||||
/// Feedback
|
||||
|
@ -775,6 +733,30 @@ internal enum L10n {
|
|||
}
|
||||
}
|
||||
}
|
||||
internal enum Preferences {
|
||||
/// Preferences
|
||||
internal static let title = L10n.tr("Core", "preferences.title")
|
||||
internal enum Cells {
|
||||
internal enum ConfirmQuit {
|
||||
/// Confirm quit
|
||||
internal static let caption = L10n.tr("Core", "preferences.cells.confirm_quit.caption")
|
||||
/// Check to present a quit confirmation alert.
|
||||
internal static let footer = L10n.tr("Core", "preferences.cells.confirm_quit.footer")
|
||||
}
|
||||
internal enum LaunchesOnLogin {
|
||||
/// Launch on login
|
||||
internal static let caption = L10n.tr("Core", "preferences.cells.launches_on_login.caption")
|
||||
/// Check to automatically launch the app on boot or login.
|
||||
internal static let footer = L10n.tr("Core", "preferences.cells.launches_on_login.footer")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum General {
|
||||
/// General
|
||||
internal static let header = L10n.tr("Core", "preferences.sections.general.header")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Provider {
|
||||
internal enum Pool {
|
||||
internal enum Actions {
|
||||
|
@ -783,6 +765,20 @@ internal enum L10n {
|
|||
/// Unfavorite
|
||||
internal static let unfavorite = L10n.tr("Core", "provider.pool.actions.unfavorite")
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum EmptyFavorites {
|
||||
/// Swipe left on a location to add or remove it from Favorites.
|
||||
internal static let footer = L10n.tr("Core", "provider.pool.sections.empty_favorites.footer")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Preset {
|
||||
internal enum Cells {
|
||||
internal enum TechDetails {
|
||||
/// Technical details
|
||||
internal static let caption = L10n.tr("Core", "provider.preset.cells.tech_details.caption")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Purchase {
|
||||
|
@ -861,6 +857,16 @@ internal enum L10n {
|
|||
internal static let extracting = L10n.tr("Core", "service.alerts.download.hud.extracting")
|
||||
}
|
||||
}
|
||||
internal enum Location {
|
||||
internal enum Button {
|
||||
/// Settings
|
||||
internal static let settings = L10n.tr("Core", "service.alerts.location.button.settings")
|
||||
}
|
||||
internal enum Message {
|
||||
/// You must allow location access to trust this Wi-Fi network. Go to iOS settings and review your location permissions for Passepartout.
|
||||
internal static let denied = L10n.tr("Core", "service.alerts.location.message.denied")
|
||||
}
|
||||
}
|
||||
internal enum MasksPrivateData {
|
||||
internal enum Messages {
|
||||
/// In order to safely reset the current debug log and apply the new masking preference, you must reconnect to the VPN now.
|
||||
|
@ -901,6 +907,14 @@ internal enum L10n {
|
|||
}
|
||||
}
|
||||
internal enum Cells {
|
||||
internal enum Addresses {
|
||||
/// Addresses
|
||||
internal static let caption = L10n.tr("Core", "service.cells.addresses.caption")
|
||||
}
|
||||
internal enum Category {
|
||||
/// Category
|
||||
internal static let caption = L10n.tr("Core", "service.cells.category.caption")
|
||||
}
|
||||
internal enum ConnectionStatus {
|
||||
/// Status
|
||||
internal static let caption = L10n.tr("Core", "service.cells.connection_status.caption")
|
||||
|
@ -915,10 +929,20 @@ internal enum L10n {
|
|||
/// Debug log
|
||||
internal static let caption = L10n.tr("Core", "service.cells.debug_log.caption")
|
||||
}
|
||||
internal enum Host {
|
||||
internal enum Parameters {
|
||||
/// Parameters
|
||||
internal static let caption = L10n.tr("Core", "service.cells.host.parameters.caption")
|
||||
}
|
||||
}
|
||||
internal enum MasksPrivateData {
|
||||
/// Mask network data
|
||||
internal static let caption = L10n.tr("Core", "service.cells.masks_private_data.caption")
|
||||
}
|
||||
internal enum OnlyShowsFavorites {
|
||||
/// Only show favorite locations
|
||||
internal static let caption = L10n.tr("Core", "service.cells.only_shows_favorites.caption")
|
||||
}
|
||||
internal enum Provider {
|
||||
internal enum Pool {
|
||||
/// Location
|
||||
|
@ -953,6 +977,10 @@ internal enum L10n {
|
|||
/// Test connectivity
|
||||
internal static let caption = L10n.tr("Core", "service.cells.test_connectivity.caption")
|
||||
}
|
||||
internal enum TrustedAddWifi {
|
||||
/// Add Wi-Fi
|
||||
internal static let caption = L10n.tr("Core", "service.cells.trusted_add_wifi.caption")
|
||||
}
|
||||
internal enum TrustedMobile {
|
||||
/// Cellular network
|
||||
internal static let caption = L10n.tr("Core", "service.cells.trusted_mobile.caption")
|
||||
|
@ -965,16 +993,34 @@ internal enum L10n {
|
|||
/// Use this profile
|
||||
internal static let caption = L10n.tr("Core", "service.cells.use_profile.caption")
|
||||
}
|
||||
internal enum Vpn {
|
||||
internal enum TurnOff {
|
||||
/// Disable VPN
|
||||
internal static let caption = L10n.tr("Core", "service.cells.vpn.turn_off.caption")
|
||||
}
|
||||
internal enum TurnOn {
|
||||
/// Enable VPN
|
||||
internal static let caption = L10n.tr("Core", "service.cells.vpn.turn_on.caption")
|
||||
}
|
||||
}
|
||||
internal enum VpnResolvesHostname {
|
||||
/// Resolve provider hostname
|
||||
internal static let caption = L10n.tr("Core", "service.cells.vpn_resolves_hostname.caption")
|
||||
}
|
||||
internal enum VpnService {
|
||||
/// Enabled
|
||||
internal static let caption = L10n.tr("Core", "service.cells.vpn_service.caption")
|
||||
}
|
||||
internal enum VpnSurvivesSleep {
|
||||
/// Keep alive on sleep
|
||||
internal static let caption = L10n.tr("Core", "service.cells.vpn_survives_sleep.caption")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum Configuration {
|
||||
/// Configuration
|
||||
internal static let header = L10n.tr("Core", "service.sections.configuration.header")
|
||||
}
|
||||
internal enum Diagnostics {
|
||||
/// Masking status will be effective after reconnecting. Network data are hostnames, IP addresses, routing, SSID. Credentials and private keys are not logged regardless.
|
||||
internal static let footer = L10n.tr("Core", "service.sections.diagnostics.footer")
|
||||
|
@ -987,6 +1033,10 @@ internal enum L10n {
|
|||
return L10n.tr("Core", "service.sections.provider_infrastructure.footer", String(describing: p1))
|
||||
}
|
||||
}
|
||||
internal enum Status {
|
||||
/// Connection
|
||||
internal static let header = L10n.tr("Core", "service.sections.status.header")
|
||||
}
|
||||
internal enum Trusted {
|
||||
/// When entering a trusted network, the VPN is normally shut down and kept disconnected. Disable this option to not enforce such behavior.
|
||||
internal static let footer = L10n.tr("Core", "service.sections.trusted.footer")
|
||||
|
@ -996,6 +1046,8 @@ internal enum L10n {
|
|||
internal enum Vpn {
|
||||
/// The connection will be established whenever necessary.
|
||||
internal static let footer = L10n.tr("Core", "service.sections.vpn.footer")
|
||||
/// VPN
|
||||
internal static let header = L10n.tr("Core", "service.sections.vpn.header")
|
||||
}
|
||||
internal enum VpnResolvesHostname {
|
||||
/// 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.
|
||||
|
@ -1017,6 +1069,8 @@ internal enum L10n {
|
|||
}
|
||||
internal enum Shortcuts {
|
||||
internal enum Add {
|
||||
/// Add shortcut
|
||||
internal static let title = L10n.tr("Core", "shortcuts.add.title")
|
||||
internal enum Alerts {
|
||||
internal enum NoProfiles {
|
||||
/// There is no profile to connect to.
|
||||
|
@ -1069,6 +1123,14 @@ internal enum L10n {
|
|||
}
|
||||
}
|
||||
internal enum Edit {
|
||||
/// Manage shortcuts
|
||||
internal static let title = L10n.tr("Core", "shortcuts.edit.title")
|
||||
internal enum Cells {
|
||||
internal enum AddShortcut {
|
||||
/// Add shortcut
|
||||
internal static let caption = L10n.tr("Core", "shortcuts.edit.cells.add_shortcut.caption")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum All {
|
||||
/// Existing shortcuts
|
||||
|
@ -1081,6 +1143,20 @@ internal enum L10n {
|
|||
/// Translations
|
||||
internal static let title = L10n.tr("Core", "translations.title")
|
||||
}
|
||||
internal enum Trusted {
|
||||
internal enum Columns {
|
||||
internal enum Trust {
|
||||
/// Trust
|
||||
internal static let title = L10n.tr("Core", "trusted.columns.trust.title")
|
||||
}
|
||||
}
|
||||
internal enum Ethernet {
|
||||
/// Check to trust any wired cable connection.
|
||||
internal static let description = L10n.tr("Core", "trusted.ethernet.description")
|
||||
/// Trust wired connections
|
||||
internal static let title = L10n.tr("Core", "trusted.ethernet.title")
|
||||
}
|
||||
}
|
||||
internal enum Version {
|
||||
/// Version
|
||||
internal static let title = L10n.tr("Core", "version.title")
|
||||
|
@ -1100,6 +1176,8 @@ internal enum L10n {
|
|||
internal static let disconnecting = L10n.tr("Core", "vpn.disconnecting")
|
||||
/// Inactive
|
||||
internal static let inactive = L10n.tr("Core", "vpn.inactive")
|
||||
/// Off
|
||||
internal static let unused = L10n.tr("Core", "vpn.unused")
|
||||
internal enum Errors {
|
||||
/// Auth failed
|
||||
internal static let auth = L10n.tr("Core", "vpn.errors.auth")
|
||||
|
@ -1131,6 +1209,18 @@ internal enum L10n {
|
|||
internal static let message = L10n.tr("Core", "wizards.host.alerts.existing.message")
|
||||
}
|
||||
}
|
||||
internal enum Cells {
|
||||
internal enum TitleInput {
|
||||
/// Title
|
||||
internal static let caption = L10n.tr("Core", "wizards.host.cells.title_input.caption")
|
||||
}
|
||||
}
|
||||
internal enum Sections {
|
||||
internal enum Existing {
|
||||
/// Existing profiles
|
||||
internal static let header = L10n.tr("Core", "wizards.host.sections.existing.header")
|
||||
}
|
||||
}
|
||||
}
|
||||
internal enum Provider {
|
||||
internal enum Alerts {
|
||||
|
|
|
@ -30,7 +30,7 @@ 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.Core.Vpn.unused
|
||||
textColor = theme.palette.colorSecondaryText
|
||||
return
|
||||
}
|
||||
|
|
|
@ -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.Core.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.Core.Menu.SwitchProfile.title, action: nil, keyEquivalent: "")
|
||||
|
||||
private var itemsAllProfiles: [NSMenuItem] = []
|
||||
|
||||
|
@ -77,7 +77,7 @@ 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.Core.Service.Cells.Vpn.TurnOn.caption, action: nil, keyEquivalent: "")
|
||||
|
||||
private lazy var itemReconnectVPN = NSMenuItem(title: L10n.Core.Service.Cells.Reconnect.caption, action: #selector(reconnectVPN), keyEquivalent: "")
|
||||
|
||||
|
@ -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.Core.Menu.Show.title, action: #selector(showOrganizer), keyEquivalent: "")
|
||||
let itemPreferences = NSMenuItem(title: L10n.Core.Menu.Preferences.title.asContinuation, action: #selector(showPreferences), keyEquivalent: ",")
|
||||
itemShow.target = self
|
||||
itemPreferences.target = self
|
||||
menu.addItem(itemShow)
|
||||
|
@ -157,7 +157,7 @@ class StatusMenu: NSObject {
|
|||
itemReport.target = self
|
||||
menuSupport.addItem(itemReport)
|
||||
}
|
||||
let itemSupport = NSMenuItem(title: L10n.App.Menu.Support.title, action: nil, keyEquivalent: "")
|
||||
let itemSupport = NSMenuItem(title: L10n.Core.Menu.Support.title, action: nil, keyEquivalent: "")
|
||||
menu.setSubmenu(menuSupport, for: itemSupport)
|
||||
menu.addItem(itemSupport)
|
||||
|
||||
|
@ -181,7 +181,7 @@ class StatusMenu: NSObject {
|
|||
// 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 itemQuit = NSMenuItem(title: L10n.Core.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.Core.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.Core.Menu.ActiveProfile.Messages.missingCredentials, action: nil, keyEquivalent: "")
|
||||
itemMissingCredentials.indentationLevel = 1
|
||||
menu.insertItem(itemMissingCredentials, at: i)
|
||||
i += 1
|
||||
|
@ -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.Core.Menu.ActiveProfile.Items.Customize.title, action: #selector(customizeProfile(_:)), keyEquivalent: "")
|
||||
menu.insertItem(itemCustomize, at: i)
|
||||
i += 1
|
||||
itemCustomize.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.Core.Menu.ActiveProfile.Items.Customize.title, action: #selector(customizeProfile(_:)), keyEquivalent: "")
|
||||
menu.insertItem(itemCustomize, at: i)
|
||||
i += 1
|
||||
itemCustomize.target = self
|
||||
|
@ -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.Core.Service.Cells.Vpn.TurnOff.caption
|
||||
itemToggleVPN.action = #selector(disableVPN)
|
||||
} else {
|
||||
itemToggleVPN.title = L10n.App.Service.Cells.Vpn.TurnOn.caption
|
||||
itemToggleVPN.title = L10n.Core.Service.Cells.Vpn.TurnOn.caption
|
||||
itemToggleVPN.action = #selector(enableVPN)
|
||||
}
|
||||
if let profile = service.activeProfile {
|
||||
|
|
|
@ -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.Core.Organizer.Alerts.OpenHostFile.title
|
||||
panel.allowsMultipleSelection = false
|
||||
panel.canChooseDirectories = false
|
||||
panel.canChooseFiles = true
|
||||
|
@ -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.Core.Organizer.Menus.provider, action: nil, keyEquivalent: "")
|
||||
let menuProvider = NSMenu()
|
||||
let availableMetadata = service.availableProviders()
|
||||
if !availableMetadata.isEmpty {
|
||||
|
@ -323,7 +323,7 @@ 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.Core.Organizer.Menus.Provider.unavailable, action: nil, keyEquivalent: "")
|
||||
item.isEnabled = false
|
||||
menuProvider.addItem(item)
|
||||
}
|
||||
|
@ -333,7 +333,7 @@ extension OrganizerViewController: OrganizerProfileTableViewDelegate {
|
|||
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.Core.Organizer.Menus.host.asContinuation, action: #selector(addHost), keyEquivalent: "")
|
||||
menu.addItem(menuHost)
|
||||
|
||||
NSMenu.popUpContextMenu(menu, with: event, for: sender)
|
||||
|
@ -343,8 +343,8 @@ 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.Core.Organizer.Alerts.RemoveProfile.title,
|
||||
L10n.Core.Organizer.Alerts.RemoveProfile.message(service.screenTitle(ProfileKey(profile)))
|
||||
)
|
||||
alert.present(in: view.window, withOK: L10n.Core.Global.ok, cancel: L10n.Core.Global.cancel, handler: {
|
||||
self.removePendingProfile()
|
||||
|
|
|
@ -68,7 +68,7 @@ class DebugLogViewController: NSViewController {
|
|||
|
||||
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
|
||||
buttonCopy.title = L10n.Core.DebugLog.Buttons.copy
|
||||
buttonPrevious.image = NSImage(named: NSImage.touchBarRewindTemplateName)
|
||||
buttonNext.image = NSImage(named: NSImage.touchBarFastForwardTemplateName)
|
||||
buttonShare.image = NSImage(named: NSImage.shareTemplateName)
|
||||
|
|
|
@ -45,10 +45,10 @@ 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
|
||||
checkLaunchOnLogin.title = L10n.Core.Preferences.Cells.LaunchesOnLogin.caption
|
||||
labelLaunchOnLogin.stringValue = L10n.Core.Preferences.Cells.LaunchesOnLogin.footer
|
||||
checkConfirmQuit.title = L10n.Core.Preferences.Cells.ConfirmQuit.caption
|
||||
labelConfirmQuit.stringValue = L10n.Core.Preferences.Cells.ConfirmQuit.footer
|
||||
checkResolveHostname.title = L10n.Core.Service.Cells.VpnResolvesHostname.caption
|
||||
labelResolveHostname.stringValue = L10n.Core.Service.Sections.VpnResolvesHostname.footer
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class PreferencesViewController: NSViewController {
|
|||
super.viewDidLoad()
|
||||
|
||||
let labels = [
|
||||
L10n.App.Preferences.Sections.General.header,
|
||||
L10n.Core.Preferences.Sections.General.header,
|
||||
L10n.Core.Service.Sections.Diagnostics.header
|
||||
]
|
||||
tabView.tabViewItems.enumerated().forEach {
|
||||
|
|
|
@ -67,7 +67,7 @@ class DNSViewController: NSViewController, ProfileCustomization {
|
|||
|
||||
labelDNSProtocol.stringValue = L10n.Core.Global.Captions.protocol.asCaption
|
||||
|
||||
tableDNSAddresses.title = L10n.App.NetworkSettings.Dns.Cells.Addresses.title.asCaption
|
||||
tableDNSAddresses.title = L10n.Core.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.Core.NetworkSettings.Dns.Cells.Domains.title.asCaption
|
||||
viewDNSDomains.addSubview(tableDNSDomains)
|
||||
tableDNSDomains.translatesAutoresizingMaskIntoConstraints = false
|
||||
NSLayoutConstraint.activate([
|
||||
|
|
|
@ -52,7 +52,7 @@ class EndpointViewController: NSViewController, ProfileCustomization {
|
|||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
labelAddressCaption.stringValue = L10n.App.Endpoint.Cells.address.asCaption
|
||||
labelAddressCaption.stringValue = L10n.Core.Endpoint.Cells.address.asCaption
|
||||
labelProtocolCaption.stringValue = L10n.Core.Global.Captions.protocol.asCaption
|
||||
|
||||
reloadEndpoints()
|
||||
|
|
|
@ -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.Core.Configuration.title,
|
||||
L10n.Core.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.Core.Configuration.Alerts.Commit.Buttons.reconnect,
|
||||
cancel: L10n.Core.Configuration.Alerts.Commit.Buttons.skip) {
|
||||
|
||||
vpn.reconnect(completionHandler: nil)
|
||||
} else {
|
||||
|
@ -259,7 +259,7 @@ class ProfileCustomizationViewController: NSTabViewController {
|
|||
assert(tabViewItems.count == expectedTabs, "Customization tabs misconfigured (expected \(expectedTabs))")
|
||||
|
||||
tabViewItems[0].label = L10n.Core.Endpoint.title
|
||||
tabViewItems[1].label = L10n.App.Configuration.title
|
||||
tabViewItems[1].label = L10n.Core.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
|
||||
|
|
|
@ -76,7 +76,7 @@ class ProxyViewController: NSViewController, ProfileCustomization {
|
|||
labelPACCaption.stringValue = "PAC".asCaption
|
||||
textPAC.placeholderString = L10n.Core.Global.Values.none
|
||||
|
||||
tableProxyBypass.title = L10n.App.NetworkSettings.Proxy.Cells.BypassDomains.title.asCaption
|
||||
tableProxyBypass.title = L10n.Core.NetworkSettings.Proxy.Cells.BypassDomains.title.asCaption
|
||||
viewProxyBypass.addSubview(tableProxyBypass)
|
||||
tableProxyBypass.translatesAutoresizingMaskIntoConstraints = false
|
||||
NSLayoutConstraint.activate([
|
||||
|
|
|
@ -67,8 +67,8 @@ class TrustedNetworksViewController: NSViewController, ProfileCustomization {
|
|||
labelTitle.stringValue = L10n.Core.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
|
||||
checkTrustEthernet.title = L10n.Core.Trusted.Ethernet.title
|
||||
labelTrustEthernetDescription.stringValue = L10n.Core.Trusted.Ethernet.description
|
||||
checkDisableConnection.title = L10n.Core.Service.Cells.TrustedPolicy.caption
|
||||
labelDisableConnectionDescription.stringValue = L10n.Core.Service.Sections.Trusted.footer
|
||||
|
||||
|
@ -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.Core.Trusted.Columns.Trust.title
|
||||
|
||||
default:
|
||||
break
|
||||
|
|
|
@ -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.Core.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
|
||||
labelCategoryCaption.stringValue = L10n.Core.Service.Cells.Category.caption.asCaption
|
||||
labelLocationCaption.stringValue = L10n.Core.Service.Cells.Provider.Pool.caption.asCaption
|
||||
checkOnlyShowsFavorites.title = L10n.App.Service.Cells.OnlyShowsFavorites.caption
|
||||
checkOnlyShowsFavorites.title = L10n.Core.Service.Cells.OnlyShowsFavorites.caption
|
||||
checkOnlyShowsFavorites.state = .off
|
||||
buttonRefreshInfrastructure.image = NSImage(named: NSImage.refreshTemplateName)
|
||||
buttonFavorite.image = NSImage(named: NSImage.bookmarksTemplateName)
|
||||
|
|
|
@ -154,7 +154,7 @@ class ServiceViewController: NSViewController {
|
|||
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
|
||||
buttonToggle.title = L10n.Core.Service.Cells.Vpn.TurnOn.caption
|
||||
buttonReconnect.title = L10n.Core.Service.Cells.Reconnect.caption
|
||||
buttonCustomize.image = NSImage(named: NSImage.actionTemplateName)
|
||||
buttonAccount.title = L10n.Core.Account.title.asContinuation
|
||||
|
@ -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.Core.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.Core.Service.Cells.Vpn.TurnOff.caption : L10n.Core.Service.Cells.Vpn.TurnOn.caption
|
||||
buttonReconnect.isEnabled = true
|
||||
|
||||
// append connected location for providers
|
||||
|
|
|
@ -22,55 +22,3 @@
|
|||
// 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?";
|
||||
|
|
|
@ -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,10 @@
|
|||
|
||||
// ////////////////////
|
||||
|
||||
"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";
|
||||
|
@ -114,6 +119,9 @@
|
|||
"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.";
|
||||
|
@ -137,11 +145,16 @@
|
|||
"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";
|
||||
|
@ -204,6 +217,8 @@
|
|||
"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";
|
||||
|
||||
|
@ -213,6 +228,7 @@
|
|||
"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";
|
||||
|
@ -241,11 +257,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";
|
||||
|
||||
|
@ -253,8 +286,20 @@
|
|||
|
||||
"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.";
|
||||
|
||||
"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?";
|
||||
|
||||
"shortcuts.add.title" = "Add shortcut";
|
||||
"shortcuts.add.sections.vpn.header" = "VPN";
|
||||
"shortcuts.add.sections.wifi.header" = "Wi-Fi";
|
||||
|
|
Loading…
Reference in New Issue