diff options
Diffstat (limited to 'ios')
45 files changed, 318 insertions, 860 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index 0e1af93ed2..800ab1655b 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -41,7 +41,6 @@ 5819C2142726CC8D00D6EC38 /* DataSourceSnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5819C2132726CC8D00D6EC38 /* DataSourceSnapshotTests.swift */; }; 5819C2152726CC9400D6EC38 /* DataSourceSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587EB66F27143B6500123C75 /* DataSourceSnapshot.swift */; }; 5819C2172729595500D6EC38 /* SettingsAddDNSEntryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5819C2162729595500D6EC38 /* SettingsAddDNSEntryCell.swift */; }; - 581FC4FA2695ACE100AA97BA /* Account.strings in Resources */ = {isa = PBXBuildFile; fileRef = 581FC4F82695ACE100AA97BA /* Account.strings */; }; 5820674E26E6510200655B05 /* REST.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5820674D26E6510200655B05 /* REST.swift */; }; 5820675026E6514100655B05 /* HTTP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5820674F26E6514100655B05 /* HTTP.swift */; }; 5820675526E6528200655B05 /* RelayCacheError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585DA87926B024F900B8C587 /* RelayCacheError.swift */; }; @@ -68,8 +67,6 @@ 582BB1AF229566420055B6EF /* SettingsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582BB1AE229566420055B6EF /* SettingsCell.swift */; }; 582BB1B1229569620055B6EF /* CustomNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582BB1B0229569620055B6EF /* CustomNavigationBar.swift */; }; 582BB1B3229574F40055B6EF /* SettingsAccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582BB1B2229574F40055B6EF /* SettingsAccountCell.swift */; }; - 582CFEE726945FC30072883A /* AppStoreSubscriptions.strings in Resources */ = {isa = PBXBuildFile; fileRef = 582CFEE526945FC30072883A /* AppStoreSubscriptions.strings */; }; - 582CFEEA269463B80072883A /* Settings.strings in Resources */ = {isa = PBXBuildFile; fileRef = 582CFEE8269463B80072883A /* Settings.strings */; }; 5835B7CC233B76CB0096D79F /* TunnelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5835B7CB233B76CB0096D79F /* TunnelManager.swift */; }; 5838318B27C40A3900000571 /* Pinger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5838318A27C40A3900000571 /* Pinger.swift */; }; 583DA21425FA4B5C00318683 /* LocationDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 583DA21325FA4B5C00318683 /* LocationDataSource.swift */; }; @@ -260,23 +257,6 @@ 58F3C0A4249CB069003E76BE /* HeaderBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F3C0A3249CB069003E76BE /* HeaderBarView.swift */; }; 58F3C0A624A50157003E76BE /* relays.json in Resources */ = {isa = PBXBuildFile; fileRef = 58F3C0A524A50155003E76BE /* relays.json */; }; 58F3C0A724A50C02003E76BE /* relays.json in Resources */ = {isa = PBXBuildFile; fileRef = 58F3C0A524A50155003E76BE /* relays.json */; }; - 58F558DD2695B85E00F630D0 /* Consent.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558DB2695B85E00F630D0 /* Consent.strings */; }; - 58F558E02695BD3E00F630D0 /* Login.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558DE2695BD3E00F630D0 /* Login.strings */; }; - 58F558E32695D1D800F630D0 /* Preferences.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558E12695D1D800F630D0 /* Preferences.strings */; }; - 58F558E62695D1F200F630D0 /* ProblemReport.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558E42695D1F200F630D0 /* ProblemReport.strings */; }; - 58F558E92695D20F00F630D0 /* SelectLocation.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558E72695D20F00F630D0 /* SelectLocation.strings */; }; - 58F558EC2695D26A00F630D0 /* REST.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558EA2695D26A00F630D0 /* REST.strings */; }; - 58F558EF2695D50D00F630D0 /* ProblemReportReview.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558ED2695D50D00F630D0 /* ProblemReportReview.strings */; }; - 58F558F92696EB1C00F630D0 /* StoreKitErrors.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558F32696EB1C00F630D0 /* StoreKitErrors.strings */; }; - 58F558FA2696EB1C00F630D0 /* TunnelManager.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558F52696EB1C00F630D0 /* TunnelManager.strings */; }; - 58F558FB2696EB1C00F630D0 /* AppStorePaymentManager.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558F72696EB1C00F630D0 /* AppStorePaymentManager.strings */; }; - 58F558FE2696F09100F630D0 /* KeyboardNavigation.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558FC2696F09100F630D0 /* KeyboardNavigation.strings */; }; - 58F5590B2697002100F630D0 /* CustomDateComponentsFormatting.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F558FF2697002000F630D0 /* CustomDateComponentsFormatting.strings */; }; - 58F5590D2697002100F630D0 /* AccountInput.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F559032697002000F630D0 /* AccountInput.strings */; }; - 58F5590E2697002100F630D0 /* Main.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F559052697002000F630D0 /* Main.strings */; }; - 58F5590F2697002100F630D0 /* ConnectionPanel.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F559072697002100F630D0 /* ConnectionPanel.strings */; }; - 58F559102697002100F630D0 /* HeaderBar.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F559092697002100F630D0 /* HeaderBar.strings */; }; - 58F61F4F2692F21C00DCFC2B /* WireguardKeys.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58F61F4D2692F21C00DCFC2B /* WireguardKeys.strings */; }; 58F7CA882692E34000FC59FD /* WireguardKeysContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F7CA872692E34000FC59FD /* WireguardKeysContentView.swift */; }; 58F7D26527EB50A300E4D821 /* ResultOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F7D26427EB50A300E4D821 /* ResultOperation.swift */; }; 58F840B22464491D0044E708 /* ChainedError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F840B12464491D0044E708 /* ChainedError.swift */; }; @@ -369,7 +349,6 @@ 58161C9B28352F850028ECFD /* MigrateSettingsOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrateSettingsOperation.swift; sourceTree = "<group>"; }; 5819C2132726CC8D00D6EC38 /* DataSourceSnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSourceSnapshotTests.swift; sourceTree = "<group>"; }; 5819C2162729595500D6EC38 /* SettingsAddDNSEntryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsAddDNSEntryCell.swift; sourceTree = "<group>"; }; - 581FC4F92695ACE100AA97BA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Account.strings; sourceTree = "<group>"; }; 5820674D26E6510200655B05 /* REST.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = REST.swift; sourceTree = "<group>"; }; 5820674F26E6514100655B05 /* HTTP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTP.swift; sourceTree = "<group>"; }; 5820675A26E6576800655B05 /* RelayCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayCache.swift; sourceTree = "<group>"; }; @@ -388,8 +367,6 @@ 582BB1AE229566420055B6EF /* SettingsCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsCell.swift; sourceTree = "<group>"; }; 582BB1B0229569620055B6EF /* CustomNavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomNavigationBar.swift; sourceTree = "<group>"; }; 582BB1B2229574F40055B6EF /* SettingsAccountCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsAccountCell.swift; sourceTree = "<group>"; }; - 582CFEE626945FC30072883A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AppStoreSubscriptions.strings; sourceTree = "<group>"; }; - 582CFEE9269463B80072883A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Settings.strings; sourceTree = "<group>"; }; 5835B7CB233B76CB0096D79F /* TunnelManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelManager.swift; sourceTree = "<group>"; }; 5838318A27C40A3900000571 /* Pinger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pinger.swift; sourceTree = "<group>"; }; 583DA21325FA4B5C00318683 /* LocationDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationDataSource.swift; sourceTree = "<group>"; }; @@ -545,23 +522,6 @@ 58F2E14B276A61C000A79513 /* RotateKeyOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RotateKeyOperation.swift; sourceTree = "<group>"; }; 58F3C0A3249CB069003E76BE /* HeaderBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderBarView.swift; sourceTree = "<group>"; }; 58F3C0A524A50155003E76BE /* relays.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = relays.json; sourceTree = "<group>"; }; - 58F558DC2695B85E00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Consent.strings; sourceTree = "<group>"; }; - 58F558DF2695BD3E00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Login.strings; sourceTree = "<group>"; }; - 58F558E22695D1D800F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Preferences.strings; sourceTree = "<group>"; }; - 58F558E52695D1F200F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ProblemReport.strings; sourceTree = "<group>"; }; - 58F558E82695D20F00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/SelectLocation.strings; sourceTree = "<group>"; }; - 58F558EB2695D26A00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/REST.strings; sourceTree = "<group>"; }; - 58F558EE2695D50D00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ProblemReportReview.strings; sourceTree = "<group>"; }; - 58F558F42696EB1C00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/StoreKitErrors.strings; sourceTree = "<group>"; }; - 58F558F62696EB1C00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/TunnelManager.strings; sourceTree = "<group>"; }; - 58F558F82696EB1C00F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AppStorePaymentManager.strings; sourceTree = "<group>"; }; - 58F558FD2696F09100F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/KeyboardNavigation.strings; sourceTree = "<group>"; }; - 58F559002697002000F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/CustomDateComponentsFormatting.strings; sourceTree = "<group>"; }; - 58F559042697002000F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AccountInput.strings; sourceTree = "<group>"; }; - 58F559062697002000F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = "<group>"; }; - 58F559082697002100F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ConnectionPanel.strings; sourceTree = "<group>"; }; - 58F5590A2697002100F630D0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/HeaderBar.strings; sourceTree = "<group>"; }; - 58F61F4E2692F21C00DCFC2B /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/WireguardKeys.strings; sourceTree = "<group>"; }; 58F7CA872692E34000FC59FD /* WireguardKeysContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireguardKeysContentView.swift; sourceTree = "<group>"; }; 58F7D26427EB50A300E4D821 /* ResultOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultOperation.swift; sourceTree = "<group>"; }; 58F840B12464491D0044E708 /* ChainedError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainedError.swift; sourceTree = "<group>"; }; @@ -705,27 +665,7 @@ 582CFEE1269448160072883A /* Localizations */ = { isa = PBXGroup; children = ( - 581FC4F82695ACE100AA97BA /* Account.strings */, - 58F559032697002000F630D0 /* AccountInput.strings */, - 58F558F72696EB1C00F630D0 /* AppStorePaymentManager.strings */, - 582CFEE526945FC30072883A /* AppStoreSubscriptions.strings */, - 58F559072697002100F630D0 /* ConnectionPanel.strings */, - 58F558DB2695B85E00F630D0 /* Consent.strings */, - 58F558FF2697002000F630D0 /* CustomDateComponentsFormatting.strings */, - 58F559092697002100F630D0 /* HeaderBar.strings */, - 58F558FC2696F09100F630D0 /* KeyboardNavigation.strings */, 587B7543266922BF00DEF7E9 /* Localizable.strings */, - 58F558DE2695BD3E00F630D0 /* Login.strings */, - 58F559052697002000F630D0 /* Main.strings */, - 58F558EA2695D26A00F630D0 /* REST.strings */, - 58F558E12695D1D800F630D0 /* Preferences.strings */, - 58F558E42695D1F200F630D0 /* ProblemReport.strings */, - 58F558ED2695D50D00F630D0 /* ProblemReportReview.strings */, - 58F558E72695D20F00F630D0 /* SelectLocation.strings */, - 582CFEE8269463B80072883A /* Settings.strings */, - 58F558F32696EB1C00F630D0 /* StoreKitErrors.strings */, - 58F558F52696EB1C00F630D0 /* TunnelManager.strings */, - 58F61F4D2692F21C00DCFC2B /* WireguardKeys.strings */, ); name = Localizations; path = MullvadVPN; @@ -1208,32 +1148,12 @@ buildActionMask = 2147483647; files = ( 58F3C0A624A50157003E76BE /* relays.json in Resources */, - 58F558DD2695B85E00F630D0 /* Consent.strings in Resources */, 58727283265D173C00F315B2 /* LaunchScreen.storyboard in Resources */, - 58F558FB2696EB1C00F630D0 /* AppStorePaymentManager.strings in Resources */, 586ADD4723FC13F400CE9E87 /* countries.geo.json in Resources */, - 58F5590F2697002100F630D0 /* ConnectionPanel.strings in Resources */, - 58F558FA2696EB1C00F630D0 /* TunnelManager.strings in Resources */, - 58F558E02695BD3E00F630D0 /* Login.strings in Resources */, 58095C572760F47900890776 /* api-ip-address.json in Resources */, 58CE5E6B224146210008646E /* Assets.xcassets in Resources */, - 58F558E92695D20F00F630D0 /* SelectLocation.strings in Resources */, 5883A09E266A5AF7003EFFCB /* Localizable.strings in Resources */, - 58F558E32695D1D800F630D0 /* Preferences.strings in Resources */, - 582CFEE726945FC30072883A /* AppStoreSubscriptions.strings in Resources */, - 58F558EF2695D50D00F630D0 /* ProblemReportReview.strings in Resources */, - 58F558E62695D1F200F630D0 /* ProblemReport.strings in Resources */, - 58F5590D2697002100F630D0 /* AccountInput.strings in Resources */, - 58F559102697002100F630D0 /* HeaderBar.strings in Resources */, - 58F558F92696EB1C00F630D0 /* StoreKitErrors.strings in Resources */, 584789BE264D4A2A000E45FB /* le_root_cert.cer in Resources */, - 58F61F4F2692F21C00DCFC2B /* WireguardKeys.strings in Resources */, - 58F5590B2697002100F630D0 /* CustomDateComponentsFormatting.strings in Resources */, - 58F5590E2697002100F630D0 /* Main.strings in Resources */, - 58F558FE2696F09100F630D0 /* KeyboardNavigation.strings in Resources */, - 581FC4FA2695ACE100AA97BA /* Account.strings in Resources */, - 58F558EC2695D26A00F630D0 /* REST.strings in Resources */, - 582CFEEA269463B80072883A /* Settings.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1565,30 +1485,6 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 581FC4F82695ACE100AA97BA /* Account.strings */ = { - isa = PBXVariantGroup; - children = ( - 581FC4F92695ACE100AA97BA /* en */, - ); - name = Account.strings; - sourceTree = "<group>"; - }; - 582CFEE526945FC30072883A /* AppStoreSubscriptions.strings */ = { - isa = PBXVariantGroup; - children = ( - 582CFEE626945FC30072883A /* en */, - ); - name = AppStoreSubscriptions.strings; - sourceTree = "<group>"; - }; - 582CFEE8269463B80072883A /* Settings.strings */ = { - isa = PBXVariantGroup; - children = ( - 582CFEE9269463B80072883A /* en */, - ); - name = Settings.strings; - sourceTree = "<group>"; - }; 587B7543266922BF00DEF7E9 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -1597,142 +1493,6 @@ name = Localizable.strings; sourceTree = "<group>"; }; - 58F558DB2695B85E00F630D0 /* Consent.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558DC2695B85E00F630D0 /* en */, - ); - name = Consent.strings; - sourceTree = "<group>"; - }; - 58F558DE2695BD3E00F630D0 /* Login.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558DF2695BD3E00F630D0 /* en */, - ); - name = Login.strings; - sourceTree = "<group>"; - }; - 58F558E12695D1D800F630D0 /* Preferences.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558E22695D1D800F630D0 /* en */, - ); - name = Preferences.strings; - sourceTree = "<group>"; - }; - 58F558E42695D1F200F630D0 /* ProblemReport.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558E52695D1F200F630D0 /* en */, - ); - name = ProblemReport.strings; - sourceTree = "<group>"; - }; - 58F558E72695D20F00F630D0 /* SelectLocation.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558E82695D20F00F630D0 /* en */, - ); - name = SelectLocation.strings; - sourceTree = "<group>"; - }; - 58F558EA2695D26A00F630D0 /* REST.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558EB2695D26A00F630D0 /* en */, - ); - name = REST.strings; - sourceTree = "<group>"; - }; - 58F558ED2695D50D00F630D0 /* ProblemReportReview.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558EE2695D50D00F630D0 /* en */, - ); - name = ProblemReportReview.strings; - sourceTree = "<group>"; - }; - 58F558F32696EB1C00F630D0 /* StoreKitErrors.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558F42696EB1C00F630D0 /* en */, - ); - name = StoreKitErrors.strings; - sourceTree = "<group>"; - }; - 58F558F52696EB1C00F630D0 /* TunnelManager.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558F62696EB1C00F630D0 /* en */, - ); - name = TunnelManager.strings; - sourceTree = "<group>"; - }; - 58F558F72696EB1C00F630D0 /* AppStorePaymentManager.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558F82696EB1C00F630D0 /* en */, - ); - name = AppStorePaymentManager.strings; - sourceTree = "<group>"; - }; - 58F558FC2696F09100F630D0 /* KeyboardNavigation.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F558FD2696F09100F630D0 /* en */, - ); - name = KeyboardNavigation.strings; - sourceTree = "<group>"; - }; - 58F558FF2697002000F630D0 /* CustomDateComponentsFormatting.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F559002697002000F630D0 /* en */, - ); - name = CustomDateComponentsFormatting.strings; - sourceTree = "<group>"; - }; - 58F559032697002000F630D0 /* AccountInput.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F559042697002000F630D0 /* en */, - ); - name = AccountInput.strings; - sourceTree = "<group>"; - }; - 58F559052697002000F630D0 /* Main.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F559062697002000F630D0 /* en */, - ); - name = Main.strings; - sourceTree = "<group>"; - }; - 58F559072697002100F630D0 /* ConnectionPanel.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F559082697002100F630D0 /* en */, - ); - name = ConnectionPanel.strings; - sourceTree = "<group>"; - }; - 58F559092697002100F630D0 /* HeaderBar.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F5590A2697002100F630D0 /* en */, - ); - name = HeaderBar.strings; - sourceTree = "<group>"; - }; - 58F61F4D2692F21C00DCFC2B /* WireguardKeys.strings */ = { - isa = PBXVariantGroup; - children = ( - 58F61F4E2692F21C00DCFC2B /* en */, - ); - name = WireguardKeys.strings; - sourceTree = "<group>"; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/ios/MullvadVPN/AccountContentView.swift b/ios/MullvadVPN/AccountContentView.swift index da3a8fa85f..e61dc0688b 100644 --- a/ios/MullvadVPN/AccountContentView.swift +++ b/ios/MullvadVPN/AccountContentView.swift @@ -108,7 +108,12 @@ class AccountTokenRow: UIView { private let textLabel: UILabel = { let textLabel = UILabel() textLabel.translatesAutoresizingMaskIntoConstraints = false - textLabel.text = NSLocalizedString("ACCOUNT_TOKEN_LABEL", tableName: "Account", comment: "") + textLabel.text = NSLocalizedString( + "ACCOUNT_TOKEN_LABEL", + tableName: "Account", + value: "Account number", + comment: "" + ) textLabel.font = UIFont.systemFont(ofSize: 14) textLabel.textColor = UIColor(white: 1.0, alpha: 0.6) return textLabel @@ -121,7 +126,12 @@ class AccountTokenRow: UIView { button.setTitleColor(.white, for: .normal) button.contentHorizontalAlignment = .leading button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 1) - button.accessibilityHint = NSLocalizedString("ACCOUNT_TOKEN_ACCESSIBILITY_HINT", tableName: "Account", comment: "") + button.accessibilityHint = NSLocalizedString( + "ACCOUNT_TOKEN_ACCESSIBILITY_HINT", + tableName: "Account", + value: "Tap to copy to pasteboard.", + comment: "" + ) return button }() @@ -148,6 +158,7 @@ class AccountTokenRow: UIView { let actionName = NSLocalizedString( "ACCOUNT_TOKEN_ACCESSIBILITY_ACTION_TITLE", tableName: "Account", + value: "Copy account token to pasteboard", comment: "" ) accessibilityCustomActions = [UIAccessibilityCustomAction(name: actionName, target: self, selector: #selector(performAccessibilityAction))] @@ -179,7 +190,7 @@ class AccountExpiryRow: UIView { "ACCOUNT_OUT_OF_TIME_LABEL", tableName: "Account", value: "OUT OF TIME", - comment: "Label displayed in place of account expiration when account is out of time." + comment: "" ) valueLabel.text = localizedString @@ -206,7 +217,12 @@ class AccountExpiryRow: UIView { private let textLabel: UILabel = { let textLabel = UILabel() textLabel.translatesAutoresizingMaskIntoConstraints = false - textLabel.text = NSLocalizedString("ACCOUNT_EXPIRY_LABEL", tableName: "Account", comment: "") + textLabel.text = NSLocalizedString( + "ACCOUNT_EXPIRY_LABEL", + tableName: "Account", + value: "Paid until", + comment: "" + ) textLabel.font = UIFont.systemFont(ofSize: 14) textLabel.textColor = UIColor(white: 1.0, alpha: 0.6) return textLabel diff --git a/ios/MullvadVPN/AccountInputGroupView.swift b/ios/MullvadVPN/AccountInputGroupView.swift index e4e3c47638..c55b374190 100644 --- a/ios/MullvadVPN/AccountInputGroupView.swift +++ b/ios/MullvadVPN/AccountInputGroupView.swift @@ -24,7 +24,7 @@ class AccountInputGroupView: UIView { "ACCOUNT_INPUT_LOGIN_BUTTON_ACCESSIBILITY_LABEL", tableName: "AccountInput", value: "Log in", - comment: "Accessibility label for submit button in account token input." + comment: "" ) return button }() diff --git a/ios/MullvadVPN/AccountViewController.swift b/ios/MullvadVPN/AccountViewController.swift index 164985e316..c0fe6a33a8 100644 --- a/ios/MullvadVPN/AccountViewController.swift +++ b/ios/MullvadVPN/AccountViewController.swift @@ -80,7 +80,8 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb navigationItem.title = NSLocalizedString( "NAVIGATION_TITLE", tableName: "Account", - comment: "Navigation title" + value: "Account", + comment: "" ) contentView.accountTokenRowView.value = TunnelManager.shared.accountNumber.map { string in @@ -152,7 +153,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "PURCHASE_BUTTON_TITLE_FORMAT", tableName: "Account", value: "%1$@ (%2$@)", - comment: "Purchase button title: <TITLE> (<PRICE>). The order can be changed by swapping %1 and %2." + comment: "" ) let title = String(format: format, localizedTitle, localizedPrice) @@ -164,7 +165,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "PURCHASE_BUTTON_CANNOT_CONNECT_TO_APPSTORE_LABEL", tableName: "Account", value: "Cannot connect to AppStore", - comment: "Purchase button title displayed when unable to load the price of in-app purchase." + comment: "" ) contentView.purchaseButton.setTitle(title, for: .normal) @@ -175,7 +176,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "PURCHASE_BUTTON_PAYMENTS_RESTRICTED_LABEL", tableName: "Account", value: "Payments restricted", - comment: "Purchase button title displayed when payments are restriced on device." + comment: "" ) contentView.purchaseButton.setTitle(title, for: .normal) @@ -238,12 +239,14 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb title: NSLocalizedString( "LOGOUT_CONFIRMATION_ALERT_TITLE", tableName: "Account", - comment: "Title for logout dialog" + value: "Log out", + comment: "" ), message: NSLocalizedString( "LOGOUT_CONFIRMATION_ALERT_MESSAGE", tableName: "Account", - comment: "Message for logout dialog" + value: "Are you sure you want to log out?\n\nThis will erase the account number from this device. It is not possible for us to recover it for you. Make sure you have your account number saved somewhere, to be able to log back in.", + comment: "" ), preferredStyle: .alert ) @@ -254,7 +257,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "LOGOUT_CONFIRMATION_ALERT_CANCEL_ACTION", tableName: "Account", value: "Cancel", - comment: "Title for cancel button in logout dialog" + comment: "" ), style: .cancel, handler: { (alertAction) in @@ -268,7 +271,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "LOGOUT_CONFIRMATION_ALERT_YES_ACTION", tableName: "Account", value: "Log out", - comment: "Title for confirmation button in logout dialog" + comment: "" ), style: .destructive, handler: { (alertAction) in @@ -284,7 +287,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "LOGGING_OUT_ALERT_TITLE", tableName: "Account", value: "Logging out. Please wait...", - comment: "Modal message displayed during logout" + comment: "" ) let alertController = UIAlertController( @@ -326,7 +329,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "CANNOT_COMPLETE_PURCHASE_ALERT_TITLE", tableName: "Account", value: "Cannot complete the purchase", - comment: "Title for purchase failure dialog" + comment: "" ), message: error.errorChainDescription, preferredStyle: .alert @@ -338,7 +341,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "CANNOT_COMPLETE_PURCHASE_ALERT_OK_ACTION", tableName: "Account", value: "OK", - comment: "Title for OK button in purchase failure dialog" + comment: "" ), style: .cancel) ) @@ -374,7 +377,8 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb contentView.accountTokenRowView.value = NSLocalizedString( "COPIED_TO_PASTEBOARD_LABEL", tableName: "Account", - comment: "Message, temporarily displayed in place account token, after copying the account token to pasteboard on tap." + value: "COPIED TO PASTEBOARD!", + comment: "" ) let workItem = DispatchWorkItem { [weak self] in @@ -416,7 +420,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "RESTORE_PURCHASES_FAILURE_ALERT_TITLE", tableName: "Account", value: "Cannot restore purchases", - comment: "Title for failure dialog when restoring purchases" + comment: "" ), message: error.errorChainDescription, preferredStyle: .alert @@ -426,7 +430,7 @@ class AccountViewController: UIViewController, AppStorePaymentObserver, TunnelOb "RESTORE_PURCHASES_FAILURE_ALERT_OK_ACTION", tableName: "Account", value: "OK", - comment: "Title for 'OK' button in failure dialog when restoring purchases" + comment: "" ), style: .cancel) ) self.alertPresenter.enqueue(alertController, presentingController: self) @@ -459,13 +463,14 @@ private extension REST.CreateApplePaymentResponse { "TIME_ADDED_ALERT_SUCCESS_TITLE", tableName: "Account", value: "Thanks for your purchase", - comment: "Title for purchase completion dialog" + comment: "" ) case .restoration: return NSLocalizedString( "RESTORE_PURCHASES_ALERT_TITLE", - tableName: "Account", value: "Restore purchases", - comment: "Title for purchase restoration dialog" + tableName: "Account", + value: "Restore purchases", + comment: "" ) } } @@ -478,7 +483,7 @@ private extension REST.CreateApplePaymentResponse { "TIME_ADDED_ALERT_SUCCESS_MESSAGE", tableName: "Account", value: "%@ have been added to your account", - comment: "Message displayed upon successful purchase and containing the time duration credited to user account. Use %@ placeholder to position the localized text with duration added (i.e '30 days')" + comment: "" ), formattedTimeAdded ?? "" ) @@ -489,7 +494,7 @@ private extension REST.CreateApplePaymentResponse { "RESTORE_PURCHASES_ALERT_NO_TIME_ADDED_MESSAGE", tableName: "Account", value: "Your previous purchases have already been added to this account.", - comment: "Message displayed when no time credited to user account during purchase restoration; communicates that user account has already been credited with all outstanding purchased time duration." + comment: "" ) case .timeAdded: return String( @@ -497,7 +502,7 @@ private extension REST.CreateApplePaymentResponse { "RESTORE_PURCHASES_ALERT_TIME_ADDED_MESSAGE", tableName: "Account", value: "%@ have been added to your account", - comment: "Message displayed upon successful restoration of existing purchases, containing the time duration credited to user account. Use %@ placeholder to position the localized text with duration added (i.e '30 days')" + comment: "" ), formattedTimeAdded ?? "" ) diff --git a/ios/MullvadVPN/AppStorePaymentManager/AppStoreSubscription.swift b/ios/MullvadVPN/AppStorePaymentManager/AppStoreSubscription.swift index a46e2310bf..4c126bfdc3 100644 --- a/ios/MullvadVPN/AppStorePaymentManager/AppStoreSubscription.swift +++ b/ios/MullvadVPN/AppStorePaymentManager/AppStoreSubscription.swift @@ -19,7 +19,8 @@ enum AppStoreSubscription: String { return NSLocalizedString( "APPSTORE_SUBSCRIPTION_TITLE_ADD_30_DAYS", tableName: "AppStoreSubscriptions", - comment: "Title for non-renewable subscription that credits 30 days to user account." + value: "Add 30 days time", + comment: "" ) } } diff --git a/ios/MullvadVPN/ConnectionPanelView.swift b/ios/MullvadVPN/ConnectionPanelView.swift index e9cfc82d8e..c4ea1c7b6a 100644 --- a/ios/MullvadVPN/ConnectionPanelView.swift +++ b/ios/MullvadVPN/ConnectionPanelView.swift @@ -34,6 +34,7 @@ class ConnectionPanelView: UIView { collapseButton.accessibilityLabel = NSLocalizedString( "RELAY_ACCESSIBILITY_LABEL", tableName: "ConnectionPanel", + value: "Connected relay", comment: "" ) collapseButton.accessibilityAttributedValue = NSAttributedString( @@ -78,11 +79,13 @@ class ConnectionPanelView: UIView { inAddressRow.title = NSLocalizedString( "IN_ADDRESS_LABEL", tableName: "ConnectionPanel", + value: "In", comment: "" ) outAddressRow.title = NSLocalizedString( "OUT_ADDRESS_LABEL", tableName: "ConnectionPanel", + value: "Out", comment: "" ) @@ -145,12 +148,14 @@ class ConnectionPanelView: UIView { collapseButton.accessibilityHint = NSLocalizedString( "COLLAPSE_BUTTON_ACCESSIBILITY_HINT", tableName: "ConnectionPanel", + value: "Double tap to collapse the connection info panel.", comment: "" ) } else { collapseButton.accessibilityHint = NSLocalizedString( "EXPAND_BUTTON_ACCESSIBILITY_HINT", tableName: "ConnectionPanel", + value: "Double tap to expand the connection info panel.", comment: "" ) } diff --git a/ios/MullvadVPN/ConsentContentView.swift b/ios/MullvadVPN/ConsentContentView.swift index a6cf6af654..1578962499 100644 --- a/ios/MullvadVPN/ConsentContentView.swift +++ b/ios/MullvadVPN/ConsentContentView.swift @@ -17,7 +17,12 @@ class ConsentContentView: UIView { titleLabel.numberOfLines = 0 titleLabel.textColor = .white titleLabel.allowsDefaultTighteningForTruncation = true - titleLabel.text = NSLocalizedString("PRIVACY_NOTICE_HEADING", tableName: "Consent", comment: "Heading.") + titleLabel.text = NSLocalizedString( + "PRIVACY_NOTICE_HEADING", + tableName: "Consent", + value: "Do you agree to remaining anonymous?", + comment: "" + ) titleLabel.lineBreakMode = .byWordWrapping if #available(iOS 14.0, *) { // Disable the new line break strategy used by UIKit that moves at least two words @@ -34,7 +39,12 @@ class ConsentContentView: UIView { bodyLabel.font = UIFont.systemFont(ofSize: 18) bodyLabel.textColor = .white bodyLabel.numberOfLines = 0 - bodyLabel.text = NSLocalizedString("PRIVACY_NOTICE_BODY", tableName: "Consent", comment: "Body.") + bodyLabel.text = NSLocalizedString( + "PRIVACY_NOTICE_BODY", + tableName: "Consent", + value: "You have a right to privacy. That’s why we never store activity logs, don't ask for personal information, and encourage anonymous payments.\n\nIn some situations, as outlined in our privacy policy, we might process personal data that you choose to send, for example if you email us.\n\nWe strongly believe in retaining as little data as possible because we want you to remain anonymous.", + comment: "" + ) return bodyLabel }() @@ -44,7 +54,8 @@ class ConsentContentView: UIView { button.titleString = NSLocalizedString( "PRIVACY_POLICY_LINK_TITLE", tableName: "Consent", - comment: "Title for link to privacy policy web page." + value: "Privacy policy", + comment: "" ) button.setImage(UIImage(named: "IconExtlink"), for: .normal) return button @@ -57,7 +68,8 @@ class ConsentContentView: UIView { button.setTitle(NSLocalizedString( "CONTINUE_BUTTON_TITLE", tableName: "Consent", - comment: "Title for button used for agreeing with privacy notice." + value: "Agree and continue", + comment: "" ), for: .normal) return button }() diff --git a/ios/MullvadVPN/DisplayChainedError.swift b/ios/MullvadVPN/DisplayChainedError.swift index d5955e3aae..065baddee4 100644 --- a/ios/MullvadVPN/DisplayChainedError.swift +++ b/ios/MullvadVPN/DisplayChainedError.swift @@ -169,7 +169,7 @@ extension TunnelManager.Error: DisplayChainedError { case .rotateKey(let restError): return String( format: NSLocalizedString( - "ROTATE_KY_ERROR", + "ROTATE_KEY_ERROR", tableName: "TunnelManager", value: "Failed to rotate WireGuard key: %@", comment: "" @@ -238,35 +238,35 @@ extension SKError: LocalizedError { return NSLocalizedString( "UNKNOWN_ERROR", tableName: "StoreKitErrors", - value: "Unknown error", + value: "Unknown error.", comment: "" ) case .clientInvalid: return NSLocalizedString( "CLIENT_INVALID", tableName: "StoreKitErrors", - value: "Client is not allowed to issue the request", + value: "Client is not allowed to issue the request.", comment: "" ) case .paymentCancelled: return NSLocalizedString( "PAYMENT_CANCELLED", tableName: "StoreKitErrors", - value: "User cancelled the request", + value: "User cancelled the request.", comment: "" ) case .paymentInvalid: return NSLocalizedString( "PAYMENT_INVALID", tableName: "StoreKitErrors", - value: "Invalid purchase identifier", + value: "Invalid purchase identifier.", comment: "" ) case .paymentNotAllowed: return NSLocalizedString( "PAYMENT_NOT_ALLOWED", tableName: "StoreKitErrors", - value: "This device is not allowed to make the payment", + value: "This device is not allowed to make the payment.", comment: "" ) default: @@ -282,7 +282,7 @@ extension AppStorePaymentManager.Error: DisplayChainedError { return NSLocalizedString( "NO_ACCOUNT_SET_ERROR", tableName: "AppStorePaymentManager", - value: "Internal error: account is not set", + value: "Internal error: account is not set.", comment: "" ) diff --git a/ios/MullvadVPN/LoginContentView.swift b/ios/MullvadVPN/LoginContentView.swift index 1952bb2e4e..18f3e5df08 100644 --- a/ios/MullvadVPN/LoginContentView.swift +++ b/ios/MullvadVPN/LoginContentView.swift @@ -72,6 +72,7 @@ class LoginContentView: UIView { textLabel.text = NSLocalizedString( "CREATE_BUTTON_HEADER_LABEL", tableName: "Login", + value: "Don't have an account number?", comment: "" ) return textLabel @@ -83,6 +84,7 @@ class LoginContentView: UIView { button.setTitle(NSLocalizedString( "CREATE_ACCOUNT_BUTTON_LABEL", tableName: "Login", + value: "Create account", comment: "" ), for: .normal) return button diff --git a/ios/MullvadVPN/LoginViewController.swift b/ios/MullvadVPN/LoginViewController.swift index cba1f78992..b36f83dd8d 100644 --- a/ios/MullvadVPN/LoginViewController.swift +++ b/ios/MullvadVPN/LoginViewController.swift @@ -52,7 +52,8 @@ class LoginViewController: UIViewController, RootContainment { title: NSLocalizedString( "LOGIN_ACCESSORY_TOOLBAR_BUTTON_TITLE", tableName: "Login", - comment: "Title for 'Log in' button displayed in toolbar above keyboard on iPhone." + value: "Log in", + comment: "" ), style: .done, target: self, @@ -315,16 +316,36 @@ private extension LoginState { var localizedTitle: String { switch self { case .default: - return NSLocalizedString("HEADING_TITLE_DEFAULT", tableName: "Login", comment: "Default login prompt heading.") + return NSLocalizedString( + "HEADING_TITLE_DEFAULT", + tableName: "Login", + value: "Login", + comment: "" + ) case .authenticating: - return NSLocalizedString("HEADING_TITLE_AUTHENTICATING", tableName: "Login", comment: "Heading displayed during authentication.") + return NSLocalizedString( + "HEADING_TITLE_AUTHENTICATING", + tableName: "Login", + value: "Logging in...", + comment: "" + ) case .failure: - return NSLocalizedString("HEADING_TITLE_FAILURE", tableName: "Login", comment: "Heading displayed upon failure to authenticate.") + return NSLocalizedString( + "HEADING_TITLE_FAILURE", + tableName: "Login", + value: "Login failed", + comment: "" + ) case .success: - return NSLocalizedString("HEADING_TITLE_SUCCESS", tableName: "Login", comment: "Heading displayed upon successful authentication.") + return NSLocalizedString( + "HEADING_TITLE_SUCCESS", + tableName: "Login", + value: "Logged in", + comment: "" + ) } } @@ -334,7 +355,8 @@ private extension LoginState { return NSLocalizedString( "SUBHEAD_TITLE_DEFAULT", tableName: "Login", - comment: "Default login prompt subhead." + value: "Enter your account number", + comment: "" ) case .authenticating(let method): @@ -343,13 +365,15 @@ private extension LoginState { return NSLocalizedString( "SUBHEAD_TITLE_AUTHENTICATING", tableName: "Login", - comment: "Subhead displayed during authentication." + value: "Checking account number", + comment: "" ) case .newAccount: return NSLocalizedString( "SUBHEAD_TITLE_CREATING_ACCOUNT", tableName: "Login", - comment: "Subhead displayed when creating new account." + value: "Creating new account", + comment: "" ) } @@ -362,13 +386,15 @@ private extension LoginState { return NSLocalizedString( "SUBHEAD_TITLE_SUCCESS", tableName: "Login", - comment: "Subhead displayed upon successful authentication using existing account token." + value: "Correct account number", + comment: "" ) case .newAccount: return NSLocalizedString( "SUBHEAD_TITLE_CREATED_ACCOUNT", tableName: "Login", - comment: "Subhead displayed upon successful authentication with newly created account token." + value: "Account created", + comment: "" ) } } diff --git a/ios/MullvadVPN/Notifications/AccountExpiryNotificationProvider.swift b/ios/MullvadVPN/Notifications/AccountExpiryNotificationProvider.swift index 4fd9aacdef..51633cc85a 100644 --- a/ios/MullvadVPN/Notifications/AccountExpiryNotificationProvider.swift +++ b/ios/MullvadVPN/Notifications/AccountExpiryNotificationProvider.swift @@ -111,11 +111,13 @@ class AccountExpiryNotificationProvider: NotificationProvider, SystemNotificatio style: .warning, title: NSLocalizedString( "ACCOUNT_EXPIRY_INAPP_NOTIFICATION_TITLE", + value: "ACCOUNT CREDIT EXPIRES SOON", comment: "Title for in-app notification, displayed within the last 3 days until account expiry." ), body: String( format: NSLocalizedString( "ACCOUNT_EXPIRY_INAPP_NOTIFICATION_BODY", + value: "%@ left. Buy more credit.", comment: "Message for in-app notification, displayed within the last 3 days until account expiry." ), duration ) diff --git a/ios/MullvadVPN/Notifications/TunnelErrorNotificationProvider.swift b/ios/MullvadVPN/Notifications/TunnelErrorNotificationProvider.swift index afc6e5aa72..de0aab4653 100644 --- a/ios/MullvadVPN/Notifications/TunnelErrorNotificationProvider.swift +++ b/ios/MullvadVPN/Notifications/TunnelErrorNotificationProvider.swift @@ -19,7 +19,11 @@ class TunnelErrorNotificationProvider: NotificationProvider, InAppNotificationPr return InAppNotificationDescriptor( identifier: identifier, style: .error, - title: NSLocalizedString("TUNNEL_ERROR_INAPP_NOTIFICATION_TITLE", comment: ""), + title: NSLocalizedString( + "TUNNEL_ERROR_INAPP_NOTIFICATION_TITLE", + value: "Tunnel error", + comment: "" + ), body: lastError.errorChainDescription ?? "No error description provided." ) } diff --git a/ios/MullvadVPN/PreferencesViewController.swift b/ios/MullvadVPN/PreferencesViewController.swift index 6d21afeea8..a67fd9f47d 100644 --- a/ios/MullvadVPN/PreferencesViewController.swift +++ b/ios/MullvadVPN/PreferencesViewController.swift @@ -38,7 +38,12 @@ class PreferencesViewController: UITableViewController, PreferencesDataSourceDel dataSource.tableView = tableView dataSource.delegate = self - navigationItem.title = NSLocalizedString("NAVIGATION_TITLE", tableName: "Preferences", comment: "Navigation title") + navigationItem.title = NSLocalizedString( + "NAVIGATION_TITLE", + tableName: "Preferences", + value: "Preferences", + comment: "" + ) navigationItem.rightBarButtonItem = editButtonItem TunnelManager.shared.addObserver(self) diff --git a/ios/MullvadVPN/PreferencesViewModel.swift b/ios/MullvadVPN/PreferencesViewModel.swift index 2289c4241c..e303e5bae4 100644 --- a/ios/MullvadVPN/PreferencesViewModel.swift +++ b/ios/MullvadVPN/PreferencesViewModel.swift @@ -34,28 +34,37 @@ enum CustomDNSPrecondition { case .emptyDNSDomains: if isEditing { - return NSAttributedString(markdownString: NSLocalizedString( - "CUSTOM_DNS_NO_DNS_ENTRIES_EDITING_ON_FOOTNOTE", - tableName: "Preferences", - value: "To enable this setting, add at least one server.", - comment: "Foot note displayed if there are no DNS entries and table view is in editing mode." - ), font: preferredFont) + return NSAttributedString( + markdownString: NSLocalizedString( + "CUSTOM_DNS_NO_DNS_ENTRIES_EDITING_ON_FOOTNOTE", + tableName: "Preferences", + value: "To enable this setting, add at least one server.", + comment: "Foot note displayed if there are no DNS entries and table view is in editing mode." + ), + font: preferredFont + ) } else { - return NSAttributedString(markdownString: NSLocalizedString( - "CUSTOM_DNS_NO_DNS_ENTRIES_EDITING_OFF_FOOTNOTE", - tableName: "Preferences", - value: "Tap **Edit** to add at least one DNS server.", - comment: "Foot note displayed if there are no DNS entries, but table view is not in editing mode." - ), font: preferredFont) + return NSAttributedString( + markdownString: NSLocalizedString( + "CUSTOM_DNS_NO_DNS_ENTRIES_EDITING_OFF_FOOTNOTE", + tableName: "Preferences", + value: "Tap **Edit** to add at least one DNS server.", + comment: "Foot note displayed if there are no DNS entries, but table view is not in editing mode." + ), + font: preferredFont + ) } case .conflictsWithOtherSettings: - return NSAttributedString(markdownString: NSLocalizedString( - "CUSTOM_DNS_DISABLE_ADTRACKER_BLOCKING_FOOTNOTE", - tableName: "Preferences", - value: "Disable **Block ads**, **Block trackers** and **Block malware** to activate this setting.", - comment: "Foot note displayed when custom DNS cannot be enabled, because ad/tracker/malware blockers features should be disabled first." - ), font: preferredFont) + return NSAttributedString( + markdownString: NSLocalizedString( + "CUSTOM_DNS_DISABLE_ADTRACKER_BLOCKING_FOOTNOTE", + tableName: "Preferences", + value: "Disable **Block ads**, **Block trackers** and **Block malware** to activate this setting.", + comment: "Foot note displayed when custom DNS cannot be enabled, because ad/tracker/malware blockers features should be disabled first." + ), + font: preferredFont + ) } } } diff --git a/ios/MullvadVPN/ProblemReportReviewViewController.swift b/ios/MullvadVPN/ProblemReportReviewViewController.swift index 9846e68f44..c8b2e8a6a9 100644 --- a/ios/MullvadVPN/ProblemReportReviewViewController.swift +++ b/ios/MullvadVPN/ProblemReportReviewViewController.swift @@ -32,7 +32,8 @@ class ProblemReportReviewViewController: UIViewController { navigationItem.title = NSLocalizedString( "NAVIGATION_TITLE", tableName: "ProblemReportReview", - comment: "Navigation title" + value: "App logs", + comment: "" ) navigationItem.rightBarButtonItem = dismissButtonItem @@ -40,7 +41,10 @@ class ProblemReportReviewViewController: UIViewController { textView.text = reportString textView.isEditable = false if #available(iOS 13.0, *) { - textView.font = UIFont.monospacedSystemFont(ofSize: UIFont.systemFontSize, weight: .regular) + textView.font = UIFont.monospacedSystemFont( + ofSize: UIFont.systemFontSize, + weight: .regular + ) } else { textView.font = UIFont(name: "Courier", size: UIFont.systemFontSize) } diff --git a/ios/MullvadVPN/ProblemReportViewController.swift b/ios/MullvadVPN/ProblemReportViewController.swift index 47addb7589..5f1213f76c 100644 --- a/ios/MullvadVPN/ProblemReportViewController.swift +++ b/ios/MullvadVPN/ProblemReportViewController.swift @@ -57,7 +57,8 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit textLabel.text = NSLocalizedString( "SUBHEAD_LABEL", tableName: "ProblemReport", - comment: "Subhead label displayed below navigation title." + value: "To help you more effectively, your app's log file will be attached to this message. Your data will remain secure and private, as it is anonymised before being sent over an encrypted channel.", + comment: "" ) return textLabel }() @@ -79,7 +80,8 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit textField.placeholder = NSLocalizedString( "EMAIL_TEXTFIELD_PLACEHOLDER", tableName: "ProblemReport", - comment: "Placeholder for email text field." + value: "Your email (optional)", + comment: "" ) return textField @@ -94,7 +96,8 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit textView.placeholder = NSLocalizedString( "DESCRIPTION_TEXTVIEW_PLACEHOLDER", tableName: "ProblemReport", - comment: "Placeholder for description text view." + value: "Please describe your problem in English or Swedish", + comment: "" ) textView.contentInsetAdjustmentBehavior = .never @@ -142,7 +145,8 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit button.setTitle(NSLocalizedString( "VIEW_APP_LOGS_BUTTON_TITLE", tableName: "ProblemReport", - comment: "Title for button to view application logs" + value: "View app logs", + comment: "" ), for: .normal) button.addTarget(self, action: #selector(handleViewLogsButtonTap), for: .touchUpInside) return button @@ -154,7 +158,8 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit button.setTitle(NSLocalizedString( "SEND_BUTTON_TITLE", tableName: "ProblemReport", - comment: "Title for button to send problem report." + value: "Send", + comment: "" ), for: .normal) button.addTarget(self, action: #selector(handleSendButtonTap), for: .touchUpInside) return button @@ -199,7 +204,12 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit view.backgroundColor = .secondaryColor - navigationItem.title = NSLocalizedString("NAVIGATION_TITLE", tableName: "ProblemReport", comment: "Navigation title") + navigationItem.title = NSLocalizedString( + "NAVIGATION_TITLE", + tableName: "ProblemReport", + value: "Report a problem", + comment: "" + ) textViewKeyboardResponder = AutomaticKeyboardResponder(targetView: messageTextView) scrollViewKeyboardResponder = AutomaticKeyboardResponder(targetView: scrollView) @@ -452,23 +462,32 @@ class ProblemReportViewController: UIViewController, UITextFieldDelegate, Condit let message = NSLocalizedString( "EMPTY_EMAIL_ALERT_MESSAGE", tableName: "ProblemReport", - comment: "Alert message warning users that they atttempt to send problem report without email address filled in." + value: "You are about to send the problem report without a way for us to get back to you. If you want an answer to your report you will have to enter an email address.", + comment: "" ) let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert) - let cancelAction = UIAlertAction(title: NSLocalizedString( - "EMPTY_EMAIL_ALERT_CANCEL_ACTION", - tableName: "ProblemReport", - comment: "Cancel button." - ), style: .cancel) { _ in + let cancelAction = UIAlertAction( + title: NSLocalizedString( + "EMPTY_EMAIL_ALERT_CANCEL_ACTION", + tableName: "ProblemReport", + value: "Cancel", + comment: "" + ), + style: .cancel + ) { _ in completion(false) } - let sendAction = UIAlertAction(title: NSLocalizedString( - "EMPTY_EMAIL_ALERT_SEND_ANYWAY_ACTION", - tableName: "ProblemReport", - comment: "Title for button to send problem report without email address filled in." - ), style: .destructive) { _ in + let sendAction = UIAlertAction( + title: NSLocalizedString( + "EMPTY_EMAIL_ALERT_SEND_ANYWAY_ACTION", + tableName: "ProblemReport", + value: "Send anyway", + comment: "" + ), + style: .destructive + ) { _ in completion(true) } diff --git a/ios/MullvadVPN/SelectLocationCell.swift b/ios/MullvadVPN/SelectLocationCell.swift index 200add60c3..436eeb4b6b 100644 --- a/ios/MullvadVPN/SelectLocationCell.swift +++ b/ios/MullvadVPN/SelectLocationCell.swift @@ -224,8 +224,18 @@ class SelectLocationCell: UITableViewCell { private func updateAccessibilityCustomActions() { if showsCollapseControl { let actionName = isExpanded - ? NSLocalizedString("SELECT_LOCATION_COLLAPSE_ACCESSIBILITY_ACTION", tableName: "SelectLocation", comment: "") - : NSLocalizedString("SELECT_LOCATION_EXPAND_ACCESSIBILITY_ACTION", tableName: "SelectLocation", comment: "") + ? NSLocalizedString( + "SELECT_LOCATION_COLLAPSE_ACCESSIBILITY_ACTION", + tableName: "SelectLocation", + value: "Collapse location", + comment: "" + ) + : NSLocalizedString( + "SELECT_LOCATION_EXPAND_ACCESSIBILITY_ACTION", + tableName: "SelectLocation", + value: "Expand location", + comment: "" + ) accessibilityCustomActions = [ UIAccessibilityCustomAction(name: actionName, target: self, selector: #selector(toggleCollapseAccessibilityAction)) diff --git a/ios/MullvadVPN/SelectLocationHeaderView.swift b/ios/MullvadVPN/SelectLocationHeaderView.swift index a8428982fe..89e2aa1077 100644 --- a/ios/MullvadVPN/SelectLocationHeaderView.swift +++ b/ios/MullvadVPN/SelectLocationHeaderView.swift @@ -19,7 +19,8 @@ class SelectLocationHeaderView: UIView { textLabel.text = NSLocalizedString( "SUBHEAD_LABEL", tableName: "SelectLocation", - comment: "Subhead label displayed below navigation title." + value: "While connected, your real location is masked with a private and secure location in the selected region", + comment: "" ) return textLabel }() diff --git a/ios/MullvadVPN/SelectLocationViewController.swift b/ios/MullvadVPN/SelectLocationViewController.swift index b0730a53ad..b5ef62af49 100644 --- a/ios/MullvadVPN/SelectLocationViewController.swift +++ b/ios/MullvadVPN/SelectLocationViewController.swift @@ -57,7 +57,12 @@ class SelectLocationViewController: UIViewController, UITableViewDelegate { super.viewDidLoad() navigationItem.largeTitleDisplayMode = .never - navigationItem.title = NSLocalizedString("NAVIGATION_TITLE", tableName: "SelectLocation", comment: "Navigation title") + navigationItem.title = NSLocalizedString( + "NAVIGATION_TITLE", + tableName: "SelectLocation", + value: "Select Location", + comment: "" + ) let tableView = UITableView(frame: view.bounds, style: .plain) tableView.translatesAutoresizingMaskIntoConstraints = false diff --git a/ios/MullvadVPN/SettingsDNSTextCell.swift b/ios/MullvadVPN/SettingsDNSTextCell.swift index e98300781e..1d459c9229 100644 --- a/ios/MullvadVPN/SettingsDNSTextCell.swift +++ b/ios/MullvadVPN/SettingsDNSTextCell.swift @@ -30,7 +30,12 @@ class SettingsDNSTextCell: SettingsCell, UITextFieldDelegate { textField.backgroundColor = .clear textField.textColor = UIColor.TextField.textColor textField.textMargins = UIMetrics.settingsCellLayoutMargins - textField.placeholder = NSLocalizedString("DNS_TEXT_CELL_PLACEHOLDER", tableName: "Settings", value: "Enter IP", comment: "") + textField.placeholder = NSLocalizedString( + "DNS_TEXT_CELL_PLACEHOLDER", + tableName: "Settings", + value: "Enter IP", + comment: "" + ) textField.cornerRadius = 0 textField.keyboardType = .numbersAndPunctuation textField.returnKeyType = .done diff --git a/ios/MullvadVPN/SettingsDataSource.swift b/ios/MullvadVPN/SettingsDataSource.swift index 5912240f3b..f0c0835c9a 100644 --- a/ios/MullvadVPN/SettingsDataSource.swift +++ b/ios/MullvadVPN/SettingsDataSource.swift @@ -115,7 +115,12 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab switch item { case .account: let cell = tableView.dequeueReusableCell(withIdentifier: CellReuseIdentifiers.accountCell.rawValue, for: indexPath) as! SettingsAccountCell - cell.titleLabel.text = NSLocalizedString("ACCOUNT_CELL_LABEL", tableName: "Settings", value: "Account", comment: "") + cell.titleLabel.text = NSLocalizedString( + "ACCOUNT_CELL_LABEL", + tableName: "Settings", + value: "Account", + comment: "" + ) cell.accountExpiryDate = TunnelManager.shared.accountExpiry cell.accessibilityIdentifier = "AccountCell" cell.disclosureType = .chevron @@ -124,7 +129,12 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab case .preferences: let cell = tableView.dequeueReusableCell(withIdentifier: CellReuseIdentifiers.basicCell.rawValue, for: indexPath) as! SettingsCell - cell.titleLabel.text = NSLocalizedString("PREFERENCES_CELL_LABEL", tableName: "Settings", value: "Preferences", comment: "") + cell.titleLabel.text = NSLocalizedString( + "PREFERENCES_CELL_LABEL", + tableName: "Settings", + value: "Preferences", + comment: "" + ) cell.detailTitleLabel.text = nil cell.accessibilityIdentifier = nil cell.disclosureType = .chevron @@ -133,7 +143,12 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab case .wireguardKey: let cell = tableView.dequeueReusableCell(withIdentifier: CellReuseIdentifiers.basicCell.rawValue, for: indexPath) as! SettingsCell - cell.titleLabel.text = NSLocalizedString("WIREGUARD_KEY_CELL_LABEL", tableName: "Settings", value: "WireGuard key", comment: "") + cell.titleLabel.text = NSLocalizedString( + "WIREGUARD_KEY_CELL_LABEL", + tableName: "Settings", + value: "WireGuard key", + comment: "" + ) cell.detailTitleLabel.text = nil cell.accessibilityIdentifier = "WireGuardKeyCell" cell.disclosureType = .chevron @@ -142,7 +157,12 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab case .version: let cell = tableView.dequeueReusableCell(withIdentifier: CellReuseIdentifiers.basicCell.rawValue, for: indexPath) as! SettingsCell - cell.titleLabel.text = NSLocalizedString("APP_VERSION_CELL_LABEL", tableName: "Settings", value: "App version", comment: "") + cell.titleLabel.text = NSLocalizedString( + "APP_VERSION_CELL_LABEL", + tableName: "Settings", + value: "App version", + comment: "" + ) cell.detailTitleLabel.text = Bundle.main.productVersion cell.accessibilityIdentifier = nil cell.disclosureType = .none @@ -151,7 +171,12 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab case .problemReport: let cell = tableView.dequeueReusableCell(withIdentifier: CellReuseIdentifiers.basicCell.rawValue, for: indexPath) as! SettingsCell - cell.titleLabel.text = NSLocalizedString("REPORT_PROBLEM_CELL_LABEL", tableName: "Settings", value: "Report a problem", comment: "") + cell.titleLabel.text = NSLocalizedString( + "REPORT_PROBLEM_CELL_LABEL", + tableName: "Settings", + value: "Report a problem", + comment: "" + ) cell.detailTitleLabel.text = nil cell.accessibilityIdentifier = nil cell.disclosureType = .chevron @@ -160,7 +185,12 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab case .faq: let cell = tableView.dequeueReusableCell(withIdentifier: CellReuseIdentifiers.basicCell.rawValue, for: indexPath) as! SettingsCell - cell.titleLabel.text = NSLocalizedString("FAQ_AND_GUIDES_CELL_LABEL", tableName: "Settings", value: "FAQ & Guides", comment: "") + cell.titleLabel.text = NSLocalizedString( + "FAQ_AND_GUIDES_CELL_LABEL", + tableName: "Settings", + value: "FAQ & Guides", + comment: "" + ) cell.detailTitleLabel.text = nil cell.accessibilityIdentifier = nil cell.disclosureType = .externalLink diff --git a/ios/MullvadVPN/SettingsViewController.swift b/ios/MullvadVPN/SettingsViewController.swift index 41029dc2a7..e6dd7490a7 100644 --- a/ios/MullvadVPN/SettingsViewController.swift +++ b/ios/MullvadVPN/SettingsViewController.swift @@ -35,7 +35,12 @@ class SettingsViewController: UITableViewController, SettingsDataSourceDelegate, override func viewDidLoad() { super.viewDidLoad() - navigationItem.title = NSLocalizedString("NAVIGATION_TITLE", tableName: "Settings", comment: "Navigation title") + navigationItem.title = NSLocalizedString( + "NAVIGATION_TITLE", + tableName: "Settings", + value: "Settings", + comment: "" + ) navigationItem.largeTitleDisplayMode = .always navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(handleDismiss)) diff --git a/ios/MullvadVPN/WireguardKeysContentView.swift b/ios/MullvadVPN/WireguardKeysContentView.swift index cefc662cb6..4086047974 100644 --- a/ios/MullvadVPN/WireguardKeysContentView.swift +++ b/ios/MullvadVPN/WireguardKeysContentView.swift @@ -17,6 +17,7 @@ class WireguardKeysContentView: UIView { NSLocalizedString( "REGENERATE_KEY_BUTTON_TITLE", tableName: "WireguardKeys", + value: "Regenerate key", comment: "" ), for: .normal @@ -31,6 +32,7 @@ class WireguardKeysContentView: UIView { NSLocalizedString( "VERIFY_KEY_BUTTON_TITLE", tableName: "WireguardKeys", + value: "Verify key", comment: "" ), for: .normal @@ -112,7 +114,12 @@ class WireguardKeysPublicKeyRow: UIView { private let textLabel: UILabel = { let textLabel = UILabel() textLabel.translatesAutoresizingMaskIntoConstraints = false - textLabel.text = NSLocalizedString("PUBLIC_KEY_LABEL", tableName: "WireguardKeys", comment: "") + textLabel.text = NSLocalizedString( + "PUBLIC_KEY_LABEL", + tableName: "WireguardKeys", + value: "Public key", + comment: "" + ) textLabel.font = UIFont.systemFont(ofSize: 14) textLabel.textColor = UIColor(white: 1.0, alpha: 0.6) return textLabel @@ -125,7 +132,12 @@ class WireguardKeysPublicKeyRow: UIView { button.setTitleColor(.white, for: .normal) button.contentHorizontalAlignment = .leading button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 1) - button.accessibilityHint = NSLocalizedString("PUBLIC_KEY_ACCESSIBILITY_HINT", tableName: "WireguardKeys", comment: "") + button.accessibilityHint = NSLocalizedString( + "PUBLIC_KEY_ACCESSIBILITY_HINT", + tableName: "WireguardKeys", + value: "Tap to copy to pasteboard.", + comment: "" + ) return button }() @@ -164,10 +176,17 @@ class WireguardKeysPublicKeyRow: UIView { let actionName = NSLocalizedString( "ACCOUNT_TOKEN_ACCESSIBILITY_ACTION_TITLE", - tableName: "Account", + tableName: "WireguardKeys", + value: "Copy account token to pasteboard", comment: "" ) - accessibilityCustomActions = [UIAccessibilityCustomAction(name: actionName, target: self, selector: #selector(performAccessibilityAction))] + accessibilityCustomActions = [ + UIAccessibilityCustomAction( + name: actionName, + target: self, + selector: #selector(performAccessibilityAction) + ) + ] valueButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside) } @@ -187,6 +206,7 @@ class WireguardKeysPublicKeyRow: UIView { NSLocalizedString( "KEY_STATUS_VALID", tableName: "WireguardKeys", + value: "Key is valid", comment: "" ) ) @@ -195,6 +215,7 @@ class WireguardKeysPublicKeyRow: UIView { NSLocalizedString( "KEY_STATUS_INVALID", tableName: "WireguardKeys", + value: "Key is invalid", comment: "" ) ) @@ -225,7 +246,12 @@ class WireguardKeysCreationRow: UIView { private let textLabel: UILabel = { let textLabel = UILabel() textLabel.translatesAutoresizingMaskIntoConstraints = false - textLabel.text = NSLocalizedString("KEY_GENERATED_LABEL", tableName: "WireguardKeys", comment: "") + textLabel.text = NSLocalizedString( + "KEY_GENERATED_LABEL", + tableName: "WireguardKeys", + value: "Key generated", + comment: "" + ) textLabel.font = UIFont.systemFont(ofSize: 14) textLabel.textColor = UIColor(white: 1.0, alpha: 0.6) return textLabel @@ -336,6 +362,7 @@ class WireguardKeyStatusView: UIView { textLabel.text = NSLocalizedString( "KEY_STATUS_VALID", tableName: "WireguardKeys", + value: "Key is valid", comment: "" ) textLabel.textColor = .successColor @@ -343,6 +370,7 @@ class WireguardKeyStatusView: UIView { textLabel.text = NSLocalizedString( "KEY_STATUS_INVALID", tableName: "WireguardKeys", + value: "Key is invalid", comment: "" ) textLabel.textColor = .dangerColor diff --git a/ios/MullvadVPN/WireguardKeysViewController.swift b/ios/MullvadVPN/WireguardKeysViewController.swift index 71b5f9e5b9..655d665b8f 100644 --- a/ios/MullvadVPN/WireguardKeysViewController.swift +++ b/ios/MullvadVPN/WireguardKeysViewController.swift @@ -70,7 +70,12 @@ class WireguardKeysViewController: UIViewController, TunnelObserver { contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor), ]) - navigationItem.title = NSLocalizedString("NAVIGATION_TITLE", tableName: "WireguardKeys", comment: "") + navigationItem.title = NSLocalizedString( + "NAVIGATION_TITLE", + tableName: "WireguardKeys", + value: "WireGuard key", + comment: "" + ) contentView.publicKeyRowView.actionHandler = { [weak self] in self?.copyPublicKey() @@ -119,7 +124,12 @@ class WireguardKeysViewController: UIViewController, TunnelObserver { UIPasteboard.general.string = tunnelSettings.device.wgKeyData.privateKey.publicKey.base64Key setPublicKeyTitle( - string: NSLocalizedString("COPIED_TO_PASTEBOARD_LABEL", tableName: "WireguardKeys", comment: ""), + string: NSLocalizedString( + "COPIED_TO_PASTEBOARD_LABEL", + tableName: "WireguardKeys", + value: "COPIED TO PASTEBOARD!", + comment: "" + ), animated: true) let workItem = DispatchWorkItem { [weak self] in @@ -147,7 +157,15 @@ class WireguardKeysViewController: UIViewController, TunnelObserver { to: Date(), unitsStyle: .full ).map { (formattedInterval) -> String in - return String(format: NSLocalizedString("KEY_GENERATED_SINCE_FORMAT", tableName: "WireguardKeys", comment: ""), formattedInterval) + return String( + format: NSLocalizedString( + "KEY_GENERATED_SINCE_FORMAT", + tableName: "WireguardKeys", + value: "%@ ago", + comment: "" + ), + formattedInterval + ) } } diff --git a/ios/MullvadVPN/en.lproj/Account.strings b/ios/MullvadVPN/en.lproj/Account.strings deleted file mode 100644 index aafd2bc65e..0000000000 --- a/ios/MullvadVPN/en.lproj/Account.strings +++ /dev/null @@ -1,80 +0,0 @@ -/* No comment provided by engineer. */ -"ACCOUNT_EXPIRY_LABEL" = "Paid until"; - -/* Label displayed in place of account expiration when account is out of time. */ -"ACCOUNT_OUT_OF_TIME_LABEL" = "OUT OF TIME"; - -/* No comment provided by engineer. */ -"ACCOUNT_TOKEN_ACCESSIBILITY_ACTION_TITLE" = "Copy account token to pasteboard"; - -/* No comment provided by engineer. */ -"ACCOUNT_TOKEN_ACCESSIBILITY_HINT" = "Tap to copy to pasteboard."; - -/* No comment provided by engineer. */ -"ACCOUNT_TOKEN_LABEL" = "Account number"; - -/* Title for OK button in purchase failure dialog */ -"CANNOT_COMPLETE_PURCHASE_ALERT_OK_ACTION" = "OK"; - -/* Title for purchase failure dialog */ -"CANNOT_COMPLETE_PURCHASE_ALERT_TITLE" = "Cannot complete the purchase"; - -/* Message, temporarily displayed in place account token, after copying the account token to pasteboard on tap. */ -"COPIED_TO_PASTEBOARD_LABEL" = "COPIED TO PASTEBOARD!"; - -/* Modal message displayed during logout */ -"LOGGING_OUT_ALERT_TITLE" = "Logging out. Please wait..."; - -/* No comment provided by engineer. */ -"LOGOUT_BUTTON_TITLE" = "Log out"; - -/* Title for cancel button in logout dialog */ -"LOGOUT_CONFIRMATION_ALERT_CANCEL_ACTION" = "Cancel"; - -/* Message for logout dialog */ -"LOGOUT_CONFIRMATION_ALERT_MESSAGE" = "Are you sure you want to log out?\n\nThis will erase the account number from this device. It is not possible for us to recover it for you. Make sure you have your account number saved somewhere, to be able to log back in."; - -/* Title for logout dialog */ -"LOGOUT_CONFIRMATION_ALERT_TITLE" = "Log out"; - -/* Title for confirmation button in logout dialog */ -"LOGOUT_CONFIRMATION_ALERT_YES_ACTION" = "Log out"; - -/* Navigation title */ -"NAVIGATION_TITLE" = "Account"; - -/* Purchase button title displayed when unable to load the price of in-app purchase. */ -"PURCHASE_BUTTON_CANNOT_CONNECT_TO_APPSTORE_LABEL" = "Cannot connect to AppStore"; - -/* Purchase button title displayed when payments are restriced on device. */ -"PURCHASE_BUTTON_PAYMENTS_RESTRICTED_LABEL" = "Payments restricted"; - -/* Purchase button title: <TITLE> (<PRICE>). The order can be changed by swapping %1 and %2. */ -"PURCHASE_BUTTON_TITLE_FORMAT" = "%1$@ (%2$@)"; - -/* Message displayed when no time credited to user account during purchase restoration; communicates that user account has already been credited with all outstanding purchased time duration. */ -"RESTORE_PURCHASES_ALERT_NO_TIME_ADDED_MESSAGE" = "Your previous purchases have already been added to this account."; - -/* Message displayed upon successful restoration of existing purchases, containing the time duration credited to user account. Use %@ placeholder to position the localized text with duration added (i.e '30 days') */ -"RESTORE_PURCHASES_ALERT_TIME_ADDED_MESSAGE" = "%@ have been added to your account"; - -/* Title for purchase restoration dialog */ -"RESTORE_PURCHASES_ALERT_TITLE" = "Restore purchases"; - -/* No comment provided by engineer. */ -"RESTORE_PURCHASES_BUTTON_TITLE" = "Restore purchases"; - -/* Title for 'OK' button in failure dialog when restoring purchases */ -"RESTORE_PURCHASES_FAILURE_ALERT_OK_ACTION" = "OK"; - -/* Title for failure dialog when restoring purchases */ -"RESTORE_PURCHASES_FAILURE_ALERT_TITLE" = "Cannot restore purchases"; - -/* No comment provided by engineer. */ -"TIME_ADDED_ALERT_OK_ACTION" = "OK"; - -/* Message displayed upon successful purchase and containing the time duration credited to user account. Use %@ placeholder to position the localized text with duration added (i.e '30 days') */ -"TIME_ADDED_ALERT_SUCCESS_MESSAGE" = "%@ have been added to your account"; - -/* Title for purchase completion dialog */ -"TIME_ADDED_ALERT_SUCCESS_TITLE" = "Thanks for your purchase"; diff --git a/ios/MullvadVPN/en.lproj/AccountInput.strings b/ios/MullvadVPN/en.lproj/AccountInput.strings deleted file mode 100644 index 51d09cc7e4..0000000000 --- a/ios/MullvadVPN/en.lproj/AccountInput.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Accessibility label for submit button in account token input. */ -"ACCOUNT_INPUT_LOGIN_BUTTON_ACCESSIBILITY_LABEL" = "Log in"; diff --git a/ios/MullvadVPN/en.lproj/AppStorePaymentManager.strings b/ios/MullvadVPN/en.lproj/AppStorePaymentManager.strings deleted file mode 100644 index a168dfc6ff..0000000000 --- a/ios/MullvadVPN/en.lproj/AppStorePaymentManager.strings +++ /dev/null @@ -1,23 +0,0 @@ -/* No comment provided by engineer. */ -"INVALID_ACCOUNT_ERROR" = "Cannot add credit to invalid account."; - -/* No comment provided by engineer. */ -"NO_ACCOUNT_SET_ERROR" = "Internal error: account is not set"; - -/* No comment provided by engineer. */ -"READ_RECEIPT_ERROR" = "Cannot read the AppStore receipt from disk: %@"; - -/* No comment provided by engineer. */ -"RECEIPT_NOT_FOUND_ERROR" = "AppStore receipt is not found on disk."; - -/* No comment provided by engineer. */ -"REFRESH_RECEIPT_ERROR" = "Cannot refresh the AppStore receipt: %@"; - -/* No comment provided by engineer. */ -"SEND_RECEIPT_ERROR" = "Failed to send the receipt to server: %@"; - -/* No comment provided by engineer. */ -"SEND_RECEIPT_RECOVERY_SUGGESTION" = "Please retry by using the \"Restore purchases\" button."; - -/* No comment provided by engineer. */ -"VALIDATE_ACCOUNT_ERROR" = "Failed to validate account token: %@"; diff --git a/ios/MullvadVPN/en.lproj/AppStoreSubscriptions.strings b/ios/MullvadVPN/en.lproj/AppStoreSubscriptions.strings deleted file mode 100644 index 6624ce8273..0000000000 --- a/ios/MullvadVPN/en.lproj/AppStoreSubscriptions.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Title for non-renewable subscription that credits 30 days to user account. */ -"APPSTORE_SUBSCRIPTION_TITLE_ADD_30_DAYS" = "Add 30 days time"; diff --git a/ios/MullvadVPN/en.lproj/ConnectionPanel.strings b/ios/MullvadVPN/en.lproj/ConnectionPanel.strings deleted file mode 100644 index 9c6bf58ade..0000000000 --- a/ios/MullvadVPN/en.lproj/ConnectionPanel.strings +++ /dev/null @@ -1,14 +0,0 @@ -/* No comment provided by engineer. */ -"COLLAPSE_BUTTON_ACCESSIBILITY_HINT" = "Double tap to collapse the connection info panel."; - -/* No comment provided by engineer. */ -"EXPAND_BUTTON_ACCESSIBILITY_HINT" = "Double tap to expand the connection info panel."; - -/* No comment provided by engineer. */ -"IN_ADDRESS_LABEL" = "In"; - -/* No comment provided by engineer. */ -"OUT_ADDRESS_LABEL" = "Out"; - -/* No comment provided by engineer. */ -"RELAY_ACCESSIBILITY_LABEL" = "Connected relay"; diff --git a/ios/MullvadVPN/en.lproj/Consent.strings b/ios/MullvadVPN/en.lproj/Consent.strings deleted file mode 100644 index e130044128..0000000000 --- a/ios/MullvadVPN/en.lproj/Consent.strings +++ /dev/null @@ -1,11 +0,0 @@ -/* Title for button used for agreeing with privacy notice. */ -"CONTINUE_BUTTON_TITLE" = "Agree and continue"; - -/* Body. */ -"PRIVACY_NOTICE_BODY" = "You have a right to privacy. That’s why we never store activity logs, don't ask for personal information, and encourage anonymous payments.\n\nIn some situations, as outlined in our privacy policy, we might process personal data that you choose to send, for example if you email us.\n\nWe strongly believe in retaining as little data as possible because we want you to remain anonymous."; - -/* Heading. */ -"PRIVACY_NOTICE_HEADING" = "Do you agree to remaining anonymous?"; - -/* Title for link to privacy policy web page. */ -"PRIVACY_POLICY_LINK_TITLE" = "Privacy policy"; diff --git a/ios/MullvadVPN/en.lproj/CustomDateComponentsFormatting.strings b/ios/MullvadVPN/en.lproj/CustomDateComponentsFormatting.strings deleted file mode 100644 index 8f931d4968..0000000000 --- a/ios/MullvadVPN/en.lproj/CustomDateComponentsFormatting.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Phrase used for less than 1 minute duration. */ -"LESS_THAN_ONE_MINUTE" = "Less than a minute"; diff --git a/ios/MullvadVPN/en.lproj/HeaderBar.strings b/ios/MullvadVPN/en.lproj/HeaderBar.strings deleted file mode 100644 index 01b3aea007..0000000000 --- a/ios/MullvadVPN/en.lproj/HeaderBar.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* No comment provided by engineer. */ -"HEADER_BAR_SETTINGS_BUTTON_ACCESSIBILITY_LABEL" = "Settings"; diff --git a/ios/MullvadVPN/en.lproj/KeyboardNavigation.strings b/ios/MullvadVPN/en.lproj/KeyboardNavigation.strings deleted file mode 100644 index 753599eec9..0000000000 --- a/ios/MullvadVPN/en.lproj/KeyboardNavigation.strings +++ /dev/null @@ -1,5 +0,0 @@ -/* Next button */ -"NEXT_BUTTON_TITLE" = "Next"; - -/* Previous button */ -"PREVIOUS_BUTTON_TITLE" = "Previous"; diff --git a/ios/MullvadVPN/en.lproj/Localizable.strings b/ios/MullvadVPN/en.lproj/Localizable.strings index 7522035a53..8deb704fa2 100644 --- a/ios/MullvadVPN/en.lproj/Localizable.strings +++ b/ios/MullvadVPN/en.lproj/Localizable.strings @@ -1,14 +1,5 @@ -/* Message for in-app notification, displayed within the last 3 days until account expiry. */ -"ACCOUNT_EXPIRY_INAPP_NOTIFICATION_BODY" = "%@ left. Buy more credit."; - -/* Title for in-app notification, displayed within the last 3 days until account expiry. */ -"ACCOUNT_EXPIRY_INAPP_NOTIFICATION_TITLE" = "ACCOUNT CREDIT EXPIRES SOON"; - /* Message for system account expiry notification, fired 3 days prior to account expiry. */ "ACCOUNT_EXPIRY_SYSTEM_NOTIFICATION_BODY" = "Account credit expires in 3 days. Buy more credit."; /* Title for system account expiry notification, fired 3 days prior to account expiry. */ "ACCOUNT_EXPIRY_SYSTEM_NOTIFICATION_TITLE" = "Account credit expires soon"; - -/* No comment provided by engineer. */ -"TUNNEL_ERROR_INAPP_NOTIFICATION_TITLE" = "Tunnel error"; diff --git a/ios/MullvadVPN/en.lproj/Login.strings b/ios/MullvadVPN/en.lproj/Login.strings deleted file mode 100644 index ffb89248e0..0000000000 --- a/ios/MullvadVPN/en.lproj/Login.strings +++ /dev/null @@ -1,44 +0,0 @@ -/* No comment provided by engineer. */ -"CREATE_ACCOUNT_BUTTON_LABEL" = "Create account"; - -/* No comment provided by engineer. */ -"CREATE_BUTTON_HEADER_LABEL" = "Don't have an account number?"; - -/* Heading displayed during authentication. */ -"HEADING_TITLE_AUTHENTICATING" = "Logging in..."; - -/* Default login prompt heading. */ -"HEADING_TITLE_DEFAULT" = "Login"; - -/* Heading displayed upon failure to authenticate. */ -"HEADING_TITLE_FAILURE" = "Login failed"; - -/* Heading displayed upon successful authentication. */ -"HEADING_TITLE_SUCCESS" = "Logged in"; - -/* Title for 'Log in' button displayed in toolbar above keyboard on iPhone. */ -"LOGIN_ACCESSORY_TOOLBAR_BUTTON_TITLE" = "Log in"; - -/* Subhead displayed during authentication. */ -"SUBHEAD_TITLE_AUTHENTICATING" = "Checking account number"; - -/* Subhead displayed upon successful authentication with newly created account token. */ -"SUBHEAD_TITLE_CREATED_ACCOUNT" = "Account created"; - -/* Subhead displayed when creating new account. */ -"SUBHEAD_TITLE_CREATING_ACCOUNT" = "Creating new account"; - -/* Default login prompt subhead. */ -"SUBHEAD_TITLE_DEFAULT" = "Enter your account number"; - -/* Subhead displayed in the event of internal error. */ -"SUBHEAD_TITLE_INTERNAL_ERROR" = "Internal error"; - -/* Subhead displayed in the event of network error. Use %@ placeholder to place localized text describing network failure. */ -"SUBHEAD_TITLE_NETWORK_ERROR_FORMAT" = "Network error: %@"; - -/* Subhead displayed upon successful authentication using existing account token. */ -"SUBHEAD_TITLE_SUCCESS" = "Correct account number"; - -/* Subhead displayed in the event of unknown server error. */ -"SUBHEAD_TITLE_UNKNOWN_SERVER_ERROR" = "Unknown server error"; diff --git a/ios/MullvadVPN/en.lproj/Main.strings b/ios/MullvadVPN/en.lproj/Main.strings deleted file mode 100644 index 03d51dc0ac..0000000000 --- a/ios/MullvadVPN/en.lproj/Main.strings +++ /dev/null @@ -1,50 +0,0 @@ -/* No comment provided by engineer. */ -"CANCEL_BUTTON_TITLE" = "Cancel"; - -/* No comment provided by engineer. */ -"CONNECT_BUTTON_TITLE" = "Secure connection"; - -/* No comment provided by engineer. */ -"DISCONNECT_BUTTON_TITLE" = "Disconnect"; - -/* No comment provided by engineer. */ -"RECONNECT_BUTTON_ACCESSIBILITY_LABEL" = "Reconnect"; - -/* No comment provided by engineer. */ -"SELECT_LOCATION_BUTTON_TITLE" = "Select location"; - -/* No comment provided by engineer. */ -"SWITCH_LOCATION_BUTTON_TITLE" = "Switch location"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_CONNECTED" = "Secure connection"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_CONNECTED_ACCESSIBILITY_LABEL" = "Secure connection. Connected to %1$@, %2$@"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_CONNECTING" = "Creating secure connection"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_CONNECTING_ACCESSIBILITY_LABEL" = "Creating secure connection"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_DISCONNECTED" = "Unsecured connection"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_DISCONNECTED_ACCESSIBILITY_LABEL" = "Unsecured connection"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_DISCONNECTING" = "Disconnecting"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_DISCONNECTING_ACCESSIBILITY_LABEL" = "Disconnecting"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_PENDING_RECONNECT" = "Reconnecting"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_PENDING_RECONNECT_ACCESSIBILITY_LABEL" = "Pending reconnect"; - -/* No comment provided by engineer. */ -"TUNNEL_STATE_RECONNECTING_ACCESSIBILITY_LABEL" = "Reconnecting to %1$@, %2$@"; diff --git a/ios/MullvadVPN/en.lproj/Preferences.strings b/ios/MullvadVPN/en.lproj/Preferences.strings deleted file mode 100644 index bc466ccd8b..0000000000 --- a/ios/MullvadVPN/en.lproj/Preferences.strings +++ /dev/null @@ -1,26 +0,0 @@ -/* No comment provided by engineer. */ -"ADD_CUSTOM_DNS_SERVER_CELL_LABEL" = "Add a server"; - -/* No comment provided by engineer. */ -"BLOCK_ADS_CELL_LABEL" = "Block ads"; - -/* No comment provided by engineer. */ -"BLOCK_MALWARE_CELL_LABEL" = "Block malware"; - -/* No comment provided by engineer. */ -"BLOCK_TRACKERS_CELL_LABEL" = "Block trackers"; - -/* No comment provided by engineer. */ -"CUSTOM_DNS_CELL_LABEL" = "Use custom DNS"; - -/* Foot note displayed when custom DNS cannot be enabled, because ad/tracker/malware blockers features should be disabled first. */ -"CUSTOM_DNS_DISABLE_ADTRACKER_BLOCKING_FOOTNOTE" = "Disable **Block ads**, **Block trackers** and **Block malware** to activate this setting."; - -/* Foot note displayed if there are no DNS entries, but table view is not in editing mode. */ -"CUSTOM_DNS_NO_DNS_ENTRIES_EDITING_OFF_FOOTNOTE" = "Tap **Edit** to add at least one DNS server."; - -/* Foot note displayed if there are no DNS entries and table view is in editing mode. */ -"CUSTOM_DNS_NO_DNS_ENTRIES_EDITING_ON_FOOTNOTE" = "To enable this setting, add at least one server."; - -/* Navigation title */ -"NAVIGATION_TITLE" = "Preferences"; diff --git a/ios/MullvadVPN/en.lproj/ProblemReport.strings b/ios/MullvadVPN/en.lproj/ProblemReport.strings deleted file mode 100644 index 41641fbcee..0000000000 --- a/ios/MullvadVPN/en.lproj/ProblemReport.strings +++ /dev/null @@ -1,50 +0,0 @@ -/* No comment provided by engineer. */ -"CONTACT_BACK_EMAIL_MESSAGE_FORMAT" = "If needed we will contact you at %@"; - -/* Placeholder for description text view. */ -"DESCRIPTION_TEXTVIEW_PLACEHOLDER" = "Please describe your problem in English or Swedish"; - -/* No comment provided by engineer. */ -"EDIT_MESSAGE_BUTTON" = "Edit message"; - -/* Placeholder for email text field. */ -"EMAIL_TEXTFIELD_PLACEHOLDER" = "Your email (optional)"; - -/* Cancel button. */ -"EMPTY_EMAIL_ALERT_CANCEL_ACTION" = "Cancel"; - -/* Alert message warning users that they atttempt to send problem report without email address filled in. */ -"EMPTY_EMAIL_ALERT_MESSAGE" = "You are about to send the problem report without a way for us to get back to you. If you want an answer to your report you will have to enter an email address."; - -/* Title for button to send problem report without email address filled in. */ -"EMPTY_EMAIL_ALERT_SEND_ANYWAY_ACTION" = "Send anyway"; - -/* Navigation title */ -"NAVIGATION_TITLE" = "Report a problem"; - -/* Title for button to send problem report. */ -"SEND_BUTTON_TITLE" = "Send"; - -/* Subhead label displayed below navigation title. */ -"SUBHEAD_LABEL" = "To help you more effectively, your app's log file will be attached to this message. Your data will remain secure and private, as it is anonymised before being sent over an encrypted channel."; - -/* No comment provided by engineer. */ -"SUBMISSION_STATUS_FAILURE" = "Failed to send"; - -/* No comment provided by engineer. */ -"SUBMISSION_STATUS_SENDING" = "Sending..."; - -/* No comment provided by engineer. */ -"SUBMISSION_STATUS_SENT" = "Sent"; - -/* No comment provided by engineer. */ -"THANKS_MESSAGE" = "Thanks!"; - -/* No comment provided by engineer. */ -"TRY_AGAIN_BUTTON" = "Try again"; - -/* Title for button to view application logs */ -"VIEW_APP_LOGS_BUTTON_TITLE" = "View app logs"; - -/* No comment provided by engineer. */ -"WE_WILL_LOOK_INTO_THIS_MESSAGE" = "We will look into this."; diff --git a/ios/MullvadVPN/en.lproj/ProblemReportReview.strings b/ios/MullvadVPN/en.lproj/ProblemReportReview.strings deleted file mode 100644 index 3a82c169f5..0000000000 --- a/ios/MullvadVPN/en.lproj/ProblemReportReview.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Navigation title */ -"NAVIGATION_TITLE" = "App logs"; diff --git a/ios/MullvadVPN/en.lproj/REST.strings b/ios/MullvadVPN/en.lproj/REST.strings deleted file mode 100644 index 5c5a809eda..0000000000 --- a/ios/MullvadVPN/en.lproj/REST.strings +++ /dev/null @@ -1,26 +0,0 @@ -/* No comment provided by engineer. */ -"INVALID_ACCOUNT_ERROR_DESCRIPTION" = "Invalid account."; - -/* No comment provided by engineer. */ -"KEY_LIMIT_REACHED_ERROR_DESCRIPTION" = "Too many WireGuard keys in use."; - -/* No comment provided by engineer. */ -"KEY_LIMIT_REACHED_ERROR_RECOVERY_SUGGESTION" = "Please visit the website to revoke a key before login is possible."; - -/* Network error. Use %@ placeholder to place localized failure description. */ -"NETWORK_ERROR" = "Network error: %@"; - -/* Server error. Use %@ placeholder to place localized failure description. */ -"SERVER_ERROR" = "Server error: %@"; - -/* Failure to decode the server failure response. */ -"SERVER_FAILURE_RESPONSE_DECODING_ERROR" = "Server error response decoding error"; - -/* Failure to encode the server request. */ -"SERVER_REQUEST_ENCODING_ERROR" = "Server request encoding error"; - -/* Failure to decode the server success response. */ -"SERVER_SUCCESS_RESPONSE_DECODING_ERROR" = "Server success response decoding error"; - -/* Use %@ placeholder to place the error code into the localized string. */ -"UNKNOWN_ERROR_DESCRIPTION" = "Unknown error: %@"; diff --git a/ios/MullvadVPN/en.lproj/SelectLocation.strings b/ios/MullvadVPN/en.lproj/SelectLocation.strings deleted file mode 100644 index 8d95fafbee..0000000000 --- a/ios/MullvadVPN/en.lproj/SelectLocation.strings +++ /dev/null @@ -1,11 +0,0 @@ -/* Navigation title */ -"NAVIGATION_TITLE" = "Select Location"; - -/* No comment provided by engineer. */ -"SELECT_LOCATION_COLLAPSE_ACCESSIBILITY_ACTION" = "Collapse location"; - -/* No comment provided by engineer. */ -"SELECT_LOCATION_EXPAND_ACCESSIBILITY_ACTION" = "Expand location"; - -/* Subhead label displayed below navigation title. */ -"SUBHEAD_LABEL" = "While connected, your real location is masked with a private and secure location in the selected region"; diff --git a/ios/MullvadVPN/en.lproj/Settings.strings b/ios/MullvadVPN/en.lproj/Settings.strings deleted file mode 100644 index b2bf665ace..0000000000 --- a/ios/MullvadVPN/en.lproj/Settings.strings +++ /dev/null @@ -1,29 +0,0 @@ -/* No comment provided by engineer. */ -"ACCOUNT_CELL_LABEL" = "Account"; - -/* Label displayed when user account ran out of time. */ -"ACCOUNT_CELL_OUT_OF_TIME_LABEL" = "OUT OF TIME"; - -/* The amount of time left on user account. Use %@ placeholder to position the localized text with the time duration left (i.e 10 days). */ -"ACCOUNT_CELL_TIME_LEFT_LABEL_FORMAT" = "%@ left"; - -/* No comment provided by engineer. */ -"APP_VERSION_CELL_LABEL" = "App version"; - -/* No comment provided by engineer. */ -"DNS_TEXT_CELL_PLACEHOLDER" = "Enter IP"; - -/* No comment provided by engineer. */ -"FAQ_AND_GUIDES_CELL_LABEL" = "FAQ & Guides"; - -/* Navigation title */ -"NAVIGATION_TITLE" = "Settings"; - -/* No comment provided by engineer. */ -"PREFERENCES_CELL_LABEL" = "Preferences"; - -/* No comment provided by engineer. */ -"REPORT_PROBLEM_CELL_LABEL" = "Report a problem"; - -/* No comment provided by engineer. */ -"WIREGUARD_KEY_CELL_LABEL" = "WireGuard key"; diff --git a/ios/MullvadVPN/en.lproj/StoreKitErrors.strings b/ios/MullvadVPN/en.lproj/StoreKitErrors.strings deleted file mode 100644 index 99ac40881a..0000000000 --- a/ios/MullvadVPN/en.lproj/StoreKitErrors.strings +++ /dev/null @@ -1,14 +0,0 @@ -/* No comment provided by engineer. */ -"CLIENT_INVALID" = "Client is not allowed to issue the request"; - -/* No comment provided by engineer. */ -"PAYMENT_CANCELLED" = "User cancelled the request"; - -/* No comment provided by engineer. */ -"PAYMENT_INVALID" = "Invalid purchase identifier"; - -/* No comment provided by engineer. */ -"PAYMENT_NOT_ALLOWED" = "This device is not allowed to make the payment"; - -/* No comment provided by engineer. */ -"UNKNOWN_ERROR" = "Unknown error"; diff --git a/ios/MullvadVPN/en.lproj/TunnelManager.strings b/ios/MullvadVPN/en.lproj/TunnelManager.strings deleted file mode 100644 index 4dfb42a1ba..0000000000 --- a/ios/MullvadVPN/en.lproj/TunnelManager.strings +++ /dev/null @@ -1,59 +0,0 @@ -/* No comment provided by engineer. */ -"ADD_TUNNEL_SETTINGS_ERROR" = "Failed to add tunnel settings"; - -/* No comment provided by engineer. */ -"CANNOT_SATISFY_RELAY_CONSTRAINTS_ERROR" = "Failed to satisfy relay constraints."; - -/* No comment provided by engineer. */ -"LOAD_ALL_VPN_CONFIGURATIONS_ERROR" = "Failed to load system VPN configurations: %@"; - -/* No comment provided by engineer. */ -"MIGRATE_TUNNEL_SETTINGS_ERROR" = "Failed to migrate tunnel settings"; - -/* No comment provided by engineer. */ -"MISSING_ACCOUNT_INTERNAL_ERROR" = "Internal error: missing account"; - -/* No comment provided by engineer. */ -"OBTAIN_PERSISTENT_KEYCHAIN_REFERENCE_ERROR" = "Failed to obtain the persistent keychain reference for the VPN configuration"; - -/* No comment provided by engineer. */ -"PUSH_WIREGUARD_KEY_ERROR" = "Failed to send the WireGuard key to server: %@"; - -/* No comment provided by engineer. */ -"PUSH_WIREGUARD_KEY_RECOVERY_SUGGESTION" = "Remove unused WireGuard keys and try again"; - -/* No comment provided by engineer. */ -"READ_RELAYS_ERROR" = "Failed to read relays."; - -/* No comment provided by engineer. */ -"READ_TUNNEL_SETTINGS_ERROR" = "Failed to read tunnel settings"; - -/* No comment provided by engineer. */ -"RELOAD_TUNNEL_ERROR" = "Failed to reload tunnel: %@"; - -/* No comment provided by engineer. */ -"RELOAD_VPN_CONFIGURATIONS_ERROR" = "Failed to reload a VPN configuration: %@"; - -/* No comment provided by engineer. */ -"REMOVE_INCONSISTENT_VPN_CONFIGURATION" = "Failed to remove the outdated system VPN configuration: %@"; - -/* No comment provided by engineer. */ -"REMOVE_TUNNEL_SETTINGS_ERROR" = "Failed to remove tunnel settings"; - -/* No comment provided by engineer. */ -"REMOVE_VPN_CONFIGURATION_ERROR" = "Failed to remove the system VPN configuration: %@"; - -/* No comment provided by engineer. */ -"REPLACE_WIREGUARD_KEY_ERROR" = "Failed to replace the WireGuard key on server: %@"; - -/* No comment provided by engineer. */ -"REPLACE_WIREGUARD_KEY_RECOVERY_SUGGESTION" = "Remove unused WireGuard keys and try again"; - -/* No comment provided by engineer. */ -"SAVE_VPN_CONFIGURATION_ERROR" = "Failed to save a VPN tunnel configuration: %@"; - -/* No comment provided by engineer. */ -"START_VPN_TUNNEL_ERROR" = "System error when starting the VPN tunnel: %@"; - -/* No comment provided by engineer. */ -"UPDATE_TUNNEL_SETTINGS_ERROR" = "Failed to update tunnel settings"; diff --git a/ios/MullvadVPN/en.lproj/WireguardKeys.strings b/ios/MullvadVPN/en.lproj/WireguardKeys.strings deleted file mode 100644 index b064184715..0000000000 --- a/ios/MullvadVPN/en.lproj/WireguardKeys.strings +++ /dev/null @@ -1,53 +0,0 @@ -/* No comment provided by engineer. */ -"ACCESSIBILITY_ANNOUNCEMENT_INVALID_KEY" = "Key is invalid."; - -/* No comment provided by engineer. */ -"ACCESSIBILITY_ANNOUNCEMENT_REGENERATED_KEY" = "Key is regenerated."; - -/* No comment provided by engineer. */ -"ACCESSIBILITY_ANNOUNCEMENT_VALID_KEY" = "Key is valid."; - -/* No comment provided by engineer. */ -"COPIED_TO_PASTEBOARD_LABEL" = "COPIED TO PASTEBOARD!"; - -/* No comment provided by engineer. */ -"KEY_GENERATED_LABEL" = "Key generated"; - -/* No comment provided by engineer. */ -"KEY_GENERATED_SINCE_FORMAT" = "%@ ago"; - -/* No comment provided by engineer. */ -"KEY_STATUS_INVALID" = "Key is invalid"; - -/* No comment provided by engineer. */ -"KEY_STATUS_VALID" = "Key is valid"; - -/* No comment provided by engineer. */ -"NAVIGATION_TITLE" = "WireGuard key"; - -/* No comment provided by engineer. */ -"PUBLIC_KEY_ACCESSIBILITY_HINT" = "Tap to copy to pasteboard."; - -/* No comment provided by engineer. */ -"PUBLIC_KEY_LABEL" = "Public key"; - -/* No comment provided by engineer. */ -"REGENERATE_KEY_BUTTON_TITLE" = "Regenerate key"; - -/* No comment provided by engineer. */ -"REGENERATE_KEY_FAILURE_ALERT_OK_ACTION" = "OK"; - -/* No comment provided by engineer. */ -"REGENERATE_KEY_FAILURE_ALERT_TITLE" = "Cannot regenerate the key"; - -/* No comment provided by engineer. */ -"VERIFY_KEY_BUTTON_TITLE" = "Verify key"; - -/* No comment provided by engineer. */ -"VERIFY_KEY_FAILURE_ALERT_MESSAGE" = "Failed to verify the WireGuard key on server: %@"; - -/* No comment provided by engineer. */ -"VERIFY_KEY_FAILURE_ALERT_OK_ACTION" = "OK"; - -/* No comment provided by engineer. */ -"VERIFY_KEY_FAILURE_ALERT_TITLE" = "Cannot verify the key"; |
