aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-12-17 00:40:42 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-12-17 00:40:42 +0100
commit49b7d083f1d4b207a51a855bd1ec8cc7abb34c52 (patch)
treefb482bdc67a16253f5c13030731c6adc31a6f70b
parentKit: Adapter: do not treat NE settings timeouts as fatal (diff)
downloadwireguard-apple-49b7d083f1d4b207a51a855bd1ec8cc7abb34c52.tar.xz
wireguard-apple-49b7d083f1d4b207a51a855bd1ec8cc7abb34c52.zip
UI: add missing translations to incomplete locales
This is the wrong way to fix the problem. The correct way will involve moving away from the whacky tr() macro and using translations functions properly. But migrating to that will require some heavy scripting work. So for now, use a hammer. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-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