aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Sources/WireGuardApp/ca.lproj/Localizable.strings178
-rw-r--r--Sources/WireGuardApp/es.lproj/Localizable.strings127
-rw-r--r--Sources/WireGuardApp/fa.lproj/Localizable.strings55
-rw-r--r--Sources/WireGuardApp/fi.lproj/Localizable.strings202
-rw-r--r--Sources/WireGuardApp/id.lproj/Localizable.strings177
-rw-r--r--Sources/WireGuardApp/ko.lproj/Localizable.strings214
-rw-r--r--Sources/WireGuardApp/pl.lproj/Localizable.strings133
-rw-r--r--Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings181
-rw-r--r--WireGuard.xcodeproj/project.pbxproj72
-rwxr-xr-xsync-translations.sh17
10 files changed, 1320 insertions, 36 deletions
diff --git a/Sources/WireGuardApp/ca.lproj/Localizable.strings b/Sources/WireGuardApp/ca.lproj/Localizable.strings
index a77be60..5f94f97 100644
--- a/Sources/WireGuardApp/ca.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/ca.lproj/Localizable.strings
@@ -95,3 +95,181 @@
"macMenuManageTunnels" = "Gestiona túnels";
"macMenuCut" = "Talla";
"macMenuCopy" = "Copia";
+"newTunnelViewTitle" = "New configuration";
+"macMenuDeleteSelected" = "Delete Selected";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"tunnelPeerEndpoint" = "Endpoint";
+"tunnelInterfaceMTU" = "MTU";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"addPeerButtonTitle" = "Add peer";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"macMenuTitle" = "WireGuard";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"macNameFieldExportZip" = "Export tunnels to:";
+"editTunnelViewTitle" = "Edit configuration";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macEditDiscard" = "Discard";
+"macSheetButtonExportZip" = "Save";
+"macWindowTitleManageTunnels" = "Manage WireGuard Tunnels";
+"tunnelsListTitle" = "WireGuard";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuExportTunnels" = "Export Tunnels to Zip…";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"macMenuHideApp" = "Hide WireGuard";
+"macDeleteTunnelConfirmationAlertInfo" = "You cannot undo this action.";
+"macDeleteTunnelConfirmationAlertButtonTitleDeleting" = "Deleting…";
+"tunnelPeerPersistentKeepalive" = "Persistent keepalive";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macButtonEdit" = "Edit";
+"macAlertPublicKeyInvalid" = "Public key is invalid";
+"tunnelOnDemandOptionWiFiOnly" = "Wi-Fi only";
+"macNameFieldExportLog" = "Save log to:";
+"alertSystemErrorOnAddTunnelTitle" = "Unable to create tunnel";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"tunnelOnDemandOptionOff" = "Off";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"actionOK" = "OK";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"tunnelOnDemandWiFi" = "Wi-Fi";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macToggleStatusButtonActivating" = "Activating…";
+"macMenuQuit" = "Quit WireGuard";
+"macMenuAddEmptyTunnel" = "Add Empty Tunnel…";
+"tunnelStatusDeactivating" = "Deactivating";
+"alertInvalidInterfaceTitle" = "Invalid interface";
+"tunnelSectionTitleStatus" = "Status";
+"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"macLogButtonTitleClose" = "Close";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"tunnelOnDemandOptionCellularOnly" = "Cellular only";
+"tunnelEditPlaceholderTextOptional" = "Optional";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"tunnelSectionTitleOnDemand" = "On-Demand Activation";
+"deleteTunnelsConfirmationAlertButtonTitle" = "Delete";
+"alertInvalidInterfaceMessageNameRequired" = "Interface name is required";
+"tunnelEditPlaceholderTextAutomatic" = "Automatic";
+"macViewPrivateData" = "view tunnel private keys";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"addTunnelMenuImportFile" = "Create from file or archive";
+"deletePeerConfirmationAlertButtonTitle" = "Delete";
+"addTunnelMenuQRCode" = "Create from QR code";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"macMenuEdit" = "Edit";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"macMenuWindow" = "Window";
+"tunnelStatusRestarting" = "Restarting";
+"tunnelHandshakeTimestampNow" = "Now";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"tunnelInterfaceListenPort" = "Listen port";
+"tunnelOnDemandOptionEthernetOnly" = "Ethernet only";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"deleteTunnelButtonTitle" = "Delete tunnel";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"tunnelStatusInactive" = "Inactive";
+"macAlertPrivateKeyInvalid" = "Private key is invalid.";
+"deleteTunnelConfirmationAlertMessage" = "Delete this tunnel?";
+"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"macMenuNetworksNone" = "Networks: None";
+"tunnelOnDemandSSIDsKey" = "SSIDs";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"macMenuSelectAll" = "Select All";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"tunnelOnDemandCellular" = "Cellular";
+"macConfirmAndQuitAlertQuitWireGuard" = "Quit WireGuard";
+"alertSystemErrorOnRemoveTunnelTitle" = "Unable to remove tunnel";
+"macFieldOnDemand" = "On-Demand:";
+"macMenuCloseWindow" = "Close Window";
+"macSheetButtonExportLog" = "Save";
+"tunnelOnDemandOptionWiFiOrCellular" = "Wi-Fi or cellular";
+"alertSystemErrorOnModifyTunnelTitle" = "Unable to modify tunnel";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuEditTunnel" = "Edit…";
+"macButtonImportTunnels" = "Import tunnel(s) from file";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"tunnelPeerPreSharedKey" = "Preshared key";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"alertNoTunnelsInImportedZipArchiveTitle" = "No tunnels in zip archive";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"macLogButtonTitleSave" = "Save…";
+"macMenuToggleStatus" = "Toggle Status";
+"macMenuMinimize" = "Minimize";
+"deletePeerButtonTitle" = "Delete peer";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"settingsVersionKeyWireGuardForIOS" = "WireGuard for iOS";
+"macMenuPaste" = "Paste";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"macToolTipEditTunnel" = "Edit tunnel (⌘E)";
+"tunnelEditPlaceholderTextStronglyRecommended" = "Strongly recommended";
+"macMenuZoom" = "Zoom";
+"alertBadArchiveTitle" = "Unable to read zip archive";
+"macExportPrivateData" = "export tunnel private keys";
+"alertTunnelAlreadyExistsWithThatNameTitle" = "Name already exists";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"tunnelPeerLastHandshakeTime" = "Latest handshake";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"alertBadConfigImportTitle" = "Unable to import tunnel";
+"macEditSave" = "Save";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"macMenuFile" = "File";
+"tunnelStatusActivating" = "Activating";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"alertInvalidInterfaceMessagePrivateKeyRequired" = "Interface’s private key is required";
+"alertNoTunnelsToExportTitle" = "Nothing to export";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"alertNoTunnelsToExportMessage" = "There are no tunnels to export";
+"macMenuImportTunnels" = "Import Tunnel(s) from File…";
+"macMenuViewLog" = "View Log";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
+"deleteTunnelConfirmationAlertButtonTitle" = "Delete";
+"tunnelEditPlaceholderTextOff" = "Off";
+"addTunnelMenuHeader" = "Add a new WireGuard tunnel";
+"macUnusableTunnelButtonTitleDeleteTunnel" = "Delete tunnel";
+"tunnelEditPlaceholderTextRequired" = "Required";
+"tunnelStatusReasserting" = "Reactivating";
+"macMenuTunnel" = "Tunnel";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macMenuAbout" = "About WireGuard";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"alertBadArchiveMessage" = "Bad or corrupt zip archive.";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"deletePeerConfirmationAlertMessage" = "Delete this peer?";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"tunnelStatusActive" = "Active";
+"tunnelStatusWaiting" = "Waiting";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"addTunnelMenuFromScratch" = "Create from scratch";
+"tunnelOnDemandOptionWiFiOrEthernet" = "Wi-Fi or ethernet";
+"macToggleStatusButtonActivate" = "Activate";
+"macAlertNameIsEmpty" = "Name is required";
diff --git a/Sources/WireGuardApp/es.lproj/Localizable.strings b/Sources/WireGuardApp/es.lproj/Localizable.strings
index d10ff26..9232f55 100644
--- a/Sources/WireGuardApp/es.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/es.lproj/Localizable.strings
@@ -189,3 +189,130 @@
"alertUnableToRemovePreviousLogTitle" = "Exportación de registros fallida";
"alertNoTunnelsToExportTitle" = "Nada para exportar";
+"settingsSectionTitleAbout" = "About";
+"macMenuDeleteSelected" = "Delete Selected";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"macMenuTitle" = "WireGuard";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"macNameFieldExportZip" = "Export tunnels to:";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macMenuCut" = "Cut";
+"macEditDiscard" = "Discard";
+"alertScanQRCodeCameraUnsupportedMessage" = "This device is not able to scan QR codes";
+"macSheetButtonExportZip" = "Save";
+"macWindowTitleManageTunnels" = "Manage WireGuard Tunnels";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuExportTunnels" = "Export Tunnels to Zip…";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"alertScanQRCodeInvalidQRCodeMessage" = "The scanned QR code is not a valid WireGuard configuration";
+"macMenuHideApp" = "Hide WireGuard";
+"settingsViewTitle" = "Settings";
+"macDeleteTunnelConfirmationAlertInfo" = "You cannot undo this action.";
+"macDeleteTunnelConfirmationAlertButtonTitleDeleting" = "Deleting…";
+"settingsViewLogButtonTitle" = "View log";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macButtonEdit" = "Edit";
+"macAlertPublicKeyInvalid" = "Public key is invalid";
+"macNameFieldExportLog" = "Save log to:";
+"alertSystemErrorOnAddTunnelTitle" = "Unable to create tunnel";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macMenuQuit" = "Quit WireGuard";
+"macMenuAddEmptyTunnel" = "Add Empty Tunnel…";
+"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"macLogButtonTitleClose" = "Close";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"macViewPrivateData" = "view tunnel private keys";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"macMenuEdit" = "Edit";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"alertScanQRCodeCameraUnsupportedTitle" = "Camera Unsupported";
+"macMenuWindow" = "Window";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"macAlertPrivateKeyInvalid" = "Private key is invalid.";
+"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertUnableToWriteLogTitle" = "Log export failed";
+"macMenuNetworksNone" = "Networks: None";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"macMenuSelectAll" = "Select All";
+"logViewTitle" = "Log";
+"macConfirmAndQuitAlertQuitWireGuard" = "Quit WireGuard";
+"alertSystemErrorOnRemoveTunnelTitle" = "Unable to remove tunnel";
+"macFieldOnDemand" = "On-Demand:";
+"macMenuCloseWindow" = "Close Window";
+"macSheetButtonExportLog" = "Save";
+"alertSystemErrorOnModifyTunnelTitle" = "Unable to modify tunnel";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuEditTunnel" = "Edit…";
+"settingsSectionTitleTunnelLog" = "Log";
+"macMenuManageTunnels" = "Manage Tunnels";
+"macButtonImportTunnels" = "Import tunnel(s) from file";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"alertNoTunnelsInImportedZipArchiveTitle" = "No tunnels in zip archive";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"macLogButtonTitleSave" = "Save…";
+"macMenuToggleStatus" = "Toggle Status";
+"macMenuMinimize" = "Minimize";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"alertScanQRCodeUnreadableQRCodeTitle" = "Invalid Code";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"settingsVersionKeyWireGuardForIOS" = "WireGuard for iOS";
+"macMenuPaste" = "Paste";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"macToolTipEditTunnel" = "Edit tunnel (⌘E)";
+"macMenuZoom" = "Zoom";
+"alertBadArchiveTitle" = "Unable to read zip archive";
+"macExportPrivateData" = "export tunnel private keys";
+"alertTunnelAlreadyExistsWithThatNameTitle" = "Name already exists";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"macEditSave" = "Save";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"macMenuFile" = "File";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"alertNoTunnelsToExportMessage" = "There are no tunnels to export";
+"macMenuImportTunnels" = "Import Tunnel(s) from File…";
+"alertScanQRCodeInvalidQRCodeTitle" = "Invalid QR Code";
+"macMenuViewLog" = "View Log";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"macUnusableTunnelButtonTitleDeleteTunnel" = "Delete tunnel";
+"macMenuTunnel" = "Tunnel";
+"macMenuCopy" = "Copy";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macMenuAbout" = "About WireGuard";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"alertBadArchiveMessage" = "Bad or corrupt zip archive.";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"macAlertNameIsEmpty" = "Name is required";
diff --git a/Sources/WireGuardApp/fa.lproj/Localizable.strings b/Sources/WireGuardApp/fa.lproj/Localizable.strings
index 65d5cf0..4cfd327 100644
--- a/Sources/WireGuardApp/fa.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/fa.lproj/Localizable.strings
@@ -347,3 +347,58 @@
// Donation
"donateLink" = "♥ کمک مالی به پروژه WireGuard";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"alertScanQRCodeCameraUnsupportedMessage" = "This device is not able to scan QR codes";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"alertScanQRCodeInvalidQRCodeMessage" = "The scanned QR code is not a valid WireGuard configuration";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertInvalidPeerMessagePublicKeyDuplicated" = "Two or more peers cannot have the same public key";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"alertInvalidPeerMessagePublicKeyRequired" = "Peer’s public key is required";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"macMenuToggleStatus" = "Toggle Status";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"alertInvalidPeerMessageAllowedIPsInvalid" = "Peer’s allowed IPs must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
diff --git a/Sources/WireGuardApp/fi.lproj/Localizable.strings b/Sources/WireGuardApp/fi.lproj/Localizable.strings
index 77231f3..9333f68 100644
--- a/Sources/WireGuardApp/fi.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/fi.lproj/Localizable.strings
@@ -44,3 +44,205 @@
"tunnelEditPlaceholderTextAutomatic" = "Automaattinen";
"tunnelEditPlaceholderTextOff" = "Pois päältä";
"tunnelHandshakeTimestampNow" = "Nyt";
+"settingsSectionTitleAbout" = "About";
+"newTunnelViewTitle" = "New configuration";
+"macMenuDeleteSelected" = "Delete Selected";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"tunnelInterfaceDNS" = "DNS servers";
+"tunnelPeerEndpoint" = "Endpoint";
+"tunnelInterfaceMTU" = "MTU";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"addPeerButtonTitle" = "Add peer";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"tunnelsListSwipeDeleteButtonTitle" = "Delete";
+"macMenuTitle" = "WireGuard";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"macNameFieldExportZip" = "Export tunnels to:";
+"editTunnelViewTitle" = "Edit configuration";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macMenuCut" = "Cut";
+"macEditDiscard" = "Discard";
+"tunnelPeerPresharedKeyEnabled" = "enabled";
+"alertScanQRCodeCameraUnsupportedMessage" = "This device is not able to scan QR codes";
+"macSheetButtonExportZip" = "Save";
+"macWindowTitleManageTunnels" = "Manage WireGuard Tunnels";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"macToggleStatusButtonReasserting" = "Reactivating…";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuExportTunnels" = "Export Tunnels to Zip…";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"alertScanQRCodeInvalidQRCodeMessage" = "The scanned QR code is not a valid WireGuard configuration";
+"macMenuHideApp" = "Hide WireGuard";
+"settingsViewTitle" = "Settings";
+"tunnelsListSelectAllButtonTitle" = "Select All";
+"macDeleteTunnelConfirmationAlertInfo" = "You cannot undo this action.";
+"macDeleteTunnelConfirmationAlertButtonTitleDeleting" = "Deleting…";
+"tunnelPeerPersistentKeepalive" = "Persistent keepalive";
+"settingsViewLogButtonTitle" = "View log";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macButtonEdit" = "Edit";
+"macAlertPublicKeyInvalid" = "Public key is invalid";
+"macNameFieldExportLog" = "Save log to:";
+"alertSystemErrorOnAddTunnelTitle" = "Unable to create tunnel";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"macToggleStatusButtonRestarting" = "Restarting…";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macToggleStatusButtonActivating" = "Activating…";
+"macMenuQuit" = "Quit WireGuard";
+"macMenuAddEmptyTunnel" = "Add Empty Tunnel…";
+"tunnelStatusDeactivating" = "Deactivating";
+"alertInvalidInterfaceTitle" = "Invalid interface";
+"tunnelSectionTitleStatus" = "Status";
+"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"tunnelPeerTxBytes" = "Data sent";
+"macLogButtonTitleClose" = "Close";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"tunnelSectionTitleOnDemand" = "On-Demand Activation";
+"deleteTunnelsConfirmationAlertButtonTitle" = "Delete";
+"alertInvalidInterfaceMessageNameRequired" = "Interface name is required";
+"macViewPrivateData" = "view tunnel private keys";
+"alertInvalidPeerTitle" = "Invalid peer";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"tunnelPeerAllowedIPs" = "Allowed IPs";
+"alertInvalidPeerMessagePublicKeyDuplicated" = "Two or more peers cannot have the same public key";
+"macToggleStatusButtonDeactivate" = "Deactivate";
+"addTunnelMenuImportFile" = "Create from file or archive";
+"deletePeerConfirmationAlertButtonTitle" = "Delete";
+"addTunnelMenuQRCode" = "Create from QR code";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"macMenuEdit" = "Edit";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"alertScanQRCodeCameraUnsupportedTitle" = "Camera Unsupported";
+"macMenuWindow" = "Window";
+"tunnelStatusRestarting" = "Restarting";
+"alertUnableToRemovePreviousLogTitle" = "Log export failed";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"tunnelInterfaceListenPort" = "Listen port";
+"macToggleStatusButtonWaiting" = "Waiting…";
+"tunnelInterfaceStatus" = "Status";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"tunnelSectionTitleInterface" = "Interface";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"tunnelStatusInactive" = "Inactive";
+"macAlertPrivateKeyInvalid" = "Private key is invalid.";
+"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"alertUnableToWriteLogTitle" = "Log export failed";
+"alertInvalidPeerMessagePublicKeyRequired" = "Peer’s public key is required";
+"macMenuNetworksNone" = "Networks: None";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"macMenuSelectAll" = "Select All";
+"logViewTitle" = "Log";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"tunnelOnDemandCellular" = "Cellular";
+"macConfirmAndQuitAlertQuitWireGuard" = "Quit WireGuard";
+"alertSystemErrorOnRemoveTunnelTitle" = "Unable to remove tunnel";
+"macFieldOnDemand" = "On-Demand:";
+"macMenuCloseWindow" = "Close Window";
+"macSheetButtonExportLog" = "Save";
+"alertSystemErrorOnModifyTunnelTitle" = "Unable to modify tunnel";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuEditTunnel" = "Edit…";
+"settingsSectionTitleTunnelLog" = "Log";
+"macMenuManageTunnels" = "Manage Tunnels";
+"macButtonImportTunnels" = "Import tunnel(s) from file";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"tunnelSectionTitlePeer" = "Peer";
+"tunnelsListSelectButtonTitle" = "Select";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"tunnelPeerPreSharedKey" = "Preshared key";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"tunnelOnDemandAddMessageAddNewSSID" = "Add new";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"tunnelOnDemandSectionTitleAddSSIDs" = "Add SSIDs";
+"alertNoTunnelsInImportedZipArchiveTitle" = "No tunnels in zip archive";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"tunnelOnDemandEthernet" = "Ethernet";
+"macLogButtonTitleSave" = "Save…";
+"macMenuToggleStatus" = "Toggle Status";
+"macMenuMinimize" = "Minimize";
+"deletePeerButtonTitle" = "Delete peer";
+"tunnelPeerRxBytes" = "Data received";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"alertScanQRCodeUnreadableQRCodeTitle" = "Invalid Code";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"tunnelPeerExcludePrivateIPs" = "Exclude private IPs";
+"settingsVersionKeyWireGuardForIOS" = "WireGuard for iOS";
+"macMenuPaste" = "Paste";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"scanQRCodeViewTitle" = "Scan QR code";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"macToolTipEditTunnel" = "Edit tunnel (⌘E)";
+"tunnelEditPlaceholderTextStronglyRecommended" = "Strongly recommended";
+"macMenuZoom" = "Zoom";
+"alertBadArchiveTitle" = "Unable to read zip archive";
+"macExportPrivateData" = "export tunnel private keys";
+"alertTunnelAlreadyExistsWithThatNameTitle" = "Name already exists";
+"macToggleStatusButtonDeactivating" = "Deactivating…";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"tunnelPeerLastHandshakeTime" = "Latest handshake";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"alertBadConfigImportTitle" = "Unable to import tunnel";
+"macEditSave" = "Save";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"macMenuFile" = "File";
+"tunnelStatusActivating" = "Activating";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"alertInvalidInterfaceMessagePrivateKeyRequired" = "Interface’s private key is required";
+"alertNoTunnelsToExportTitle" = "Nothing to export";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"alertNoTunnelsToExportMessage" = "There are no tunnels to export";
+"macMenuImportTunnels" = "Import Tunnel(s) from File…";
+"alertScanQRCodeInvalidQRCodeTitle" = "Invalid QR Code";
+"macMenuViewLog" = "View Log";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
+"addTunnelMenuHeader" = "Add a new WireGuard tunnel";
+"macUnusableTunnelButtonTitleDeleteTunnel" = "Delete tunnel";
+"tunnelStatusReasserting" = "Reactivating";
+"alertInvalidPeerMessageAllowedIPsInvalid" = "Peer’s allowed IPs must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"macMenuTunnel" = "Tunnel";
+"macMenuCopy" = "Copy";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macMenuAbout" = "About WireGuard";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"alertBadArchiveMessage" = "Bad or corrupt zip archive.";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"deletePeerConfirmationAlertMessage" = "Delete this peer?";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"tunnelStatusActive" = "Active";
+"tunnelStatusWaiting" = "Waiting";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"addTunnelMenuFromScratch" = "Create from scratch";
+"macToggleStatusButtonActivate" = "Activate";
+"macAlertNameIsEmpty" = "Name is required";
+"tunnelsListDeleteButtonTitle" = "Delete";
diff --git a/Sources/WireGuardApp/id.lproj/Localizable.strings b/Sources/WireGuardApp/id.lproj/Localizable.strings
index 2e89ade..a1f5ab0 100644
--- a/Sources/WireGuardApp/id.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/id.lproj/Localizable.strings
@@ -92,3 +92,180 @@
"tunnelOnDemandCellular" = "Cellular";
"tunnelOnDemandEthernet" = "Ethernet";
"tunnelOnDemandWiFi" = "Wi-Fi";
+"settingsSectionTitleAbout" = "About";
+"macMenuDeleteSelected" = "Delete Selected";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"addPeerButtonTitle" = "Add peer";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"macMenuTitle" = "WireGuard";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"macNameFieldExportZip" = "Export tunnels to:";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macMenuCut" = "Cut";
+"macEditDiscard" = "Discard";
+"tunnelPeerPresharedKeyEnabled" = "enabled";
+"alertScanQRCodeCameraUnsupportedMessage" = "This device is not able to scan QR codes";
+"macSheetButtonExportZip" = "Save";
+"macWindowTitleManageTunnels" = "Manage WireGuard Tunnels";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuExportTunnels" = "Export Tunnels to Zip…";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"alertScanQRCodeInvalidQRCodeMessage" = "The scanned QR code is not a valid WireGuard configuration";
+"macMenuHideApp" = "Hide WireGuard";
+"settingsViewTitle" = "Settings";
+"macDeleteTunnelConfirmationAlertInfo" = "You cannot undo this action.";
+"macDeleteTunnelConfirmationAlertButtonTitleDeleting" = "Deleting…";
+"settingsViewLogButtonTitle" = "View log";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macButtonEdit" = "Edit";
+"macAlertPublicKeyInvalid" = "Public key is invalid";
+"tunnelOnDemandOptionWiFiOnly" = "Wi-Fi only";
+"macNameFieldExportLog" = "Save log to:";
+"alertSystemErrorOnAddTunnelTitle" = "Unable to create tunnel";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"tunnelOnDemandOptionOff" = "Off";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"tunnelOnDemandOnlyTheseSSIDs" = "Only these SSIDs";
+"tunnelOnDemandExceptTheseSSIDs" = "Except these SSIDs";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macMenuQuit" = "Quit WireGuard";
+"macMenuAddEmptyTunnel" = "Add Empty Tunnel…";
+"alertInvalidInterfaceTitle" = "Invalid interface";
+"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"macLogButtonTitleClose" = "Close";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"tunnelOnDemandOptionCellularOnly" = "Cellular only";
+"tunnelEditPlaceholderTextOptional" = "Optional";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"alertInvalidInterfaceMessageNameRequired" = "Interface name is required";
+"tunnelEditPlaceholderTextAutomatic" = "Automatic";
+"macViewPrivateData" = "view tunnel private keys";
+"alertInvalidPeerTitle" = "Invalid peer";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"alertInvalidPeerMessagePublicKeyDuplicated" = "Two or more peers cannot have the same public key";
+"deletePeerConfirmationAlertButtonTitle" = "Delete";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"macMenuEdit" = "Edit";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"alertScanQRCodeCameraUnsupportedTitle" = "Camera Unsupported";
+"macMenuWindow" = "Window";
+"alertUnableToRemovePreviousLogTitle" = "Log export failed";
+"tunnelHandshakeTimestampNow" = "Now";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"tunnelOnDemandOptionEthernetOnly" = "Ethernet only";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"deleteTunnelButtonTitle" = "Delete tunnel";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"macAlertPrivateKeyInvalid" = "Private key is invalid.";
+"deleteTunnelConfirmationAlertMessage" = "Delete this tunnel?";
+"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"alertUnableToWriteLogTitle" = "Log export failed";
+"alertInvalidPeerMessagePublicKeyRequired" = "Peer’s public key is required";
+"macMenuNetworksNone" = "Networks: None";
+"tunnelOnDemandSSIDsKey" = "SSIDs";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"macMenuSelectAll" = "Select All";
+"logViewTitle" = "Log";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"tunnelOnDemandKey" = "On demand";
+"macConfirmAndQuitAlertQuitWireGuard" = "Quit WireGuard";
+"alertSystemErrorOnRemoveTunnelTitle" = "Unable to remove tunnel";
+"macFieldOnDemand" = "On-Demand:";
+"macMenuCloseWindow" = "Close Window";
+"macSheetButtonExportLog" = "Save";
+"tunnelOnDemandOptionWiFiOrCellular" = "Wi-Fi or cellular";
+"alertSystemErrorOnModifyTunnelTitle" = "Unable to modify tunnel";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuEditTunnel" = "Edit…";
+"settingsSectionTitleTunnelLog" = "Log";
+"macMenuManageTunnels" = "Manage Tunnels";
+"macButtonImportTunnels" = "Import tunnel(s) from file";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"tunnelOnDemandAddMessageAddNewSSID" = "Add new";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"tunnelOnDemandSectionTitleAddSSIDs" = "Add SSIDs";
+"alertNoTunnelsInImportedZipArchiveTitle" = "No tunnels in zip archive";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"macLogButtonTitleSave" = "Save…";
+"macMenuToggleStatus" = "Toggle Status";
+"macMenuMinimize" = "Minimize";
+"deletePeerButtonTitle" = "Delete peer";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"alertScanQRCodeUnreadableQRCodeTitle" = "Invalid Code";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"settingsVersionKeyWireGuardForIOS" = "WireGuard for iOS";
+"macMenuPaste" = "Paste";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"scanQRCodeViewTitle" = "Scan QR code";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"macToolTipEditTunnel" = "Edit tunnel (⌘E)";
+"tunnelEditPlaceholderTextStronglyRecommended" = "Strongly recommended";
+"macMenuZoom" = "Zoom";
+"alertBadArchiveTitle" = "Unable to read zip archive";
+"macExportPrivateData" = "export tunnel private keys";
+"alertTunnelAlreadyExistsWithThatNameTitle" = "Name already exists";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"macEditSave" = "Save";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"macMenuFile" = "File";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"alertInvalidInterfaceMessagePrivateKeyRequired" = "Interface’s private key is required";
+"tunnelOnDemandAnySSID" = "Any SSID";
+"alertNoTunnelsToExportTitle" = "Nothing to export";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"alertNoTunnelsToExportMessage" = "There are no tunnels to export";
+"macMenuImportTunnels" = "Import Tunnel(s) from File…";
+"alertScanQRCodeInvalidQRCodeTitle" = "Invalid QR Code";
+"macMenuViewLog" = "View Log";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
+"deleteTunnelConfirmationAlertButtonTitle" = "Delete";
+"tunnelEditPlaceholderTextOff" = "Off";
+"macUnusableTunnelButtonTitleDeleteTunnel" = "Delete tunnel";
+"tunnelEditPlaceholderTextRequired" = "Required";
+"alertInvalidPeerMessageAllowedIPsInvalid" = "Peer’s allowed IPs must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"macMenuTunnel" = "Tunnel";
+"macMenuCopy" = "Copy";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macMenuAbout" = "About WireGuard";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"alertBadArchiveMessage" = "Bad or corrupt zip archive.";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"deletePeerConfirmationAlertMessage" = "Delete this peer?";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"tunnelOnDemandOptionWiFiOrEthernet" = "Wi-Fi or ethernet";
+"macAlertNameIsEmpty" = "Name is required";
diff --git a/Sources/WireGuardApp/ko.lproj/Localizable.strings b/Sources/WireGuardApp/ko.lproj/Localizable.strings
index c3dbf18..2fda14d 100644
--- a/Sources/WireGuardApp/ko.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/ko.lproj/Localizable.strings
@@ -36,3 +36,217 @@
// Settings UI
"settingsViewTitle" = "설정";
+"settingsSectionTitleAbout" = "About";
+"newTunnelViewTitle" = "New configuration";
+"macMenuDeleteSelected" = "Delete Selected";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"tunnelPeerPublicKey" = "Public key";
+"tunnelPeerEndpoint" = "Endpoint";
+"tunnelInterfaceMTU" = "MTU";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"addPeerButtonTitle" = "Add peer";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"macMenuTitle" = "WireGuard";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"macNameFieldExportZip" = "Export tunnels to:";
+"editTunnelViewTitle" = "Edit configuration";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macMenuCut" = "Cut";
+"macEditDiscard" = "Discard";
+"tunnelPeerPresharedKeyEnabled" = "enabled";
+"macSheetButtonExportZip" = "Save";
+"macWindowTitleManageTunnels" = "Manage WireGuard Tunnels";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"macToggleStatusButtonReasserting" = "Reactivating…";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuExportTunnels" = "Export Tunnels to Zip…";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"macMenuHideApp" = "Hide WireGuard";
+"macDeleteTunnelConfirmationAlertInfo" = "You cannot undo this action.";
+"macDeleteTunnelConfirmationAlertButtonTitleDeleting" = "Deleting…";
+"tunnelPeerPersistentKeepalive" = "Persistent keepalive";
+"settingsViewLogButtonTitle" = "View log";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macButtonEdit" = "Edit";
+"macAlertPublicKeyInvalid" = "Public key is invalid";
+"tunnelOnDemandOptionWiFiOnly" = "Wi-Fi only";
+"macNameFieldExportLog" = "Save log to:";
+"alertSystemErrorOnAddTunnelTitle" = "Unable to create tunnel";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"tunnelOnDemandOptionOff" = "Off";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"tunnelOnDemandOnlyTheseSSIDs" = "Only these SSIDs";
+"macToggleStatusButtonRestarting" = "Restarting…";
+"tunnelOnDemandExceptTheseSSIDs" = "Except these SSIDs";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macToggleStatusButtonActivating" = "Activating…";
+"macMenuQuit" = "Quit WireGuard";
+"macMenuAddEmptyTunnel" = "Add Empty Tunnel…";
+"tunnelStatusDeactivating" = "Deactivating";
+"alertInvalidInterfaceTitle" = "Invalid interface";
+"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"tunnelPeerTxBytes" = "Data sent";
+"macLogButtonTitleClose" = "Close";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"tunnelOnDemandOptionCellularOnly" = "Cellular only";
+"tunnelEditPlaceholderTextOptional" = "Optional";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"tunnelSectionTitleOnDemand" = "On-Demand Activation";
+"tunnelInterfaceGenerateKeypair" = "Generate keypair";
+"deleteTunnelsConfirmationAlertButtonTitle" = "Delete";
+"alertInvalidInterfaceMessageNameRequired" = "Interface name is required";
+"tunnelEditPlaceholderTextAutomatic" = "Automatic";
+"macViewPrivateData" = "view tunnel private keys";
+"alertInvalidPeerTitle" = "Invalid peer";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"tunnelPeerAllowedIPs" = "Allowed IPs";
+"alertInvalidPeerMessagePublicKeyDuplicated" = "Two or more peers cannot have the same public key";
+"macToggleStatusButtonDeactivate" = "Deactivate";
+"addTunnelMenuImportFile" = "Create from file or archive";
+"deletePeerConfirmationAlertButtonTitle" = "Delete";
+"addTunnelMenuQRCode" = "Create from QR code";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"macMenuEdit" = "Edit";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"macMenuWindow" = "Window";
+"tunnelStatusRestarting" = "Restarting";
+"alertUnableToRemovePreviousLogTitle" = "Log export failed";
+"tunnelHandshakeTimestampNow" = "Now";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"tunnelInterfaceListenPort" = "Listen port";
+"tunnelOnDemandOptionEthernetOnly" = "Ethernet only";
+"tunnelInterfaceName" = "Name";
+"macToggleStatusButtonWaiting" = "Waiting…";
+"tunnelInterfaceStatus" = "Status";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"deleteTunnelButtonTitle" = "Delete tunnel";
+"tunnelSectionTitleInterface" = "Interface";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"tunnelStatusInactive" = "Inactive";
+"macAlertPrivateKeyInvalid" = "Private key is invalid.";
+"tunnelsListCenteredAddTunnelButtonTitle" = "Add a tunnel";
+"deleteTunnelConfirmationAlertMessage" = "Delete this tunnel?";
+"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"alertUnableToWriteLogTitle" = "Log export failed";
+"alertInvalidPeerMessagePublicKeyRequired" = "Peer’s public key is required";
+"macMenuNetworksNone" = "Networks: None";
+"tunnelOnDemandSSIDsKey" = "SSIDs";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"macMenuSelectAll" = "Select All";
+"logViewTitle" = "Log";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"tunnelOnDemandCellular" = "Cellular";
+"tunnelOnDemandKey" = "On demand";
+"macConfirmAndQuitAlertQuitWireGuard" = "Quit WireGuard";
+"alertSystemErrorOnRemoveTunnelTitle" = "Unable to remove tunnel";
+"macFieldOnDemand" = "On-Demand:";
+"macMenuCloseWindow" = "Close Window";
+"macSheetButtonExportLog" = "Save";
+"tunnelOnDemandOptionWiFiOrCellular" = "Wi-Fi or cellular";
+"alertSystemErrorOnModifyTunnelTitle" = "Unable to modify tunnel";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuEditTunnel" = "Edit…";
+"settingsSectionTitleTunnelLog" = "Log";
+"macMenuManageTunnels" = "Manage Tunnels";
+"macButtonImportTunnels" = "Import tunnel(s) from file";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"tunnelSectionTitlePeer" = "Peer";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"tunnelPeerPreSharedKey" = "Preshared key";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"tunnelOnDemandAddMessageAddNewSSID" = "Add new";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"tunnelOnDemandSectionTitleAddSSIDs" = "Add SSIDs";
+"alertNoTunnelsInImportedZipArchiveTitle" = "No tunnels in zip archive";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"tunnelOnDemandEthernet" = "Ethernet";
+"macLogButtonTitleSave" = "Save…";
+"macMenuToggleStatus" = "Toggle Status";
+"macMenuMinimize" = "Minimize";
+"deletePeerButtonTitle" = "Delete peer";
+"tunnelPeerRxBytes" = "Data received";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"tunnelPeerExcludePrivateIPs" = "Exclude private IPs";
+"settingsVersionKeyWireGuardForIOS" = "WireGuard for iOS";
+"macMenuPaste" = "Paste";
+"tunnelInterfaceAddresses" = "Addresses";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"scanQRCodeViewTitle" = "Scan QR code";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"macToolTipEditTunnel" = "Edit tunnel (⌘E)";
+"tunnelEditPlaceholderTextStronglyRecommended" = "Strongly recommended";
+"macMenuZoom" = "Zoom";
+"alertBadArchiveTitle" = "Unable to read zip archive";
+"macExportPrivateData" = "export tunnel private keys";
+"alertTunnelAlreadyExistsWithThatNameTitle" = "Name already exists";
+"macToggleStatusButtonDeactivating" = "Deactivating…";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"tunnelPeerLastHandshakeTime" = "Latest handshake";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"alertBadConfigImportTitle" = "Unable to import tunnel";
+"macEditSave" = "Save";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"macMenuFile" = "File";
+"tunnelStatusActivating" = "Activating";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"alertInvalidInterfaceMessagePrivateKeyRequired" = "Interface’s private key is required";
+"tunnelOnDemandAnySSID" = "Any SSID";
+"alertNoTunnelsToExportTitle" = "Nothing to export";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"alertNoTunnelsToExportMessage" = "There are no tunnels to export";
+"macMenuImportTunnels" = "Import Tunnel(s) from File…";
+"macMenuViewLog" = "View Log";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
+"deleteTunnelConfirmationAlertButtonTitle" = "Delete";
+"tunnelEditPlaceholderTextOff" = "Off";
+"addTunnelMenuHeader" = "Add a new WireGuard tunnel";
+"macUnusableTunnelButtonTitleDeleteTunnel" = "Delete tunnel";
+"tunnelEditPlaceholderTextRequired" = "Required";
+"tunnelStatusReasserting" = "Reactivating";
+"alertInvalidPeerMessageAllowedIPsInvalid" = "Peer’s allowed IPs must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"macMenuTunnel" = "Tunnel";
+"macMenuCopy" = "Copy";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macMenuAbout" = "About WireGuard";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"alertBadArchiveMessage" = "Bad or corrupt zip archive.";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"deletePeerConfirmationAlertMessage" = "Delete this peer?";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"tunnelStatusActive" = "Active";
+"tunnelStatusWaiting" = "Waiting";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"addTunnelMenuFromScratch" = "Create from scratch";
+"tunnelOnDemandOptionWiFiOrEthernet" = "Wi-Fi or ethernet";
+"macToggleStatusButtonActivate" = "Activate";
+"macAlertNameIsEmpty" = "Name is required";
diff --git a/Sources/WireGuardApp/pl.lproj/Localizable.strings b/Sources/WireGuardApp/pl.lproj/Localizable.strings
index 554de77..9127e31 100644
--- a/Sources/WireGuardApp/pl.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/pl.lproj/Localizable.strings
@@ -188,3 +188,136 @@
"macLogButtonTitleClose" = "Zamknij";
"macLogButtonTitleSave" = "Zapisz…";
"macUnusableTunnelButtonTitleDeleteTunnel" = "Usuń tunel";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"tunnelPeerEndpoint" = "Endpoint";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"addPeerButtonTitle" = "Add peer";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macEditDiscard" = "Discard";
+"alertScanQRCodeCameraUnsupportedMessage" = "This device is not able to scan QR codes";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"macToggleStatusButtonReasserting" = "Reactivating…";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"alertScanQRCodeInvalidQRCodeMessage" = "The scanned QR code is not a valid WireGuard configuration";
+"tunnelPeerPersistentKeepalive" = "Persistent keepalive";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"tunnelOnDemandOptionOff" = "Off";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"tunnelOnDemandOnlyTheseSSIDs" = "Only these SSIDs";
+"macToggleStatusButtonRestarting" = "Restarting…";
+"tunnelOnDemandExceptTheseSSIDs" = "Except these SSIDs";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macToggleStatusButtonActivating" = "Activating…";
+"tunnelStatusDeactivating" = "Deactivating";
+"alertInvalidInterfaceTitle" = "Invalid interface";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"tunnelPeerTxBytes" = "Data sent";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"tunnelEditPlaceholderTextOptional" = "Optional";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"tunnelSectionTitleOnDemand" = "On-Demand Activation";
+"tunnelInterfaceGenerateKeypair" = "Generate keypair";
+"deleteTunnelsConfirmationAlertButtonTitle" = "Delete";
+"alertInvalidInterfaceMessageNameRequired" = "Interface name is required";
+"tunnelEditPlaceholderTextAutomatic" = "Automatic";
+"macViewPrivateData" = "view tunnel private keys";
+"alertInvalidPeerTitle" = "Invalid peer";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"alertInvalidPeerMessagePublicKeyDuplicated" = "Two or more peers cannot have the same public key";
+"macToggleStatusButtonDeactivate" = "Deactivate";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"alertScanQRCodeCameraUnsupportedTitle" = "Camera Unsupported";
+"macMenuWindow" = "Window";
+"tunnelStatusRestarting" = "Restarting";
+"alertUnableToRemovePreviousLogTitle" = "Log export failed";
+"tunnelHandshakeTimestampNow" = "Now";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"macToggleStatusButtonWaiting" = "Waiting…";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"tunnelSectionTitleInterface" = "Interface";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"tunnelStatusInactive" = "Inactive";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"alertUnableToWriteLogTitle" = "Log export failed";
+"alertInvalidPeerMessagePublicKeyRequired" = "Peer’s public key is required";
+"macMenuNetworksNone" = "Networks: None";
+"tunnelOnDemandSSIDsKey" = "SSIDs";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"tunnelOnDemandCellular" = "Cellular";
+"macFieldOnDemand" = "On-Demand:";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuManageTunnels" = "Manage Tunnels";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"tunnelSectionTitlePeer" = "Peer";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"tunnelPeerPreSharedKey" = "Preshared key";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"tunnelOnDemandAddMessageAddNewSSID" = "Add new";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"tunnelOnDemandSectionTitleAddSSIDs" = "Add SSIDs";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"macMenuToggleStatus" = "Toggle Status";
+"macMenuMinimize" = "Minimize";
+"deletePeerButtonTitle" = "Delete peer";
+"tunnelPeerRxBytes" = "Data received";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"tunnelPeerExcludePrivateIPs" = "Exclude private IPs";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"tunnelEditPlaceholderTextStronglyRecommended" = "Strongly recommended";
+"macMenuZoom" = "Zoom";
+"macExportPrivateData" = "export tunnel private keys";
+"macToggleStatusButtonDeactivating" = "Deactivating…";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"tunnelPeerLastHandshakeTime" = "Latest handshake";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"alertBadConfigImportTitle" = "Unable to import tunnel";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"tunnelStatusActivating" = "Activating";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"alertInvalidInterfaceMessagePrivateKeyRequired" = "Interface’s private key is required";
+"tunnelOnDemandAnySSID" = "Any SSID";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
+"tunnelEditPlaceholderTextOff" = "Off";
+"tunnelEditPlaceholderTextRequired" = "Required";
+"tunnelStatusReasserting" = "Reactivating";
+"alertInvalidPeerMessageAllowedIPsInvalid" = "Peer’s allowed IPs must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"deletePeerConfirmationAlertMessage" = "Delete this peer?";
+"tunnelStatusActive" = "Active";
+"tunnelStatusWaiting" = "Waiting";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"macToggleStatusButtonActivate" = "Activate";
diff --git a/Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings b/Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings
index 9f54207..f8de223 100644
--- a/Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings
+++ b/Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings
@@ -86,3 +86,184 @@
"macMenuPaste" = "貼上";
"macMenuSelectAll" = "全選";
"macMenuMinimize" = "最小化";
+"macMenuDeleteSelected" = "Delete Selected";
+"alertSystemErrorMessageTunnelConfigurationInvalid" = "The configuration is invalid.";
+"tunnelPeerPublicKey" = "Public key";
+"tunnelPeerEndpoint" = "Endpoint";
+"alertInvalidInterfaceMessageListenPortInvalid" = "Interface’s listen port must be between 0 and 65535, or unspecified";
+"addPeerButtonTitle" = "Add peer";
+"tunnelHandshakeTimestampSystemClockBackward" = "(System clock wound backwards)";
+"macMenuTitle" = "WireGuard";
+"macAlertNoInterface" = "Configuration must have an ‘Interface’ section.";
+"macNameFieldExportZip" = "Export tunnels to:";
+"alertSystemErrorMessageTunnelConfigurationUnknown" = "Unknown system error.";
+"macEditDiscard" = "Discard";
+"tunnelPeerPresharedKeyEnabled" = "enabled";
+"alertScanQRCodeCameraUnsupportedMessage" = "This device is not able to scan QR codes";
+"macSheetButtonExportZip" = "Save";
+"macWindowTitleManageTunnels" = "Manage WireGuard Tunnels";
+"macConfirmAndQuitAlertInfo" = "If you close the tunnels manager, WireGuard will continue to be available from the menu bar icon.";
+"macUnusableTunnelInfo" = "In case this tunnel was created by another user, only that user can view, edit, or activate this tunnel.";
+"alertTunnelActivationErrorTunnelIsNotInactiveMessage" = "The tunnel is already active or in the process of being activated";
+"alertTunnelActivationSetNetworkSettingsMessage" = "Unable to apply network settings to tunnel object.";
+"macMenuExportTunnels" = "Export Tunnels to Zip…";
+"macMenuShowAllApps" = "Show All";
+"alertCantOpenInputConfFileTitle" = "Unable to import from file";
+"alertScanQRCodeInvalidQRCodeMessage" = "The scanned QR code is not a valid WireGuard configuration";
+"macDeleteTunnelConfirmationAlertInfo" = "You cannot undo this action.";
+"macDeleteTunnelConfirmationAlertButtonTitleDeleting" = "Deleting…";
+"tunnelPeerPersistentKeepalive" = "Persistent keepalive";
+"settingsViewLogButtonTitle" = "View log";
+"alertSystemErrorMessageTunnelConnectionFailed" = "The connection failed.";
+"macButtonEdit" = "Edit";
+"macAlertPublicKeyInvalid" = "Public key is invalid";
+"tunnelOnDemandOptionWiFiOnly" = "Wi-Fi only";
+"macNameFieldExportLog" = "Save log to:";
+"alertSystemErrorOnAddTunnelTitle" = "Unable to create tunnel";
+"macConfirmAndQuitAlertMessage" = "Do you want to close the tunnels manager or quit WireGuard entirely?";
+"alertTunnelActivationSavedConfigFailureMessage" = "Unable to retrieve tunnel information from the saved configuration.";
+"tunnelOnDemandOptionOff" = "Off";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"macAlertInfoUnrecognizedInterfaceKey" = "Valid keys are: ‘PrivateKey’, ‘ListenPort’, ‘Address’, ‘DNS’ and ‘MTU’.";
+"macLogColumnTitleTime" = "Time";
+"alertTunnelNameEmptyMessage" = "Cannot create tunnel with an empty name";
+"alertInvalidInterfaceMessageMTUInvalid" = "Interface’s MTU must be between 576 and 65535, or unspecified";
+"tunnelOnDemandWiFi" = "Wi-Fi";
+"alertTunnelNameEmptyTitle" = "No name provided";
+"tunnelOnDemandOnlyTheseSSIDs" = "Only these SSIDs";
+"tunnelOnDemandExceptTheseSSIDs" = "Except these SSIDs";
+"alertUnableToWriteLogMessage" = "Unable to write logs to file";
+"macMenuAddEmptyTunnel" = "Add Empty Tunnel…";
+"alertInvalidInterfaceTitle" = "Invalid interface";
+"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete";
+"alertTunnelActivationFailureOnDemandAddendum" = " This tunnel has Activate On Demand enabled, so this tunnel might be re-activated automatically by the OS. You may turn off Activate On Demand in this app by editing the tunnel configuration.";
+"alertTunnelActivationFailureTitle" = "Activation failure";
+"tunnelPeerTxBytes" = "Data sent";
+"macLogButtonTitleClose" = "Close";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"tunnelOnDemandOptionCellularOnly" = "Cellular only";
+"tunnelEditPlaceholderTextOptional" = "Optional";
+"settingsExportZipButtonTitle" = "Export zip archive";
+"tunnelSectionTitleOnDemand" = "On-Demand Activation";
+"alertInvalidInterfaceMessageNameRequired" = "Interface name is required";
+"macViewPrivateData" = "view tunnel private keys";
+"alertInvalidPeerTitle" = "Invalid peer";
+"alertInvalidPeerMessageEndpointInvalid" = "Peer’s endpoint must be of the form ‘host:port’ or ‘[host]:port’";
+"alertTunnelActivationErrorTunnelIsNotInactiveTitle" = "Activation in progress";
+"tunnelPeerAllowedIPs" = "Allowed IPs";
+"alertInvalidPeerMessagePublicKeyDuplicated" = "Two or more peers cannot have the same public key";
+"deletePeerConfirmationAlertButtonTitle" = "Delete";
+"alertInvalidPeerMessagePreSharedKeyInvalid" = "Peer’s preshared key must be a 32-byte key in base64 encoding";
+"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";
+"macMenuEdit" = "Edit";
+"donateLink" = "♥ Donate to the WireGuard Project";
+"alertScanQRCodeCameraUnsupportedTitle" = "Camera Unsupported";
+"macMenuWindow" = "Window";
+"alertUnableToRemovePreviousLogTitle" = "Log export failed";
+"alertTunnelActivationFailureMessage" = "The tunnel could not be activated. Please ensure that you are connected to the Internet.";
+"tunnelOnDemandOptionEthernetOnly" = "Ethernet only";
+"tunnelInterfaceStatus" = "Status";
+"macMenuHideOtherApps" = "Hide Others";
+"alertCantOpenInputZipFileMessage" = "The zip archive could not be read.";
+"alertInvalidInterfaceMessagePrivateKeyInvalid" = "Interface’s private key must be a 32-byte key in base64 encoding";
+"deleteTunnelButtonTitle" = "Delete tunnel";
+"alertInvalidInterfaceMessageDNSInvalid" = "Interface’s DNS servers must be a list of comma-separated IP addresses";
+"macAlertPrivateKeyInvalid" = "Private key is invalid.";
+"deleteTunnelConfirmationAlertMessage" = "Delete this tunnel?";
+"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel";
+"alertSystemErrorMessageTunnelConfigurationDisabled" = "The configuration is disabled.";
+"alertInvalidPeerMessagePersistentKeepaliveInvalid" = "Peer’s persistent keepalive must be between 0 to 65535, or unspecified";
+"alertUnableToWriteLogTitle" = "Log export failed";
+"alertInvalidPeerMessagePublicKeyRequired" = "Peer’s public key is required";
+"macMenuNetworksNone" = "Networks: None";
+"tunnelOnDemandSSIDsKey" = "SSIDs";
+"alertCantOpenOutputZipFileForWritingMessage" = "Could not open zip file for writing.";
+"logViewTitle" = "Log";
+"alertInvalidPeerMessagePublicKeyInvalid" = "Peer’s public key must be a 32-byte key in base64 encoding";
+"tunnelOnDemandCellular" = "Cellular";
+"tunnelOnDemandKey" = "On demand";
+"macConfirmAndQuitAlertQuitWireGuard" = "Quit WireGuard";
+"alertSystemErrorOnRemoveTunnelTitle" = "Unable to remove tunnel";
+"macFieldOnDemand" = "On-Demand:";
+"macMenuCloseWindow" = "Close Window";
+"macSheetButtonExportLog" = "Save";
+"tunnelOnDemandOptionWiFiOrCellular" = "Wi-Fi or cellular";
+"alertSystemErrorOnModifyTunnelTitle" = "Unable to modify tunnel";
+"alertSystemErrorMessageTunnelConfigurationReadWriteFailed" = "Reading or writing the configuration failed.";
+"macMenuEditTunnel" = "Edit…";
+"settingsSectionTitleTunnelLog" = "Log";
+"macMenuManageTunnels" = "Manage Tunnels";
+"macButtonImportTunnels" = "Import tunnel(s) from file";
+"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
+"tunnelSectionTitlePeer" = "Peer";
+"alertSystemErrorMessageTunnelConfigurationStale" = "The configuration is stale.";
+"tunnelPeerPreSharedKey" = "Preshared key";
+"alertTunnelDNSFailureMessage" = "One or more endpoint domains could not be resolved.";
+"tunnelOnDemandAddMessageAddNewSSID" = "Add new";
+"alertInvalidInterfaceMessageAddressInvalid" = "Interface addresses must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"tunnelOnDemandSectionTitleAddSSIDs" = "Add SSIDs";
+"alertNoTunnelsInImportedZipArchiveTitle" = "No tunnels in zip archive";
+"alertTunnelDNSFailureTitle" = "DNS resolution failure";
+"tunnelOnDemandEthernet" = "Ethernet";
+"macLogButtonTitleSave" = "Save…";
+"macMenuToggleStatus" = "Toggle Status";
+"deletePeerButtonTitle" = "Delete peer";
+"tunnelPeerRxBytes" = "Data received";
+"alertCantOpenInputZipFileTitle" = "Unable to read zip archive";
+"alertScanQRCodeUnreadableQRCodeMessage" = "The scanned code could not be read";
+"alertScanQRCodeUnreadableQRCodeTitle" = "Invalid Code";
+"alertSystemErrorOnListingTunnelsTitle" = "Unable to list tunnels";
+"tunnelPeerExcludePrivateIPs" = "Exclude private IPs";
+"settingsVersionKeyWireGuardForIOS" = "WireGuard for iOS";
+"tunnelInterfaceAddresses" = "Addresses";
+"macAlertMultipleInterfaces" = "Configuration must have only one ‘Interface’ section.";
+"scanQRCodeViewTitle" = "Scan QR code";
+"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
+"macUnusableTunnelMessage" = "The configuration for this tunnel cannot be found in the keychain.";
+"macToolTipEditTunnel" = "Edit tunnel (⌘E)";
+"tunnelEditPlaceholderTextStronglyRecommended" = "Strongly recommended";
+"macMenuZoom" = "Zoom";
+"alertBadArchiveTitle" = "Unable to read zip archive";
+"macExportPrivateData" = "export tunnel private keys";
+"alertTunnelAlreadyExistsWithThatNameTitle" = "Name already exists";
+"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
+"tunnelPeerLastHandshakeTime" = "Latest handshake";
+"macAlertPreSharedKeyInvalid" = "Preshared key is invalid";
+"macEditSave" = "Save";
+"macConfirmAndQuitAlertCloseWindow" = "Close Tunnels Manager";
+"macMenuFile" = "File";
+"macToolTipToggleStatus" = "Toggle status (⌘T)";
+"alertTunnelActivationSystemErrorTitle" = "Activation failure";
+"alertInvalidInterfaceMessagePrivateKeyRequired" = "Interface’s private key is required";
+"tunnelOnDemandAnySSID" = "Any SSID";
+"alertNoTunnelsToExportTitle" = "Nothing to export";
+"scanQRCodeTipText" = "Tip: Generate with `qrencode -t ansiutf8 < tunnel.conf`";
+"alertNoTunnelsToExportMessage" = "There are no tunnels to export";
+"macMenuImportTunnels" = "Import Tunnel(s) from File…";
+"alertScanQRCodeInvalidQRCodeTitle" = "Invalid QR Code";
+"macMenuViewLog" = "View Log";
+"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: ‘PublicKey’, ‘PresharedKey’, ‘AllowedIPs’, ‘Endpoint’ and ‘PersistentKeepalive’";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
+"deleteTunnelConfirmationAlertButtonTitle" = "Delete";
+"tunnelEditPlaceholderTextOff" = "Off";
+"macUnusableTunnelButtonTitleDeleteTunnel" = "Delete tunnel";
+"tunnelEditPlaceholderTextRequired" = "Required";
+"alertInvalidPeerMessageAllowedIPsInvalid" = "Peer’s allowed IPs must be a list of comma-separated IP addresses, optionally in CIDR notation";
+"macMenuTunnel" = "Tunnel";
+"alertTunnelAlreadyExistsWithThatNameMessage" = "A tunnel with that name already exists";
+"macLogColumnTitleLogMessage" = "Log message";
+"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
+"macSheetButtonImport" = "Import";
+"alertScanQRCodeNamePromptTitle" = "Please name the scanned tunnel";
+"alertUnableToRemovePreviousLogMessage" = "The pre-existing log could not be cleared";
+"alertTunnelActivationBackendFailureMessage" = "Unable to turn on Go backend library.";
+"settingsSectionTitleExportConfigurations" = "Export configurations";
+"alertBadArchiveMessage" = "Bad or corrupt zip archive.";
+"settingsVersionKeyWireGuardGoBackend" = "WireGuard Go Backend";
+"macFieldOnDemandSSIDs" = "SSIDs:";
+"deletePeerConfirmationAlertMessage" = "Delete this peer?";
+"alertCantOpenOutputZipFileForWritingTitle" = "Unable to create zip archive";
+"alertNoTunnelsInImportedZipArchiveMessage" = "No .conf tunnel files were found inside the zip archive.";
+"alertTunnelActivationFileDescriptorFailureMessage" = "Unable to determine TUN device file descriptor.";
+"tunnelOnDemandOptionWiFiOrEthernet" = "Wi-Fi or ethernet";
+"macAlertNameIsEmpty" = "Name is required";
diff --git a/WireGuard.xcodeproj/project.pbxproj b/WireGuard.xcodeproj/project.pbxproj
index 30324fd..66f5739 100644
--- a/WireGuard.xcodeproj/project.pbxproj
+++ b/WireGuard.xcodeproj/project.pbxproj
@@ -399,24 +399,24 @@
6FDEF801218646B900D8FBF6 /* ZipArchive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZipArchive.swift; sourceTree = "<group>"; };
6FDEF805218725D200D8FBF6 /* SettingsTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTableViewController.swift; sourceTree = "<group>"; };
6FE1765521C90BBE002690EA /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Sources/WireGuardApp/Base.lproj/Localizable.strings; sourceTree = "<group>"; };
- A8FAC495E119A787EE15828E /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh-Hant; path = Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings; sourceTree = "<group>"; };
- 30E6E11BE16FC85D1D0D01A4 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh-Hans; path = Sources/WireGuardApp/zh-Hans.lproj/Localizable.strings; sourceTree = "<group>"; };
- F061DB3DF45406C134EB447E /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = Sources/WireGuardApp/id.lproj/Localizable.strings; sourceTree = "<group>"; };
- 798AA59731469050BB67A452 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Sources/WireGuardApp/it.lproj/Localizable.strings; sourceTree = "<group>"; };
- 2B3036C208ACF4E06D7DA53F /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Sources/WireGuardApp/de.lproj/Localizable.strings; sourceTree = "<group>"; };
- 43D66D9909C915207158175F /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Sources/WireGuardApp/fr.lproj/Localizable.strings; sourceTree = "<group>"; };
- 7644A930B7CB3B8882BC52FD /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = Sources/WireGuardApp/fi.lproj/Localizable.strings; sourceTree = "<group>"; };
- 937E473CD10EEFE3BC376098 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = Sources/WireGuardApp/fa.lproj/Localizable.strings; sourceTree = "<group>"; };
- E4EE4FEC7423A6BEBDE429BC /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = Sources/WireGuardApp/sl.lproj/Localizable.strings; sourceTree = "<group>"; };
- 854D4F78352DD4455C410962 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Sources/WireGuardApp/pl.lproj/Localizable.strings; sourceTree = "<group>"; };
- 8215B3EF8B68F0A53E6D8122 /* pa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pa; path = Sources/WireGuardApp/pa.lproj/Localizable.strings; sourceTree = "<group>"; };
- 795E9FCC698E54371188E366 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = Sources/WireGuardApp/ko.lproj/Localizable.strings; sourceTree = "<group>"; };
- E60BA3A8E202323CDD363B2B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = Sources/WireGuardApp/ca.lproj/Localizable.strings; sourceTree = "<group>"; };
- 1D38E2B7D24EC0ACEF2C5734 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Sources/WireGuardApp/ru.lproj/Localizable.strings; sourceTree = "<group>"; };
- EE7D06A3CCB7DAEF13330651 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Sources/WireGuardApp/ro.lproj/Localizable.strings; sourceTree = "<group>"; };
- 6F24475E40CC51CC6CC27993 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Sources/WireGuardApp/tr.lproj/Localizable.strings; sourceTree = "<group>"; };
- 31C0BC9131C140B617CA6713 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Sources/WireGuardApp/ja.lproj/Localizable.strings; sourceTree = "<group>"; };
- 2F19992DF3CB32BB376853A0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Sources/WireGuardApp/es.lproj/Localizable.strings; sourceTree = "<group>"; };
+ B42B98244F62B9607F9B45CA /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh-Hant; path = Sources/WireGuardApp/zh-Hant.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 30DA2ED43960DE77912BD89D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh-Hans; path = Sources/WireGuardApp/zh-Hans.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 2A4344354DDBADE335B5FD2D /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = Sources/WireGuardApp/id.lproj/Localizable.strings; sourceTree = "<group>"; };
+ B829B6E3BE26C748A53A64EE /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Sources/WireGuardApp/it.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 5042B6E2E62F7B7537D0EE57 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Sources/WireGuardApp/de.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 7872E185E096988E9990CC29 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Sources/WireGuardApp/fr.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 36AFA3DAC2091DD81699B978 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = Sources/WireGuardApp/fi.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 9A06FF3EF8255B77287F0195 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = Sources/WireGuardApp/fa.lproj/Localizable.strings; sourceTree = "<group>"; };
+ A7C540D3D2E36084F9AB8A0E /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = Sources/WireGuardApp/sl.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 241E007502395B1D0666EE3B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Sources/WireGuardApp/pl.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 95493F9EF05B71D3B1A5131C /* pa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pa; path = Sources/WireGuardApp/pa.lproj/Localizable.strings; sourceTree = "<group>"; };
+ C56DE3E0E402E403CA43BF97 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = Sources/WireGuardApp/ko.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 5BE8673E6D8166A17C07E2BC /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = Sources/WireGuardApp/ca.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 63ADFB23B4BDD4ECA5B8E84B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Sources/WireGuardApp/ru.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 47F144079FFBAE33E6A7320E /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Sources/WireGuardApp/ro.lproj/Localizable.strings; sourceTree = "<group>"; };
+ C383A8BE821704F21E30AC2A /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Sources/WireGuardApp/tr.lproj/Localizable.strings; sourceTree = "<group>"; };
+ BD397C79F39F133A747A55BB /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Sources/WireGuardApp/ja.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 88C333FB84302A6942903F37 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Sources/WireGuardApp/es.lproj/Localizable.strings; sourceTree = "<group>"; };
6FE1765921C90E87002690EA /* LocalizationHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationHelper.swift; sourceTree = "<group>"; };
6FE254FA219C10800028284D /* ZipImporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZipImporter.swift; sourceTree = "<group>"; };
6FE254FE219C60290028284D /* ZipExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZipExporter.swift; sourceTree = "<group>"; };
@@ -1501,24 +1501,24 @@
6FE1765421C90BBE002690EA /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
- A8FAC495E119A787EE15828E /* zh-Hant */,
- 30E6E11BE16FC85D1D0D01A4 /* zh-Hans */,
- F061DB3DF45406C134EB447E /* id */,
- 798AA59731469050BB67A452 /* it */,
- 2B3036C208ACF4E06D7DA53F /* de */,
- 43D66D9909C915207158175F /* fr */,
- 7644A930B7CB3B8882BC52FD /* fi */,
- 937E473CD10EEFE3BC376098 /* fa */,
- E4EE4FEC7423A6BEBDE429BC /* sl */,
- 854D4F78352DD4455C410962 /* pl */,
- 8215B3EF8B68F0A53E6D8122 /* pa */,
- 795E9FCC698E54371188E366 /* ko */,
- E60BA3A8E202323CDD363B2B /* ca */,
- 1D38E2B7D24EC0ACEF2C5734 /* ru */,
- EE7D06A3CCB7DAEF13330651 /* ro */,
- 6F24475E40CC51CC6CC27993 /* tr */,
- 31C0BC9131C140B617CA6713 /* ja */,
- 2F19992DF3CB32BB376853A0 /* es */,
+ B42B98244F62B9607F9B45CA /* zh-Hant */,
+ 30DA2ED43960DE77912BD89D /* zh-Hans */,
+ 2A4344354DDBADE335B5FD2D /* id */,
+ B829B6E3BE26C748A53A64EE /* it */,
+ 5042B6E2E62F7B7537D0EE57 /* de */,
+ 7872E185E096988E9990CC29 /* fr */,
+ 36AFA3DAC2091DD81699B978 /* fi */,
+ 9A06FF3EF8255B77287F0195 /* fa */,
+ A7C540D3D2E36084F9AB8A0E /* sl */,
+ 241E007502395B1D0666EE3B /* pl */,
+ 95493F9EF05B71D3B1A5131C /* pa */,
+ C56DE3E0E402E403CA43BF97 /* ko */,
+ 5BE8673E6D8166A17C07E2BC /* ca */,
+ 63ADFB23B4BDD4ECA5B8E84B /* ru */,
+ 47F144079FFBAE33E6A7320E /* ro */,
+ C383A8BE821704F21E30AC2A /* tr */,
+ BD397C79F39F133A747A55BB /* ja */,
+ 88C333FB84302A6942903F37 /* es */,
6FE1765521C90BBE002690EA /* Base */,
);
name = Localizable.strings;
diff --git a/sync-translations.sh b/sync-translations.sh
index f789010..26b64f8 100755
--- a/sync-translations.sh
+++ b/sync-translations.sh
@@ -3,6 +3,23 @@ set -e
curl -Lo - https://crowdin.com/backend/download/project/wireguard.zip | bsdtar -C Sources/WireGuardApp -x -f - --strip-components 3 wireguard-apple
find Sources/WireGuardApp/*.lproj -type f -empty -delete
find Sources/WireGuardApp/*.lproj -type d -empty -delete
+declare -A ALL_BASE
+while read -r key eq rest; do
+ [[ $key == \"* && $key == *\" && $eq == = ]] || continue
+ ALL_BASE["$key"]="$rest"
+done < Sources/WireGuardApp/Base.lproj/Localizable.strings
+for f in Sources/WireGuardApp/*.lproj/Localizable.strings; do
+ unset FOUND
+ declare -A FOUND
+ while read -r key eq _; do
+ [[ $key == \"* && $key == *\" && $eq == = ]] || continue
+ FOUND["$key"]=1
+ done < "$f"
+ for key in "${!ALL_BASE[@]}"; do
+ [[ ${FOUND["$key"]} -eq 1 ]] && continue
+ echo "$key = ${ALL_BASE["$key"]}"
+ done >> "$f"
+done < Sources/WireGuardApp/Base.lproj/Localizable.strings
git add Sources/WireGuardApp/*.lproj
declare -A LOCALE_MAP