From 08b34f88c7dee620aedc7881ecc29f68fb1751d1 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 3 Dec 2023 22:20:40 -0800 Subject: [PATCH 01/19] NetP waitlist final touches (#2209) Task/Issue URL: https://app.asana.com/0/0/1206027185389966/f Tech Design URL: CC: Description: This PR makes some final touches for the NetP waitlist, including: Adding RMF support Adding pixels Updates NetP to only be visible to US users (unless they're internal) Recording the date at which the user activated NetP, in order to show messages remotely if necessary --- Core/PixelEvent.swift | 16 ++++ DuckDuckGo.xcodeproj/project.pbxproj | 12 ++- .../xcshareddata/swiftpm/Package.resolved | 4 +- DuckDuckGo/AppDelegate+Waitlists.swift | 7 ++ DuckDuckGo/AppDelegate.swift | 1 + .../Contents.json | 12 +++ .../RemoteMessageVPNAnnounce.pdf | Bin 0 -> 15349 bytes DuckDuckGo/HomeMessageViewModel.swift | 16 ++++ .../NetworkProtectionAccessController.swift | 31 ++++++- DuckDuckGo/RemoteMessaging.swift | 39 ++++++-- DuckDuckGo/SettingsViewController.swift | 4 + DuckDuckGo/SurveyURLBuilder.swift | 86 ++++++++++++++++++ .../VPNWaitlistActivationDateStore.swift | 82 +++++++++++++++++ ...listTermsAndConditionsViewController.swift | 4 + DuckDuckGo/VPNWaitlistViewController.swift | 4 + .../RemoteMessagingStoreTests.swift | 4 +- ...etworkProtectionPacketTunnelProvider.swift | 13 +++ 17 files changed, 316 insertions(+), 19 deletions(-) create mode 100644 DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/Contents.json create mode 100644 DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/RemoteMessageVPNAnnounce.pdf create mode 100644 DuckDuckGo/SurveyURLBuilder.swift create mode 100644 DuckDuckGo/VPNWaitlistActivationDateStore.swift diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index 5d6a1e3494..0365fca0f8 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -367,6 +367,14 @@ extension Pixel { case networkProtectionUnhandledError + case networkProtectionWaitlistUserActive + case networkProtectionSettingsRowDisplayed + case networkProtectionWaitlistIntroScreenDisplayed + case networkProtectionWaitlistTermsDisplayed + case networkProtectionWaitlistTermsAccepted + case networkProtectionWaitlistNotificationShown + case networkProtectionWaitlistNotificationLaunched + // MARK: remote messaging pixels case remoteMessageShown @@ -876,6 +884,14 @@ extension Pixel.Event { case .networkProtectionMemoryCritical: return "m_netp_vpn_memory_critical" case .networkProtectionUnhandledError: return "m_netp_unhandled_error" + case .networkProtectionWaitlistUserActive: return "m_netp_waitlist_user_active" + case .networkProtectionSettingsRowDisplayed: return "m_netp_waitlist_settings_entry_viewed" + case .networkProtectionWaitlistIntroScreenDisplayed: return "m_netp_waitlist_intro_screen_viewed" + case .networkProtectionWaitlistTermsDisplayed: return "m_netp_waitlist_terms_viewed" + case .networkProtectionWaitlistTermsAccepted: return "m_netp_waitlist_terms_accepted" + case .networkProtectionWaitlistNotificationShown: return "m_netp_waitlist_notification_shown" + case .networkProtectionWaitlistNotificationLaunched: return "m_netp_waitlist_notification_launched" + // MARK: remote messaging pixels case .remoteMessageShown: return "m_remote_message_shown" diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 195ab22dfd..e82c09e6e9 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -289,12 +289,15 @@ 4B6484F327FD1E350050A7A1 /* MenuControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B6484E927FD1E340050A7A1 /* MenuControllerView.swift */; }; 4B6484FC27FFD14F0050A7A1 /* WindowsBrowserWaitlistTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B6484FB27FFD14F0050A7A1 /* WindowsBrowserWaitlistTests.swift */; }; 4B75EA9226A266CB00018634 /* PrintingUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B75EA9126A266CB00018634 /* PrintingUserScript.swift */; }; + 4B78074E2B183A1F009DB2CF /* SurveyURLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B78074D2B183A1F009DB2CF /* SurveyURLBuilder.swift */; }; 4B83396C29AC0701003F7EA9 /* AppTrackingProtectionStoringModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B470EE2299C6DD10086EBDC /* AppTrackingProtectionStoringModel.swift */; }; 4B83396F29AC1437003F7EA9 /* AppTrackingProtectionListModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B83396E29AC1437003F7EA9 /* AppTrackingProtectionListModelTests.swift */; }; 4B83397129AC18C9003F7EA9 /* AppTrackingProtectionStoringModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B83397029AC18C9003F7EA9 /* AppTrackingProtectionStoringModelTests.swift */; }; 4B83397329AFB8D2003F7EA9 /* AppTrackingProtectionFeedbackModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B83397229AFB8D2003F7EA9 /* AppTrackingProtectionFeedbackModel.swift */; }; 4B83397529AFBCE6003F7EA9 /* AppTrackingProtectionFeedbackModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B83397429AFBCE6003F7EA9 /* AppTrackingProtectionFeedbackModelTests.swift */; }; 4B948E2629DCCDB9002531FA /* Persistence in Frameworks */ = {isa = PBXBuildFile; productRef = 4B948E2529DCCDB9002531FA /* Persistence */; }; + 4BB697A42B1D99C4003699B5 /* VPNWaitlistActivationDateStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B78074B2B1823C5009DB2CF /* VPNWaitlistActivationDateStore.swift */; }; + 4BB697A52B1D99C5003699B5 /* VPNWaitlistActivationDateStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B78074B2B1823C5009DB2CF /* VPNWaitlistActivationDateStore.swift */; }; 4BB7CBB02AF59C310014A35F /* VPNWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB7CBAF2AF59C310014A35F /* VPNWidget.swift */; }; 4BBBBA872B02E85400D965DA /* DesignResourcesKit in Frameworks */ = {isa = PBXBuildFile; productRef = 4BBBBA862B02E85400D965DA /* DesignResourcesKit */; }; 4BBBBA8D2B031B4200D965DA /* VPNWaitlistDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBBBA892B031B4200D965DA /* VPNWaitlistDebugViewController.swift */; }; @@ -1326,6 +1329,8 @@ 4B6484E927FD1E340050A7A1 /* MenuControllerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuControllerView.swift; sourceTree = ""; }; 4B6484FB27FFD14F0050A7A1 /* WindowsBrowserWaitlistTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowsBrowserWaitlistTests.swift; sourceTree = ""; }; 4B75EA9126A266CB00018634 /* PrintingUserScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrintingUserScript.swift; sourceTree = ""; }; + 4B78074B2B1823C5009DB2CF /* VPNWaitlistActivationDateStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNWaitlistActivationDateStore.swift; sourceTree = ""; }; + 4B78074D2B183A1F009DB2CF /* SurveyURLBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurveyURLBuilder.swift; sourceTree = ""; }; 4B83396E29AC1437003F7EA9 /* AppTrackingProtectionListModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTrackingProtectionListModelTests.swift; sourceTree = ""; }; 4B83397029AC18C9003F7EA9 /* AppTrackingProtectionStoringModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTrackingProtectionStoringModelTests.swift; sourceTree = ""; }; 4B83397229AFB8D2003F7EA9 /* AppTrackingProtectionFeedbackModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTrackingProtectionFeedbackModel.swift; sourceTree = ""; }; @@ -3499,6 +3504,8 @@ 4BBBBA8B2B031B4200D965DA /* VPNWaitlistView.swift */, 4BBBBA8A2B031B4200D965DA /* VPNWaitlistViewController.swift */, 4BCD146A2B05C4B5000B1E4C /* VPNWaitlistTermsAndConditionsViewController.swift */, + 4B78074B2B1823C5009DB2CF /* VPNWaitlistActivationDateStore.swift */, + 4B78074D2B183A1F009DB2CF /* SurveyURLBuilder.swift */, ); name = VPN; sourceTree = ""; @@ -6214,6 +6221,7 @@ 02025AEB2988229800E694E7 /* Utils.swift in Sources */, 02025AEC2988229800E694E7 /* AppTrackingProtectionPacketTunnelProvider.swift in Sources */, 02025B1029884DC500E694E7 /* AppTrackerDataParser.swift in Sources */, + 4BB697A52B1D99C5003699B5 /* VPNWaitlistActivationDateStore.swift in Sources */, EEFC6A602AC0F2F80065027D /* UserText.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -6243,6 +6251,7 @@ 8528AE81212F15D600D0BD74 /* AppRatingPrompt.xcdatamodeld in Sources */, 1E24295E293F57FA00584836 /* LottieView.swift in Sources */, 8577A1C5255D2C0D00D43FCD /* HitTestingToolbar.swift in Sources */, + 4BB697A42B1D99C4003699B5 /* VPNWaitlistActivationDateStore.swift in Sources */, 853C5F5B21BFF0AE001F7A05 /* HomeCollectionView.swift in Sources */, 3132FA2627A0784600DD7A12 /* FilePreviewHelper.swift in Sources */, 9820FF502244FECC008D4782 /* UIScrollViewExtension.swift in Sources */, @@ -6317,6 +6326,7 @@ F1386BA41E6846C40062FC3C /* TabDelegate.swift in Sources */, C1B924B72ACD6E6800EE7B06 /* AutofillNeverSavedTableViewCell.swift in Sources */, 020108A929A7C1CD00644F9D /* AppTrackerImageCache.swift in Sources */, + 4B78074E2B183A1F009DB2CF /* SurveyURLBuilder.swift in Sources */, 3132FA2A27A0788F00DD7A12 /* QuickLookPreviewHelper.swift in Sources */, C1D21E2D293A5965006E5A05 /* AutofillLoginSession.swift in Sources */, 4B53648A26718D0E001AA041 /* EmailWaitlist.swift in Sources */, @@ -9207,7 +9217,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 87.3.0; + version = 88.0.0; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index ab1dc5d3b8..7eea215cbe 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "9228f64c71e1f2ed76792482f1cfaca6ff9eb5e2", - "version": "87.3.0" + "revision": "7b35b4c604f1cf17b48aabf72526b15a2fdcc6ce", + "version": "88.0.0" } }, { diff --git a/DuckDuckGo/AppDelegate+Waitlists.swift b/DuckDuckGo/AppDelegate+Waitlists.swift index 83f5a84a24..d228ec680b 100644 --- a/DuckDuckGo/AppDelegate+Waitlists.swift +++ b/DuckDuckGo/AppDelegate+Waitlists.swift @@ -18,6 +18,7 @@ // import Foundation +import Core import BackgroundTasks import NetworkProtection @@ -42,6 +43,10 @@ extension AppDelegate { #if NETWORK_PROTECTION private func checkNetworkProtectionWaitlist() { + if AppDependencyProvider.shared.featureFlagger.isFeatureOn(.networkProtectionWaitlistAccess) { + DailyPixel.fire(pixel: .networkProtectionWaitlistUserActive) + } + VPNWaitlist.shared.fetchInviteCodeIfAvailable { [weak self] error in guard error == nil else { #if !DEBUG @@ -89,6 +94,8 @@ extension AppDelegate { do { try await NetworkProtectionCodeRedemptionCoordinator().redeem(inviteCode) VPNWaitlist.shared.sendInviteCodeAvailableNotification() + + DailyPixel.fire(pixel: .networkProtectionWaitlistNotificationShown) } catch {} } } diff --git a/DuckDuckGo/AppDelegate.swift b/DuckDuckGo/AppDelegate.swift index 4e626e307d..92b00ee2e1 100644 --- a/DuckDuckGo/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate.swift @@ -845,6 +845,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate { if identifier == VPNWaitlist.notificationIdentifier { presentNetworkProtectionWaitlistModal() + DailyPixel.fire(pixel: .networkProtectionWaitlistNotificationLaunched) } #endif } diff --git a/DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/Contents.json b/DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/Contents.json new file mode 100644 index 0000000000..cbe62e069c --- /dev/null +++ b/DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "RemoteMessageVPNAnnounce.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/RemoteMessageVPNAnnounce.pdf b/DuckDuckGo/HomeMessage.xcassets/RemoteMessage/RemoteMessageVPNAnnounce.imageset/RemoteMessageVPNAnnounce.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2e31d6e5ae561f6dee47d54a3eec79ec0e4d5458 GIT binary patch literal 15349 zcmeI(TaTnybq3)3`W1D91d*otJ0B!uDL#Nuf*^J-kWem$cH0aZPn(%`g!Ak3y!-oV zS9Q;T+Y!o@TgcR`+NX7X*V?;&_WMtN^`bq^heLa8j`x51%i(zZ$msceS0;b{CoSZ%-JS>VZFC6-@NZbeTOf;`_n@?%dhU=ezVg)zk7H8-P_x{cV*|#{`T?@rC!cSCpV)>AjkYd0Qmzd1CgVVIk7weh$NeLMKD zPDs=7-R+x0H=mYfY=`lZWz=hU0MR$Ej`mW8a>pd0Lv`xSslDUApFq z)DEY4?Aoq9-X1Ok+u4cQVHz`XX#1%dkFD9=+V{)R9&0-eLx1diyUxS9WcFwq1B{$c z)3OZ9bnKVYIxMTz+wRoj1&{rDnuoSsmgAVMn;El*5Z7^-Tg1Md=H40C)6&n&6i$|T zTpJrBO-nb;NJHPXV`u6>pq3`54#(p_k+vnxxt~dF-=d#REol@XUUuzHgVo06GVXOG zxU|i3O^jN`XuP0V}U ztmZ}6ofyirPLGI!!oKg}dMtnKhM}F0uOE@u)7tQ_?$}Notnb(U_+s+@SZr~47 zA&v%&6QghY)4(1XeZ~&+GV*>thSrD=A@dtF`irhV&0RMQg2som@(;Z%ZnAq>KUXi~x6eyi(?8YAenf8C6KF|E ze_#rib6nEn(@!^lXpe~>dyakj_5SbkAs&By^CTG#=VVxu(ue0gU8Va!&g;v(kAHi- z`R#YFA6|X?`uk+h$E$zfU&*Qols|6b2Ub3lZvGib{^qkTxjy>%^j`E&_U{Yjvtj$9 z+rIcfT8PE%2HRA7mA9_!^^t8zkWqP+)>B1JXN5GUzIbjO`B&pEHk=vNZl0VyQ4Np4TgH=o}9_p95x&wu^#@slqO zSO2PcqVqyJMzg&W&GVllo`P6oM+8O)&iK9KOQ7|wlr_pn zmdea7tM|u>Yx^_Lm2!LNPV=VxN`szk;|w^qkSqy-<-}L}WnOEZGt_gvMr$&@zns23 zEnzH&**TOu5GEkvj(J_^@8&5U-n6mR(}TF0XiS;!mN4F^g6cu8dt# z3J;OZ6|FD^H9^qi7B<3Ii3R(9d&G$6*K=)*(OJB1KmEoSW-Eu=SIdgB%VAq!DmC+2 zUK?YS64}fw9!}pFL*qSBdg{lbjSgkkPo+dZLGScaX^LT{Q3Mjklqc05>VC12m>Heb zbHzrY1e&d@mTq8zTr2A6}j+0e552fEYb-LqMP+uD4yNq}3`wxN#ZQc7bFr)ULvZxQF@R+J!c|gDH~W`k4K-@O5kf(6wUVC=-OQRLF?ytnGSKi@34r6v%95 zSsT|cNY!2#h)WeyDHCH7juL$j=kJ-ZHL>(*yT z-@CAT5&DJ3u>vMja$JoZw6FU`+qc~MbP%a^w0iOB#>st2-8$6C@^j=njg7W%My_o` zG@*4qD1bv7z%GlipLbzLDD7Ah%<3Mh*V)-DQ4Qsuj=X2g!Q<}9mW9t3OLQI4I?$%w(P_1FSmLBS z)@lb%EZR*8%DwViPlIugTHh?WY15@2#Spwoj%zy&`VRDfI_tk{1k-0UwvAl-MbUs} z!6~j zrwDCoS5PZFOg+^X8tZnS(u3tLFiKr(WUl*Iai}g6lz-u2!udwyIZks(?>lUeVo-|Zv&AeQX+Z&Zm{43O1&r-!NbGjeyd223p-F zMokMqd`x~3*4PzV>xMGt8MNkxHL+JGx$6PSZSQtv=cp`@W?4oq^xVDiJLkbyT7@FF zK(mIM;(>`6_C}@S#Dq}Y(wQwd&HS1yLMuKN8qFkPRNCz!3bi3oR-#4#8ab2MAji^; z8@j>4Z6QNWqfKl~qElCiljjA-5yI-`zKko|isO6q$<#v1-5>{89*v9rYm?Hmah*Hb zw63MZl_4WZqpa1gv07XfFX9gpV)`zt6j98EeK?gSj=Wmzi^ubj63cYdwuBXvb(v{B znQ3s%d+n!}1IHEi17i%Uyk_@j_$(chF1N;rl)fxZMF0cSBe7!Fjej65TI#}lLLlkL z7?E8=qB2?HZ|9A}c#L5Q+R}mGEWBEcn8eY|1IMnDB#HodRWC?!>TVHfeIh7#siLsE zVedldU63_Hxb>iefAK0)D;hvtSg|H+`f?N`bmty+r8~lqQ8dWoY4~?m+o)65u) z12o;3$15tEh)2IFo+1sDwqPr1aUcAMJE zQEnDUED^%VZ7~5kHdB`_P|AMHMw(2%Ty`HVUAH(&aGbqdg?9{9Rt_om6t+N0ZYLb1 zV22WzoYNzgd<~CEwho*Oy9xwIvH4;U=+gfj}5cOcGC6kg48D2%l0SVkfC_2_P66Q3fOJ zyC!rL$W%!sW9d|{qDUq3E0KQR0>Y39k`?VwN4$TXYg`#)|oX6U?GcWNTMnf9> zIfoV>nuYe0(dWEGDKz8qRs=>6#n@hEdtB8zQu)4N8eF5GLsbrK5q^`r652uzBp4I~ zUb9Tu@m-e$K3PyWJR+@Tc{)Z;9Er)d}8%Ujx4l1 zvQcMBf$w4W)UUxCLRpYSa=!dO!1Qrgu`Wq5S>0xWt*q_rK`UHm(;~T^^KPYalpuZ3 zq~O@gNacCFJ+pfTR5V4Zf?J`<@&#AR+MUNW4g|&u0kVO!OAFh(y$S9RE16{jXcLgg zu0jCyZ0v}fAaGaIgwqrHI5myraS*$a>9NXflW{^*VhQD21O>R*D7Q|6OVP){%2l4MM<#8E~hEBP#?PhM)peN-LlO^Z)PNjprf{RjsW;ZWq#?Yj+d__t^*;9HQ7fw?&lmO)llQ3C0=S)SRG!q_`4uU5~ z%?)STC?Jz!CalAhMe1AvE&;tHZKzQ!!pu`%BLWbir+Ds>O{BMZGbW{W?$3(@fZKM& z91(B;TK2?qNca;Z^JJ@-NUqk1h;!i-oB~RW1PMxpqqT%b`ZHU_9@k7{6N|tOsYuV0 zxJodxv@?Y&DT}TdDbDTXCD_f59@A=hc^O$;T$NQgQ=%;LPy&RRBY@G4~=Yyc`><+59DsYq=Y^6$p*C z;WxBB-&|-VSILQ?Mhd6m$BmBnylY z=?kKYWaYPVOPxSe1UI#_q`~c2fj5$29h?Gz016>JCb9`otzcWHhN2Op?^$ascjJLB zqBCiz;>j&s&W$jfsf6J9u=VhnXE@+fx=1#OAT3a2`#!UgK@upth+FAis7qDfVi0wv zG~+_DX?ifl3F3e$EHD7L$1xlcAj-`#tVh@d_Moc4T7oYQnAgiO^A-@=9B|bjOZEbz z76DG+wj$WMwFXgV6_)^NZ)ZzZLd#G&%_;L_Qf>?glYmPpA!2o$k`t7U962W>tB0tg z7(y~c3DXj6u>6Pkjy%5lm-3i74=JW658R&B7hkw0DR5!QQTZ*hm4+=R^;gj6;}7Lo zJ0}(SI8P9SPG8Z1C>BV2Mbztv)p78sT)PdINeB@Ul`s9+mWW(>gj5hBBS?{TA%UVm ze?(cQ(&EHt3Q#6gg-wCSU@!Mj6yZtOO3jjBqy|V)B&`a^k4U5~V1~3$y*;Ei3zuvc zFy5jkcR!-B4&G|L^JFnVa4%3LAxmf_g34T8Ep$S?=zkFcgr)}uvs~oI9GPk`eHAI= zcwf%xgNi3j$$;iu4n>TPFh#0 z+|>OlB_2UDA{ibw z#keHgv=PrUoox10n!BD?PnBu?%-hcZ$I8hX2rM;`CxvHTp{T4@fdH73Q}@jaC5ccJ zFJ`~ZgMJ0CEowyZ?my~Pg5YE)<2(%C`vf7mS;*^xtC>|gV1*Wgg#NnNe160s^3WYC;vKRhC-iygFzqg95OXl5(BeO4WBB zRgYNSNN(qnNC`ilFYtF7HpErF!RPryrNpkv@T*bv%eqpf)CI0uK>NA!JB2z9KQJhu zV+pNuWsJP0YZ^o#5UZ9_>?<=s!=z!h4W{MQnqV@6MZuv`VoHx)qE+sdlIT#{l*!)v zC=pO7hq~%YHkQhy<9)xReIKP!c)6ZRQrM(dPhKgNztU{mMgcDBHNf-r<=x?jXjNxd z<95v^%Q0)vc-OwXn`kF*#Ez^0McG+B zY$Xb!V&;?W1G=~U>$(?GUD$ecTs^S$DzWl)*`hLkIZ7oJo&CMvgXJ;$_V7Qyg}eMB zO!7K^k@xxk`sU63!@J`j^ZP=7`|mA(|MKhoXOK6)z5DXj%OCqo#jJGsaU?yRe?)Tg z$^Dy$yEk^s3;Oe~H-DesV?HQicG}fL`$F6J$Z`Me)t3&dHps~1`Ou%-f0ya+vG8vD z(d7BjzO;4CdYF87+4REwCodmfzP|tZ@#Md~z5D8r$bZ;0o&O$H*+3`y{+Dy*@A&3S z%Khe3l6vDY2~K`GN;~rDDAgeb@>iGd@)q?8DFyx`68z7Lo|3@HC!{oLpOA86dnP@+ zefjG3-P=Rd@S9I5;pgw}zq$Lx@#n9;{Kck;o6qm>sUcD>n!Wkr)&JZ@V)Xg$;pN+h SBE!6KT@OF|*=N7|)&Bw;x74u! literal 0 HcmV?d00001 diff --git a/DuckDuckGo/HomeMessageViewModel.swift b/DuckDuckGo/HomeMessageViewModel.swift index a64579cfdd..1f5a81b56a 100644 --- a/DuckDuckGo/HomeMessageViewModel.swift +++ b/DuckDuckGo/HomeMessageViewModel.swift @@ -137,6 +137,22 @@ struct HomeMessageViewModel { case .url(let value): return { LaunchTabNotification.postLaunchTabNotification(urlString: value) + onDidClose(buttonAction) + } + case .surveyURL(let value): + return { +#if NETWORK_PROTECTION + if let surveyURL = URL(string: value) { + let surveyURLBuilder = DefaultSurveyURLBuilder() + let surveyURLWithParameters = surveyURLBuilder.addSurveyParameters(to: surveyURL) + LaunchTabNotification.postLaunchTabNotification(urlString: surveyURLWithParameters.absoluteString) + } else { + LaunchTabNotification.postLaunchTabNotification(urlString: value) + } +#else + LaunchTabNotification.postLaunchTabNotification(urlString: value) +#endif + onDidClose(buttonAction) } case .appStore: diff --git a/DuckDuckGo/NetworkProtectionAccessController.swift b/DuckDuckGo/NetworkProtectionAccessController.swift index 7b1faaacce..16da156180 100644 --- a/DuckDuckGo/NetworkProtectionAccessController.swift +++ b/DuckDuckGo/NetworkProtectionAccessController.swift @@ -56,32 +56,53 @@ struct NetworkProtectionAccessController: NetworkProtectionAccess { private let networkProtectionWaitlistStorage: WaitlistStorage private let networkProtectionTermsAndConditionsStore: NetworkProtectionTermsAndConditionsStore private let featureFlagger: FeatureFlagger + private let internalUserDecider: InternalUserDecider + + private var isUserLocaleAllowed: Bool { + var regionCode: String? + + if #available(iOS 16.0, *) { + regionCode = Locale.current.region?.identifier + } else { + regionCode = Locale.current.regionCode + } + + return (regionCode ?? "US") == "US" + } + init( networkProtectionActivation: NetworkProtectionFeatureActivation = NetworkProtectionKeychainTokenStore(), networkProtectionWaitlistStorage: WaitlistStorage = WaitlistKeychainStore(waitlistIdentifier: VPNWaitlist.identifier), networkProtectionTermsAndConditionsStore: NetworkProtectionTermsAndConditionsStore = NetworkProtectionTermsAndConditionsUserDefaultsStore(), - featureFlagger: FeatureFlagger = AppDependencyProvider.shared.featureFlagger + featureFlagger: FeatureFlagger = AppDependencyProvider.shared.featureFlagger, + internalUserDecider: InternalUserDecider = AppDependencyProvider.shared.internalUserDecider ) { self.networkProtectionActivation = networkProtectionActivation self.networkProtectionWaitlistStorage = networkProtectionWaitlistStorage self.networkProtectionTermsAndConditionsStore = networkProtectionTermsAndConditionsStore self.featureFlagger = featureFlagger + self.internalUserDecider = internalUserDecider } func networkProtectionAccessType() -> NetworkProtectionAccessType { - // First, check for users who have activated the VPN via an invite code: + // Only show NetP to US or internal users: + guard isUserLocaleAllowed || internalUserDecider.isInternalUser else { + return .none + } + + // Check for users who have activated the VPN via an invite code: if networkProtectionActivation.isFeatureActivated && !networkProtectionWaitlistStorage.isInvited { return .inviteCodeInvited } - // Next, check if the waitlist is still active; if not, the user has no access. + // Check if the waitlist is still active; if not, the user has no access. let isWaitlistActive = featureFlagger.isFeatureOn(.networkProtectionWaitlistActive) if !isWaitlistActive { return .none } - // Next, check if a waitlist user has NetP access and whether they need to accept T&C. + // Check if a waitlist user has NetP access and whether they need to accept T&C. if networkProtectionActivation.isFeatureActivated && networkProtectionWaitlistStorage.isInvited { if networkProtectionTermsAndConditionsStore.networkProtectionWaitlistTermsAndConditionsAccepted { return .waitlistInvited @@ -90,7 +111,7 @@ struct NetworkProtectionAccessController: NetworkProtectionAccess { } } - // Next, check if the user has waitlist access at all and whether they've already joined. + // Check if the user has waitlist access at all and whether they've already joined. let hasWaitlistAccess = featureFlagger.isFeatureOn(.networkProtectionWaitlistAccess) if hasWaitlistAccess { if networkProtectionWaitlistStorage.isOnWaitlist { diff --git a/DuckDuckGo/RemoteMessaging.swift b/DuckDuckGo/RemoteMessaging.swift index ee6c3d897c..6b64221d64 100644 --- a/DuckDuckGo/RemoteMessaging.swift +++ b/DuckDuckGo/RemoteMessaging.swift @@ -25,6 +25,7 @@ import BrowserServicesKit import Persistence import Bookmarks import RemoteMessaging +import NetworkProtection struct RemoteMessaging { @@ -149,17 +150,35 @@ struct RemoteMessaging { case .success(let statusResponse): os_log("Successfully fetched remote messages", log: .remoteMessaging, type: .debug) + let isNetworkProtectionWaitlistUser: Bool + let daysSinceNetworkProtectionEnabled: Int + +#if NETWORK_PROTECTION + let vpnAccess = NetworkProtectionAccessController() + let accessType = vpnAccess.networkProtectionAccessType() + let isVPNActivated = NetworkProtectionKeychainTokenStore().isFeatureActivated + let activationDateStore = DefaultVPNWaitlistActivationDateStore() + + isNetworkProtectionWaitlistUser = (accessType == .waitlistInvited) && isVPNActivated + daysSinceNetworkProtectionEnabled = activationDateStore.daysSinceActivation() ?? -1 +#else + isNetworkProtectionWaitlistUser = false + daysSinceNetworkProtectionEnabled = -1 +#endif + let remoteMessagingConfigMatcher = RemoteMessagingConfigMatcher( - appAttributeMatcher: AppAttributeMatcher(statisticsStore: statisticsStore, - variantManager: variantManager, - isInternalUser: AppDependencyProvider.shared.internalUserDecider.isInternalUser), - userAttributeMatcher: UserAttributeMatcher(statisticsStore: statisticsStore, - variantManager: variantManager, - bookmarksCount: bookmarksCount, - favoritesCount: favoritesCount, - appTheme: AppUserDefaults().currentThemeName.rawValue, - isWidgetInstalled: isWidgetInstalled), - dismissedMessageIds: remoteMessagingStore.fetchDismissedRemoteMessageIds() + appAttributeMatcher: AppAttributeMatcher(statisticsStore: statisticsStore, + variantManager: variantManager, + isInternalUser: AppDependencyProvider.shared.internalUserDecider.isInternalUser), + userAttributeMatcher: UserAttributeMatcher(statisticsStore: statisticsStore, + variantManager: variantManager, + bookmarksCount: bookmarksCount, + favoritesCount: favoritesCount, + appTheme: AppUserDefaults().currentThemeName.rawValue, + isWidgetInstalled: isWidgetInstalled, + isNetPWaitlistUser: isNetworkProtectionWaitlistUser, + daysSinceNetPEnabled: daysSinceNetworkProtectionEnabled), + dismissedMessageIds: remoteMessagingStore.fetchDismissedRemoteMessageIds() ) let processor = RemoteMessagingConfigProcessor(remoteMessagingConfigMatcher: remoteMessagingConfigMatcher) diff --git a/DuckDuckGo/SettingsViewController.swift b/DuckDuckGo/SettingsViewController.swift index f8bab32085..1ee3f0ef18 100644 --- a/DuckDuckGo/SettingsViewController.swift +++ b/DuckDuckGo/SettingsViewController.swift @@ -512,6 +512,10 @@ class SettingsViewController: UITableViewController { override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { let theme = ThemeManager.shared.currentTheme cell.backgroundColor = theme.tableCellBackgroundColor + + if cell == netPCell { + DailyPixel.fire(pixel: .networkProtectionSettingsRowDisplayed) + } } override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection: Int) { diff --git a/DuckDuckGo/SurveyURLBuilder.swift b/DuckDuckGo/SurveyURLBuilder.swift new file mode 100644 index 0000000000..c4bf284a41 --- /dev/null +++ b/DuckDuckGo/SurveyURLBuilder.swift @@ -0,0 +1,86 @@ +// +// SurveyURLBuilder.swift +// DuckDuckGo +// +// Copyright © 2023 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#if NETWORK_PROTECTION + +import Foundation +import BrowserServicesKit +import Core +import Common + +protocol SurveyURLBuilder { + func addSurveyParameters(to url: URL) -> URL +} + +struct DefaultSurveyURLBuilder: SurveyURLBuilder { + + enum SurveyURLParameters: String, CaseIterable { + case atb = "atb" + case atbVariant = "var" + case daysSinceActivated = "delta" + case iosVersion = "mv" + case appVersion = "ddgv" + } + + private let statisticsStore: StatisticsStore + private let activationDateStore: VPNWaitlistActivationDateStore + + init(statisticsStore: StatisticsStore = StatisticsUserDefaults(), + activationDateStore: VPNWaitlistActivationDateStore = DefaultVPNWaitlistActivationDateStore()) { + self.statisticsStore = statisticsStore + self.activationDateStore = activationDateStore + } + + func addSurveyParameters(to surveyURL: URL) -> URL { + guard var components = URLComponents(string: surveyURL.absoluteString) else { + assertionFailure("Could not build URL components from survey URL") + return surveyURL + } + + var queryItems = components.queryItems ?? [] + + for parameter in SurveyURLParameters.allCases { + switch parameter { + case .atb: + if let atb = statisticsStore.atb { + queryItems.append(URLQueryItem(name: parameter.rawValue, value: atb)) + } + case .atbVariant: + if let variant = statisticsStore.variant { + queryItems.append(URLQueryItem(name: parameter.rawValue, value: variant)) + } + case .daysSinceActivated: + if let daysSinceActivated = activationDateStore.daysSinceActivation() { + queryItems.append(URLQueryItem(name: parameter.rawValue, value: String(describing: daysSinceActivated))) + } + case .iosVersion: + queryItems.append(URLQueryItem(name: parameter.rawValue, value: AppVersion.shared.osVersion)) + case .appVersion: + queryItems.append(URLQueryItem(name: parameter.rawValue, value: AppVersion.shared.versionAndBuildNumber)) + } + } + + components.queryItems = queryItems + + return components.url ?? surveyURL + } + +} + +#endif diff --git a/DuckDuckGo/VPNWaitlistActivationDateStore.swift b/DuckDuckGo/VPNWaitlistActivationDateStore.swift new file mode 100644 index 0000000000..1c8e684ab2 --- /dev/null +++ b/DuckDuckGo/VPNWaitlistActivationDateStore.swift @@ -0,0 +1,82 @@ +// +// VPNWaitlistActivationDateStore.swift +// DuckDuckGo +// +// Copyright © 2023 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#if NETWORK_PROTECTION + +import Foundation +import Core + +protocol VPNWaitlistActivationDateStore { + + func setActivationDateIfNecessary() + func daysSinceActivation() -> Int? + +} + +struct DefaultVPNWaitlistActivationDateStore: VPNWaitlistActivationDateStore { + + private enum Constants { + static let networkProtectionActivationDateKey = "com.duckduckgo.network-protection.activation-date" + } + + private let userDefaults: UserDefaults + + init(userDefaults: UserDefaults = .networkProtectionGroupDefaults) { + self.userDefaults = userDefaults + } + + func setActivationDateIfNecessary() { + if userDefaults.double(forKey: Constants.networkProtectionActivationDateKey) != 0 { + return + } + + updateActivationDate(Date()) + } + + func daysSinceActivation() -> Int? { + let timestamp = userDefaults.double(forKey: Constants.networkProtectionActivationDateKey) + + if timestamp == 0 { + return nil + } + + let activationDate = Date(timeIntervalSinceReferenceDate: timestamp) + return daysSince(date: activationDate) + } + + // MARK: - Resetting + + func removeDates() { + userDefaults.removeObject(forKey: Constants.networkProtectionActivationDateKey) + } + + // MARK: - Updating + + func updateActivationDate(_ date: Date) { + userDefaults.set(date.timeIntervalSinceReferenceDate, forKey: Constants.networkProtectionActivationDateKey) + } + + private func daysSince(date storedDate: Date) -> Int? { + let numberOfDays = Calendar.current.dateComponents([.day], from: storedDate, to: Date()) + return numberOfDays.day + } + +} + +#endif diff --git a/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift b/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift index d1f80e13ca..2dc044aa24 100644 --- a/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift +++ b/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift @@ -40,6 +40,8 @@ final class VPNWaitlistTermsAndConditionsViewController: UIViewController { title = UserText.networkProtectionWaitlistJoinTitle addHostingControllerToViewHierarchy() + + DailyPixel.fire(pixel: .networkProtectionWaitlistTermsDisplayed) } private func addHostingControllerToViewHierarchy() { @@ -47,6 +49,8 @@ final class VPNWaitlistTermsAndConditionsViewController: UIViewController { var termsAndConditionsStore = NetworkProtectionTermsAndConditionsUserDefaultsStore() termsAndConditionsStore.networkProtectionWaitlistTermsAndConditionsAccepted = true + DailyPixel.fire(pixel: .networkProtectionWaitlistTermsAccepted) + self.navigationController?.popToRootViewController(animated: true) let networkProtectionViewController = NetworkProtectionRootViewController() self.navigationController?.pushViewController(networkProtectionViewController, animated: true) diff --git a/DuckDuckGo/VPNWaitlistViewController.swift b/DuckDuckGo/VPNWaitlistViewController.swift index 465a47e34e..c25153108b 100644 --- a/DuckDuckGo/VPNWaitlistViewController.swift +++ b/DuckDuckGo/VPNWaitlistViewController.swift @@ -68,6 +68,10 @@ final class VPNWaitlistViewController: UIViewController { private func updateViewState() { Task { await self.viewModel.updateViewState() + + if self.viewModel.viewState == .notJoinedQueue { + DailyPixel.fire(pixel: .networkProtectionWaitlistIntroScreenDisplayed) + } } } diff --git a/DuckDuckGoTests/RemoteMessagingStoreTests.swift b/DuckDuckGoTests/RemoteMessagingStoreTests.swift index 39988fec3b..512e1d4b76 100644 --- a/DuckDuckGoTests/RemoteMessagingStoreTests.swift +++ b/DuckDuckGoTests/RemoteMessagingStoreTests.swift @@ -136,7 +136,9 @@ class RemoteMessagingStoreTests: XCTestCase { bookmarksCount: 0, favoritesCount: 0, appTheme: "light", - isWidgetInstalled: false), + isWidgetInstalled: false, + isNetPWaitlistUser: false, + daysSinceNetPEnabled: -1), dismissedMessageIds: [] ) diff --git a/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift b/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift index 0f1fe33c1b..4b56523f4e 100644 --- a/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift +++ b/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift @@ -192,6 +192,7 @@ final class NetworkProtectionPacketTunnelProvider: PacketTunnelProvider { settings: settings) startMonitoringMemoryPressureEvents() observeServerChanges() + observeStatusChanges() APIRequest.Headers.setUserAgent(DefaultUserAgentManager.duckDuckGoUserAgent) } @@ -226,6 +227,18 @@ final class NetworkProtectionPacketTunnelProvider: PacketTunnelProvider { } .store(in: &cancellables) } + + private let activationDateStore = DefaultVPNWaitlistActivationDateStore() + + private func observeStatusChanges() { + connectionStatusPublisher.sink { [weak self] status in + if case .connected = status { + self?.activationDateStore.setActivationDateIfNecessary() + } + } + .store(in: &cancellables) + } + } #endif From d2423363f0b8acf4abc42d11783050b866b7219a Mon Sep 17 00:00:00 2001 From: Lorenzo Mattei Date: Mon, 4 Dec 2023 14:46:03 +0100 Subject: [PATCH 02/19] Update Sync e2e tests to fit the new UI (#2215) --- .maestro/shared/sync_create.yaml | 16 +++++++---- .maestro/shared/sync_delete.yaml | 5 ++-- .maestro/sync_tests/01_create_account.yaml | 3 +- .maestro/sync_tests/02_login_account.yaml | 21 +++++++------- .maestro/sync_tests/03_recover_account.yaml | 18 ++++++------ .maestro/sync_tests/04_sync_data.yaml | 31 +++++++++++++++------ 6 files changed, 57 insertions(+), 37 deletions(-) diff --git a/.maestro/shared/sync_create.yaml b/.maestro/shared/sync_create.yaml index bc4bb338d0..ec91e616c1 100644 --- a/.maestro/shared/sync_create.yaml +++ b/.maestro/shared/sync_create.yaml @@ -1,10 +1,14 @@ appId: com.duckduckgo.mobile.ios --- -- assertVisible: Sync & Back Up -- tapOn: Sync & Back Up -- assertVisible: Sync & Back Up -- tapOn: Start Sync & Back Up -- assertVisible: All Set! +- assertVisible: Sync & Backup +- tapOn: Sync & Backup +- assertVisible: Sync & Backup +- tapOn: Sync and Back Up This Device +- assertVisible: You can sync with your other devices later. +- tapOn: Turn on Sync & Backup +- assertVisible: Save Recovery Code +- tapOn: Copy Code - tapOn: Next -- assertVisible: Save Recovery Code? +- assertVisible: Your Data is Synced! +- tapOn: Done diff --git a/.maestro/shared/sync_delete.yaml b/.maestro/shared/sync_delete.yaml index 54a78f3c15..41e53148c4 100644 --- a/.maestro/shared/sync_delete.yaml +++ b/.maestro/shared/sync_delete.yaml @@ -1,9 +1,10 @@ appId: com.duckduckgo.mobile.ios --- -- assertVisible: Sync & Back Up +- assertVisible: Sync & Backup - scroll - tapOn: point: 50%,91% # TODO: Revisit after new setup flow has been implemented. - assertVisible: Delete Server Data? -- tapOn: Delete Server Data \ No newline at end of file +- tapOn: Delete Server Data +- assertVisible: Begin Syncing \ No newline at end of file diff --git a/.maestro/sync_tests/01_create_account.yaml b/.maestro/sync_tests/01_create_account.yaml index 5b48e6c829..37484bffb8 100644 --- a/.maestro/sync_tests/01_create_account.yaml +++ b/.maestro/sync_tests/01_create_account.yaml @@ -21,7 +21,6 @@ tags: # Clean up -- tapOn: Not Now -- assertVisible: Sync & Back Up +- assertVisible: Sync & Backup - runFlow: file: ../shared/sync_delete.yaml diff --git a/.maestro/sync_tests/02_login_account.yaml b/.maestro/sync_tests/02_login_account.yaml index 99a69684fa..de383e6e10 100644 --- a/.maestro/sync_tests/02_login_account.yaml +++ b/.maestro/sync_tests/02_login_account.yaml @@ -20,23 +20,24 @@ tags: - runFlow: file: ../shared/sync_create.yaml -# Copy Sync Code and Log Out -- tapOn: Copy Code -- tapOn: Not Now -- assertVisible: Sync & Back Up -- tapOn: Turn Off Sync & Back Up +# Log Out +- assertVisible: Sync & Backup +- tapOn: Turn Off Sync & Backup... - assertVisible: Turn Off Sync? - tapOn: Remove # Login -- assertVisible: Sync & Back Up -- tapOn: Enter Text Code +- assertVisible: Sync & Backup +- tapOn: Sync with Another Device +- assertVisible: Scan QR Code +- tapOn: Manually Enter Code - tapOn: Paste -- assertVisible: Device Synced! +- assertVisible: Save Recovery Code - tapOn: Next -- tapOn: Not Now +- assertVisible: Your Data is Synced! +- tapOn: Done # Clean up -- assertVisible: Sync & Back Up +- assertVisible: Sync & Backup - runFlow: file: ../shared/sync_delete.yaml diff --git a/.maestro/sync_tests/03_recover_account.yaml b/.maestro/sync_tests/03_recover_account.yaml index 1cd62c3a81..4736be829c 100644 --- a/.maestro/sync_tests/03_recover_account.yaml +++ b/.maestro/sync_tests/03_recover_account.yaml @@ -58,14 +58,16 @@ tags: - tapOn: Settings - runFlow: file: ../shared/set_internal_user.yaml -- assertVisible: Sync & Back Up -- tapOn: Sync & Back Up -- assertVisible: Sync & Back up -- tapOn: Recover Your Data -- tapOn: Enter Text Code +- assertVisible: Sync & Backup +- tapOn: Sync & Backup +- assertVisible: Begin Syncing +- tapOn: Recover Synced Data +- assertVisible: Recover Synced Data +- assertVisible: Get Started +- tapOn: Get Started +- tapOn: Enter Text Code Manually - tapOn: Paste -- assertVisible: Device Synced! +- assertVisible: Save Recovery Code - tapOn: Next -- tapOn: Not Now -- tapOn: Settings +- assertVisible: Your Data is Synced! - tapOn: Done \ No newline at end of file diff --git a/.maestro/sync_tests/04_sync_data.yaml b/.maestro/sync_tests/04_sync_data.yaml index 79f2f68cea..2d6ffeebe3 100644 --- a/.maestro/sync_tests/04_sync_data.yaml +++ b/.maestro/sync_tests/04_sync_data.yaml @@ -94,20 +94,32 @@ tags: - tapOn: Settings - runFlow: file: ../shared/set_internal_user.yaml -- assertVisible: Sync & Back Up -- tapOn: Sync & Back Up -- assertVisible: Sync & Back up -- tapOn: Recover Your Data -- tapOn: Enter Text Code +- assertVisible: Sync & Backup +- tapOn: Sync & Backup +- assertVisible: Begin Syncing +- tapOn: Recover Synced Data +- assertVisible: Recover Synced Data +- assertVisible: Get Started +- tapOn: Get Started +- tapOn: Enter Text Code Manually - tapOn: Paste -- assertVisible: Device Synced! +- assertVisible: Save Recovery Code - tapOn: Next -- tapOn: Not Now +- assertVisible: Your Data is Synced! +- tapOn: Done +- assertVisible: Sync & Backup - tapOn: Settings +- assertVisible: Settings - tapOn: Done # Verify bookmarks and favorites have been merged - tapOn: Bookmarks +- runFlow: + when: + visible: + text: Download Missing Icons? + commands: + - tapOn: Not Now - assertVisible: Spread Privacy - assertVisible: Stack Overflow - Where Developers Learn, Share, & Build Careers @@ -137,9 +149,10 @@ tags: # Enable Share Favorites and expect all favorites - tapOn: Done - tapOn: Settings -- tapOn: Sync & Back Up +- tapOn: Sync & Backup - scroll -- assertVisible: Share Favorites +- assertVisible: Unify Favorites +- tapOn: "0" - tapOn: "0" - tapOn: Settings - tapOn: Done From e91af27aeaaad522d4b75ca90a60eeabb2129887 Mon Sep 17 00:00:00 2001 From: Thom Espach Date: Mon, 4 Dec 2023 14:25:59 +0000 Subject: [PATCH 03/19] Address Bar Spoofing Tests + Remediation (#2181) 1. Introduce maestro test flows for address bar spoofing. 2. Update the omnibar text value to "about:blank" when a file download prompt is shown. --- .maestro/security_tests/0_all.yaml | 39 +++++++++++++++++++ .../1_-_AddressBarSpoof,_basicauth.yaml | 35 +++++++++++++++++ .../2_-_AddressBarSpoof,_aboutblank.yaml | 17 ++++++++ .../3_-_AddressBarSpoof,_appschemes.yaml | 30 ++++++++++++++ .../4_-_AddressBarSpoof,_b64_html.yaml | 15 +++++++ .../5_-_AddressBarSpoof,_downloadpath.yaml | 39 +++++++++++++++++++ .../6_-_AddressBarSpoof,_formaction.yaml | 16 ++++++++ .../7_-_AddressBarSpoof,_pagerewrite.yaml | 16 ++++++++ DuckDuckGo/TabViewController.swift | 2 + 9 files changed, 209 insertions(+) create mode 100644 .maestro/security_tests/0_all.yaml create mode 100644 .maestro/security_tests/1_-_AddressBarSpoof,_basicauth.yaml create mode 100644 .maestro/security_tests/2_-_AddressBarSpoof,_aboutblank.yaml create mode 100644 .maestro/security_tests/3_-_AddressBarSpoof,_appschemes.yaml create mode 100644 .maestro/security_tests/4_-_AddressBarSpoof,_b64_html.yaml create mode 100644 .maestro/security_tests/5_-_AddressBarSpoof,_downloadpath.yaml create mode 100644 .maestro/security_tests/6_-_AddressBarSpoof,_formaction.yaml create mode 100644 .maestro/security_tests/7_-_AddressBarSpoof,_pagerewrite.yaml diff --git a/.maestro/security_tests/0_all.yaml b/.maestro/security_tests/0_all.yaml new file mode 100644 index 0000000000..44ad6e7a52 --- /dev/null +++ b/.maestro/security_tests/0_all.yaml @@ -0,0 +1,39 @@ +# all.yaml + +appId: com.duckduckgo.mobile.ios +--- + +# Set up +- clearState +- launchApp +- runFlow: + when: + visible: + text: "Let’s Do It!" + index: 0 + file: ../shared/onboarding.yaml + +# Load Site +- assertVisible: + id: "searchEntry" +- tapOn: + id: "searchEntry" +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/" +- pressKey: Enter + +# Manage onboarding +- runFlow: + when: + visible: + text: "Got It" + index: 0 + file: ../shared/onboarding_browsing.yaml + +# Run AddressBarSpoofing tests +- runFlow: ./1_-_AddressBarSpoof,_basicauth.yaml +- runFlow: ./2_-_AddressBarSpoof,_aboutblank.yaml +- runFlow: ./3_-_AddressBarSpoof,_appschemes.yaml +- runFlow: ./4_-_AddressBarSpoof,_b64_html.yaml +- runFlow: ./5_-_AddressBarSpoof,_downloadpath.yaml +- runFlow: ./6_-_AddressBarSpoof,_formaction.yaml +- runFlow: ./7_-_AddressBarSpoof,_pagerewrite.yaml \ No newline at end of file diff --git a/.maestro/security_tests/1_-_AddressBarSpoof,_basicauth.yaml b/.maestro/security_tests/1_-_AddressBarSpoof,_basicauth.yaml new file mode 100644 index 0000000000..cd2c55bed0 --- /dev/null +++ b/.maestro/security_tests/1_-_AddressBarSpoof,_basicauth.yaml @@ -0,0 +1,35 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +- doubleTapOn: + id: "searchEntry" +- pressKey: Backspace +# Test 1 - using \u2028 character +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-basicauth-2028.html" +- pressKey: Enter +- tapOn: "run" +- assertVisible: "Example Domain" +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText.indexOf("https://www.google.com") != 0} +- tapOn: + id: "searchEntry" +# Test 2 - using \u2029 character +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-basicauth-2029.html" +- pressKey: Enter +- tapOn: "run" +- assertVisible: "Example Domain" +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText.indexOf("https://www.google.com") != 0} +- tapOn: + id: "searchEntry" +# Test 3 - using repeated " " space character +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-basicauth-whitespace.html" +- pressKey: Enter +- tapOn: "run" +- assertVisible: "Example Domain" +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText.indexOf("https://www.google.com") != 0} diff --git a/.maestro/security_tests/2_-_AddressBarSpoof,_aboutblank.yaml b/.maestro/security_tests/2_-_AddressBarSpoof,_aboutblank.yaml new file mode 100644 index 0000000000..c5d7613872 --- /dev/null +++ b/.maestro/security_tests/2_-_AddressBarSpoof,_aboutblank.yaml @@ -0,0 +1,17 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +- doubleTapOn: + id: "searchEntry" +- pressKey: Backspace +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-about-blank-rewrite.html" +- pressKey: Enter +- tapOn: "Start" +# This test is expected to load "about:blank" not spoof the address bar with duckduckgo.com with the spoofed content. +- extendedWaitUntil: + visible: "Not DDG." # Spoofed content is visible + timeout: 10000 +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "about:blank"} \ No newline at end of file diff --git a/.maestro/security_tests/3_-_AddressBarSpoof,_appschemes.yaml b/.maestro/security_tests/3_-_AddressBarSpoof,_appschemes.yaml new file mode 100644 index 0000000000..e2031ca3fa --- /dev/null +++ b/.maestro/security_tests/3_-_AddressBarSpoof,_appschemes.yaml @@ -0,0 +1,30 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +# Test 1 +- tapOn: + id: "searchEntry" +- pressKey: Backspace +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-application-scheme.html" +- pressKey: Enter +- tapOn: "Start" +# This will try to open another app +- assertVisible: "Cancel" +- tapOn: "Cancel" +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "https://duckduckgo.com/"} # Should navigate directly here. +- assertNotVisible: "Not DDG." # HTML content shouldn't be spoofed. +- tapOn: + id: "searchEntry" +# Test 2 +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-unsupported-scheme.html" +- pressKey: Enter +- tapOn: "Start" +# This will try to open another app +- assertVisible: "Cancel" +- tapOn: "Cancel" +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-unsupported-scheme.html"} \ No newline at end of file diff --git a/.maestro/security_tests/4_-_AddressBarSpoof,_b64_html.yaml b/.maestro/security_tests/4_-_AddressBarSpoof,_b64_html.yaml new file mode 100644 index 0000000000..1ff6c2152a --- /dev/null +++ b/.maestro/security_tests/4_-_AddressBarSpoof,_b64_html.yaml @@ -0,0 +1,15 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +# Test 1 +- doubleTapOn: + id: "searchEntry" +- pressKey: Backspace +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-open-b64-html.html" +- pressKey: Enter +- tapOn: "Start" +# This test is expected to do nothing: loading base64 encoded HTML content in a new tab is blocked. +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-open-b64-html.html"} diff --git a/.maestro/security_tests/5_-_AddressBarSpoof,_downloadpath.yaml b/.maestro/security_tests/5_-_AddressBarSpoof,_downloadpath.yaml new file mode 100644 index 0000000000..2e23f09a77 --- /dev/null +++ b/.maestro/security_tests/5_-_AddressBarSpoof,_downloadpath.yaml @@ -0,0 +1,39 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +# Test 1 +- doubleTapOn: + id: "searchEntry" +- pressKey: Backspace +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-js-download-url.html" +- pressKey: Enter +- tapOn: "Start" +# Download Acceptance Flow: +- extendedWaitUntil: + visible: "Save to Downloads" + timeout: 10000 +- tapOn: "Save to Downloads" +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "about:blank"} # Downloads should occur in empty origin. +# Restart +- tapOn: + id: "searchEntry" +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-js-download-url.html" +- pressKey: Enter +# Download Cancel Flow: +- tapOn: "Start" +- extendedWaitUntil: + visible: "Cancel" + timeout: 10000 +- tapOn: "Cancel" +# Should be on about:blank +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "about:blank"} +# Return to last test page +- tapOn: + id: "searchEntry" +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-js-download-url.html" +- pressKey: Enter diff --git a/.maestro/security_tests/6_-_AddressBarSpoof,_formaction.yaml b/.maestro/security_tests/6_-_AddressBarSpoof,_formaction.yaml new file mode 100644 index 0000000000..d12b1cb173 --- /dev/null +++ b/.maestro/security_tests/6_-_AddressBarSpoof,_formaction.yaml @@ -0,0 +1,16 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +# Test 1 +- doubleTapOn: + id: "searchEntry" +- pressKey: Backspace +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-form-action.html" +- pressKey: Enter +- tapOn: "run" +# Should navigate to duckduckgo.com without any spoofed HTML document content. +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "https://duckduckgo.com/"} +- assertNotVisible: "Not DDG." \ No newline at end of file diff --git a/.maestro/security_tests/7_-_AddressBarSpoof,_pagerewrite.yaml b/.maestro/security_tests/7_-_AddressBarSpoof,_pagerewrite.yaml new file mode 100644 index 0000000000..fe01f061c3 --- /dev/null +++ b/.maestro/security_tests/7_-_AddressBarSpoof,_pagerewrite.yaml @@ -0,0 +1,16 @@ +appId: com.duckduckgo.mobile.ios +tags: + - securityTest +--- +# Test 1 +- doubleTapOn: + id: "searchEntry" +- pressKey: Backspace +- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-js-page-rewrite.html" +- pressKey: Enter +- tapOn: "Start" +# Now check the address bar hasn't been updated too early resulting in spoofed content +- copyTextFrom: + id: "searchEntry" +- assertTrue: ${maestro.copiedText == "https://privacy-test-pages.site/security/address-bar-spoofing/spoof-js-page-rewrite.html"} +- assertNotVisible: "DDG." \ No newline at end of file diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 22e662952d..e63a5d9c21 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -1062,6 +1062,8 @@ extension TabViewController: WKNavigationDelegate { } cancelHandler: { decisionHandler(.cancel) } + // Rewrite the current URL to prevent spoofing from download URLs + self.chromeDelegate?.omniBar.textField.text = "about:blank" } } else { Pixel.fire(pixel: .unhandledDownload) From 000aa58a3383b3e9333f8c33600590236ca15449 Mon Sep 17 00:00:00 2001 From: Christopher Brind Date: Tue, 5 Dec 2023 13:45:25 +0000 Subject: [PATCH 04/19] remove address bar position pixels (#2220) --- Core/PixelEvent.swift | 6 ------ DuckDuckGo/AddressBarPositionSettingsViewController.swift | 8 -------- 2 files changed, 14 deletions(-) diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index 0365fca0f8..955b921b00 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -262,9 +262,6 @@ extension Pixel { case autofillJSPixelFired(_ pixel: AutofillUserScript.JSPixel) - case navigationbarPositionBottom - case navigationBarPositionTop - case secureVaultInitError case secureVaultError @@ -625,9 +622,6 @@ extension Pixel.Event { case .autocompleteSelectedLocal: return "m_au_l" case .autocompleteSelectedRemote: return "m_au_r" - case .navigationbarPositionBottom: return "m_seturlbar_bottom" - case .navigationBarPositionTop: return "m_seturlbar_top" - case .feedbackPositive: return "mfbs_positive_submit" case .feedbackNegativePrefix(category: let category): return "mfbs_negative_\(category)" diff --git a/DuckDuckGo/AddressBarPositionSettingsViewController.swift b/DuckDuckGo/AddressBarPositionSettingsViewController.swift index 34d8a466f4..cac8a95eef 100644 --- a/DuckDuckGo/AddressBarPositionSettingsViewController.swift +++ b/DuckDuckGo/AddressBarPositionSettingsViewController.swift @@ -53,14 +53,6 @@ class AddressBarPositionSettingsViewController: UITableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { appSettings.currentAddressBarPosition = AddressBarPosition.allCases[indexPath.row] - - switch appSettings.currentAddressBarPosition { - case .top: - Pixel.fire(pixel: .navigationBarPositionTop) - case .bottom: - Pixel.fire(pixel: .navigationbarPositionBottom) - } - tableView.performBatchUpdates { tableView.reloadSections(IndexSet(integer: 0), with: .automatic) tableView.deselectRow(at: indexPath, animated: true) From fe7db6c251a9a819920ea9e5105ac7133f5fe53e Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Tue, 5 Dec 2023 16:37:39 +0100 Subject: [PATCH 05/19] Improve handling lists in Sync (#2192) Task/Issue URL: https://app.asana.com/0/0/1205884549503153/f Description: Improve handling of lists in syncable models' payloads (which currently is limited to bookmarks folders and favorites folders children). This change updates how lists are sent to Sync in PATCH payloads by including current state as well as the set of removed and inserted items. To allow for this, last sync payload is kept for all bookmarks folders in lastChildrenPayloadReceivedFromSync property added on BookmarkEntity entity. If the payload is not available (e.g. first sync), the legacy mechanism is used (i.e. sending only the current contents of the list). The schema of a Sync response payload does not change so the implementation handles it too. --- Core/SyncBookmarksAdapter.swift | 12 +++++------- Core/UserDefaultsPropertyWrapper.swift | 1 + DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 6 +++--- DuckDuckGo/AppDelegate.swift | 8 -------- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/Core/SyncBookmarksAdapter.swift b/Core/SyncBookmarksAdapter.swift index 8986aab98a..6063cb766c 100644 --- a/Core/SyncBookmarksAdapter.swift +++ b/Core/SyncBookmarksAdapter.swift @@ -65,12 +65,6 @@ public final class SyncBookmarksAdapter { public let databaseCleaner: BookmarkDatabaseCleaner public let syncDidCompletePublisher: AnyPublisher - public var shouldResetBookmarksSyncTimestamp: Bool = false { - willSet { - assert(provider == nil, "Setting this value has no effect after provider has been instantiated") - } - } - @UserDefaultsWrapper(key: .syncBookmarksPaused, defaultValue: false) static public var isSyncBookmarksPaused: Bool { didSet { @@ -81,6 +75,9 @@ public final class SyncBookmarksAdapter { @UserDefaultsWrapper(key: .syncBookmarksPausedErrorDisplayed, defaultValue: false) static private var didShowBookmarksSyncPausedError: Bool + @UserDefaultsWrapper(key: .syncDidMigrateToImprovedListsHandling, defaultValue: false) + private var didMigrateToImprovedListsHandling: Bool + @Published public var isFaviconsFetchingEnabled: Bool = UserDefaultsWrapper(key: .syncAutomaticallyFetchFavicons, defaultValue: false).wrappedValue { didSet { @@ -149,7 +146,8 @@ public final class SyncBookmarksAdapter { } } ) - if shouldResetBookmarksSyncTimestamp { + if !didMigrateToImprovedListsHandling { + didMigrateToImprovedListsHandling = true provider.lastSyncTimestamp = nil } diff --git a/Core/UserDefaultsPropertyWrapper.swift b/Core/UserDefaultsPropertyWrapper.swift index 475dcb2408..e5316c4e73 100644 --- a/Core/UserDefaultsPropertyWrapper.swift +++ b/Core/UserDefaultsPropertyWrapper.swift @@ -105,6 +105,7 @@ public struct UserDefaultsWrapper { case syncIsFaviconsFetcherEnabled = "com.duckduckgo.ios.sync-is-favicons-fetcher-enabled" case syncIsEligibleForFaviconsFetcherOnboarding = "com.duckduckgo.ios.sync-is-eligible-for-favicons-fetcher-onboarding" case syncDidPresentFaviconsFetcherOnboarding = "com.duckduckgo.ios.sync-did-present-favicons-fetcher-onboarding" + case syncDidMigrateToImprovedListsHandling = "com.duckduckgo.ios.sync-did-migrate-to-improved-lists-handling" case networkProtectionDebugOptionAlwaysOnDisabled = "com.duckduckgo.network-protection.always-on.disabled" case networkProtectionWaitlistTermsAndConditionsAccepted = "com.duckduckgo.ios.vpn.terms-and-conditions-accepted" diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index e82c09e6e9..03105d6edb 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9217,7 +9217,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 88.0.0; + version = 89.0.0; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 7eea215cbe..db0975e18b 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "7b35b4c604f1cf17b48aabf72526b15a2fdcc6ce", - "version": "88.0.0" + "revision": "9a7c2f13f7769221809021371730bde3ab16e575", + "version": "89.0.0" } }, { @@ -156,7 +156,7 @@ }, { "package": "TrackerRadarKit", - "repositoryURL": "https://github.com/duckduckgo/TrackerRadarKit", + "repositoryURL": "https://github.com/duckduckgo/TrackerRadarKit.git", "state": { "branch": null, "revision": "4684440d03304e7638a2c8086895367e90987463", diff --git a/DuckDuckGo/AppDelegate.swift b/DuckDuckGo/AppDelegate.swift index 92b00ee2e1..627e2b753b 100644 --- a/DuckDuckGo/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate.swift @@ -166,8 +166,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { DatabaseMigration.migrate(to: context) } - var shouldResetBookmarksSyncTimestamp = false - let preMigrationErrorHandling = EventMapping { _, error, _, _ in if let error = error { Pixel.fire(pixel: .bookmarksCouldNotLoadDatabase, @@ -220,11 +218,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { in: context) if context.hasChanges { try context.save(onErrorFire: .bookmarksMigrationCouldNotPrepareMultipleFavoriteFolders) - if let syncDataProviders = self?.syncDataProviders { - syncDataProviders.bookmarksAdapter.shouldResetBookmarksSyncTimestamp = true - } else { - shouldResetBookmarksSyncTimestamp = true - } } } catch { Thread.sleep(forTimeInterval: 1) @@ -288,7 +281,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { settingHandlers: [FavoritesDisplayModeSyncHandler()], favoritesDisplayModeStorage: FavoritesDisplayModeStorage() ) - syncDataProviders.bookmarksAdapter.shouldResetBookmarksSyncTimestamp = shouldResetBookmarksSyncTimestamp let syncService = DDGSync(dataProvidersSource: syncDataProviders, errorEvents: SyncErrorHandler(), log: .syncLog, environment: environment) syncService.initializeIfNeeded() From 630a07f2160be2f9c61a6a9155464d14edf278a9 Mon Sep 17 00:00:00 2001 From: Graeme Arthur Date: Tue, 5 Dec 2023 20:31:34 +0100 Subject: [PATCH 06/19] Final NetP ship review feedback (#2221) --- .../Card-24.imageset/Card-24.pdf | Bin 0 -> 3152 bytes .../Card-24.imageset/Contents.json | 12 ++++++ .../16px}/Card-16.imageset/Card-16.pdf | Bin .../16px}/Card-16.imageset/Contents.json | 0 .../16px}/Rocket-16.imageset/Contents.json | 0 .../16px}/Rocket-16.imageset/Rocket-16.pdf | Bin .../16px}/Shield-16.imageset/Contents.json | 0 .../16px}/Shield-16.imageset/Shield-16.pdf | Bin .../24px/Rocket-24.imageset/Contents.json | 12 ++++++ .../24px/Rocket-24.imageset/Rocket-24.pdf | Bin 0 -> 3588 bytes DuckDuckGo/NetworkProtectionInviteView.swift | 4 +- DuckDuckGo/NetworkProtectionStatusView.swift | 2 +- .../NetworkProtectionVPNSettingsView.swift | 2 +- DuckDuckGo/UserText.swift | 8 ++-- ...listTermsAndConditionsViewController.swift | 2 +- DuckDuckGo/VPNWaitlistView.swift | 40 +++++++++--------- DuckDuckGo/VPNWaitlistViewController.swift | 2 +- DuckDuckGo/en.lproj/Localizable.strings | 12 ++---- 18 files changed, 57 insertions(+), 39 deletions(-) create mode 100644 DuckDuckGo/Assets.xcassets/Card-24.imageset/Card-24.pdf create mode 100644 DuckDuckGo/Assets.xcassets/Card-24.imageset/Contents.json rename DuckDuckGo/Assets.xcassets/{Waitlist/VPN Waitlist => DesignSystemIcons/16px}/Card-16.imageset/Card-16.pdf (100%) rename DuckDuckGo/Assets.xcassets/{Waitlist/VPN Waitlist => DesignSystemIcons/16px}/Card-16.imageset/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/{Waitlist/VPN Waitlist => DesignSystemIcons/16px}/Rocket-16.imageset/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/{Waitlist/VPN Waitlist => DesignSystemIcons/16px}/Rocket-16.imageset/Rocket-16.pdf (100%) rename DuckDuckGo/Assets.xcassets/{Waitlist/VPN Waitlist => DesignSystemIcons/16px}/Shield-16.imageset/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/{Waitlist/VPN Waitlist => DesignSystemIcons/16px}/Shield-16.imageset/Shield-16.pdf (100%) create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Rocket-24.imageset/Contents.json create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Rocket-24.imageset/Rocket-24.pdf diff --git a/DuckDuckGo/Assets.xcassets/Card-24.imageset/Card-24.pdf b/DuckDuckGo/Assets.xcassets/Card-24.imageset/Card-24.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3f51391f32b45b8f0cd752aa26a6350ba70a1d90 GIT binary patch literal 3152 zcmb7`NpBlR5QXpaEBa!<4xnc53t$L{h$KXllf1Ww&T6TR>dfioVtRY{oAug+WSmv2O*h#+d^xPPUDCla5>?SY z#84V!YPQJ(<&s@ZqpK@{c-Cs?qw)1D%eu2p8;m3Fo&%T~k^-|OT1(YVdmoIA3hx|} zb6{3ei}7$GF}-)D7C9f4`B;@TIz;CZc_t#N4lVjjOB$3#%48}~j1bwPC7Wt0%@y6D zJaJ9@Oi@{vl#^@KCFr&l5iusYK&V*pn~11TX7Hn3q#IHtk1go>5~3Y3QmD{}NEHpmJS9@h$Ev8fDB=$$v%*}%B}2O1`>Oee}CT1CUIG3+A_ zG8cd~N63+b`5^jaESOhDO)$o=a56DVOn!rsLnwo9$t9gy7DH?~GMW)PS{GabB0!SC zn?x)tqZW7t3_6A2>A?Cixv!am58rj$?$@>$-Tz;VGK>Ma=5JVxmQ%{3EZZxj$OLcL z!zZw^SaLC$Ey(-d-l+0AG~ZY*L{ zLetnxgra4m<*6;L<0H1BppoC%a80v9$b10Kyjddc5ok;@LsJ`2@`;Lb*_<#DK|=Iu zOb~b(E1C2$A;g-5G=Xg>+R+%GlkbUv3^XQ~p{b5GWe@l}+Z%E<8}D7GOPburhU=jV z)=zgg6nl1S{C>OL9S`dL@59}2@!P+D^=k2UdE1Y`&;8Ba^2P46dOyo~(ly!~nPnlg z`%hA*NZ0*g_i4ZC4@&N-*JHS=-S*gT$tYLI6Zm$y2UBr`&Muk)%~#wX?`|kn$qBBf zJXgC<_}T~cA3)9`F;QocXiKc0V01;B|DlUw3ng%5{*e)vkdY;*1J8lz1 z>x<<0Jv-m;%&ebWynJ;cwhV(9XI8)cJ{a@-xtX1R+`fLZoo~nKoA3V?bK`7{j*mG# z<>Z6U>^yw&N%@kKr>AOZTwbYbga5?GAI9bN_Pq&!mwIZmU61p-VfJ$T>t-=tzJ6iO z-W-2hY=%FF*}0hO%^+5zAP%>GI5|8$d?(qu(p-#YaW@>!J$%?KmV<{fpu*L9xcsDGEpL^o{*C*atFVaH!lDtRjLJCrh zR9mYrrE1=tjZRV~U&R*hQ_Y5lC=#n72|0x7ib=M*B$fOVIj3tiiy_&_J5{J9jV&e4 zNlL+o3Cg~TiM9qOsMS+hQfP<78mfzh{X-@O(8GNQ~w3@ z3N=;NsnA??Ey7U*9X=6FgN6ml+ae)(eB*p+v3NwiZFmHqip@Een9Z$XE>+Bex$cr; zCA12g3*q3K;9SjQB%5q=Of6&+tam;I2NGPYP4#D+8u9CK{#WE~!CLSM?s=O^B<(1T zn$rprsfVcP+FVHyBtugoUkt^z>{C&>9J6Zsp$9^Y7&V@>5ov;D^hFe%GK!IVl8zo|Bt!sx zKr^ESQZ>RMPm^@vp<|S$K{P!_(p6)_^CC1*_dF1Wb{c4m$~i33KPi#qW=n&zysb!+ zE8+(8l%SUi)}#`ckDxgfr)`(f9+WO%G-c7aGMRL7vJ#03FR)FklHW-u#dMnANEvD) z14xTdFtY#1jL;cH1!AR*u!*M7^TzDJek(;a(Aw<1M81+zDhW??FOw+}C6>gI8-wc^ zNRvsSYZK1G{*bG7jn1L~=3q;~9nzwW8azCYHj@h-bVIZ);f!`C?1{1TE~D$=q3RGs zqN>f1(RJ$QP#Ke$Z{7>$@ra4Q$X7?CTSbkII}V^(sm!@ZWHfxCU#GW;a`05F&nfX1 z=|?hiOUCG|24e}HNkpw7&>d5c;Joi()nOd8%c|}@Jy#R1JD^kpM$|TPtt8#X46@7^Dbs>=(4BH1g*%zpbZf%IhDqk9i&N3O({9GGh>JZ& zr(-EsJ?CJQPtz>=+=$wK_swCQg|A;{Tx8WZM!?-5fnq5KIAI?d5_ zLX5)wpsz1o2O4+KP1#2k5z_1`O-5^Dwjj-<>z|J9N_VShWznlV4D_OuS5)^DBE(oE=zXEEJsHM8Ol8g4Bb2zmVd*7# zcLUyEm-S{mUFkiB4!3A76h}AxZv0GCI9}b%U#vcw zxBCrzSjBF?3&?NZ3jL0}*K|2(J4a zU!nV-CEwp%;i}OHF3sM~+3Ewb^1%NM$dM*)3rCtXz|FxRKV)`+pUt=P+tu}_q951e zyTO?: View where Content: .padding(.bottom, 16) interactiveContent() Spacer() - Text(UserText.netPInviteOnlyMessage) + Text(UserText.networkProtectionWaitlistAvailabilityDisclaimer) .foregroundColor(.init(designSystemColor: .textSecondary)) .daxFootnoteRegular() .multilineTextAlignment(.center) @@ -130,7 +130,7 @@ private struct NetworkProtectionInviteMessageData { let imageIdentifier: String let title: String let message: String - let footer = UserText.netPInviteOnlyMessage + let footer = UserText.networkProtectionWaitlistAvailabilityDisclaimer } extension AnyTransition { diff --git a/DuckDuckGo/NetworkProtectionStatusView.swift b/DuckDuckGo/NetworkProtectionStatusView.swift index ab0698aa52..fe6289cd1e 100644 --- a/DuckDuckGo/NetworkProtectionStatusView.swift +++ b/DuckDuckGo/NetworkProtectionStatusView.swift @@ -154,7 +154,7 @@ struct NetworkProtectionStatusView: View { @ViewBuilder private func inviteOnlyFooter() -> some View { // Needs to be inlined like this for the markdown parsing to work - Text("\(UserText.netPInviteOnlyMessage) [\(UserText.netPStatusViewShareFeedback)](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)") + Text("\(UserText.networkProtectionWaitlistAvailabilityDisclaimer) [\(UserText.netPStatusViewShareFeedback)](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)") .foregroundColor(.init(designSystemColor: .textSecondary)) .accentColor(.init(designSystemColor: .accent)) .daxFootnoteRegular() diff --git a/DuckDuckGo/NetworkProtectionVPNSettingsView.swift b/DuckDuckGo/NetworkProtectionVPNSettingsView.swift index ee080da61b..439f75b93a 100644 --- a/DuckDuckGo/NetworkProtectionVPNSettingsView.swift +++ b/DuckDuckGo/NetworkProtectionVPNSettingsView.swift @@ -39,7 +39,7 @@ struct NetworkProtectionVPNSettingsView: View { Text(string) } VStack(alignment: .leading) { - Text(UserText.netPPreferredLocationSettingTitle) + Text(UserText.netPVPNLocationTitle) .daxBodyRegular() .foregroundColor(.init(designSystemColor: .textPrimary)) Text(viewModel.preferredLocation.title) diff --git a/DuckDuckGo/UserText.swift b/DuckDuckGo/UserText.swift index e603b23c24..61b31851ec 100644 --- a/DuckDuckGo/UserText.swift +++ b/DuckDuckGo/UserText.swift @@ -627,7 +627,6 @@ In addition to the details entered into this form, your app issue report will co static let netPInviteFieldPrompt = NSLocalizedString("network.protection.invite.field.prompt", value: "Invite Code", comment: "Prompt for the network protection invite code text field") static let netPInviteSuccessTitle = NSLocalizedString("network.protection.invite.success.title", value: "Success! You’re in.", comment: "Title for the network protection invite success view") static let netPInviteSuccessMessage = NSLocalizedString("network.protection.invite.success.message", value: "Hide your location from websites and conceal your online activity from Internet providers and others on your network.", comment: "Message for the network protection invite success view") - static let netPInviteOnlyMessage = NSLocalizedString("network.protection.invite.only.message", value: "DuckDuckGo Network Protection is currently invite-only.", comment: "Message explaining that netP is invite only") static let netPStatusViewTitle = NSLocalizedString("network.protection.status.view.title", value: "Network Protection", comment: "Title label text for the status view when netP is disconnected") static let netPStatusHeaderTitleOff = NSLocalizedString("network.protection.status.header.title.off", value: "Network Protection is Off", comment: "Header title label text for the status view when netP is disconnected") @@ -650,7 +649,7 @@ In addition to the details entered into this form, your app issue report will co return localized.format(arguments: city, country) } static let netPVPNNotificationsTitle = NSLocalizedString("network.protection.vpn.notifications.title", value: "VPN Notifications", comment: "Title for the VPN Notifications management screen.") - static let netPStatusViewShareFeedback = NSLocalizedString("network.protection.status.menu.share.feedback", value: "Share Feedback", comment: "The status view 'Share Feedback' button which is shown inline on the status view after the \(netPInviteOnlyMessage) text") + static let netPStatusViewShareFeedback = NSLocalizedString("network.protection.status.menu.share.feedback", value: "Share Feedback", comment: "The status view 'Share Feedback' button which is shown inline on the status view after the temporary free use footer text") static let netPStatusViewErrorConnectionFailedTitle = NSLocalizedString("network.protection.status.view.error.connection.failed.title", value: "Failed to Connect.", comment: "Generic connection failed error title shown in NetworkProtection's status view.") static let netPStatusViewErrorConnectionFailedMessage = NSLocalizedString("network.protection.status.view.error.connection.failed.message", value: "Please try again later.", comment: "Generic connection failed error message shown in NetworkProtection's status view.") static let netPPreferredLocationSettingTitle = NSLocalizedString("network.protection.vpn.preferred.location.title", value: "Preferred Location", comment: "Title for the Preferred Location VPN Settings item.") @@ -665,9 +664,9 @@ In addition to the details entered into this form, your app issue report will co return message.format(arguments: count) } static let netPExcludeLocalNetworksSettingTitle = NSLocalizedString("network.protection.vpn.exclude.local.networks.setting.title", value: "Exclude Local Networks", comment: "Title for the Exclude Local Networks setting item.") - static let netPExcludeLocalNetworksSettingFooter = NSLocalizedString("network.protection.vpn.exclude.local.networks.setting.footer", value: "Bypass the VPN for local network connections, like to a printer.", comment: "Footer text for the Exclude Local Networks setting item.") + static let netPExcludeLocalNetworksSettingFooter = NSLocalizedString("network.protection.vpn.exclude.local.networks.setting.footer", value: "Let local traffic bypass the VPN and connect to devices on your local network, like a printer.", comment: "Footer text for the Exclude Local Networks setting item.") static let netPSecureDNSSettingFooter = NSLocalizedString("network.protection.vpn.secure.dns.setting.footer", value: "Our VPN uses Secure DNS to keep your online activity private, so that your Internet provider can't see what websites you visit.", comment: "Footer text for the Always on VPN setting item.") - static let netPTurnOnNotificationsButtonTitle = NSLocalizedString("network.protection.turn.on.notifications.button.title", value: "Turn on Notifications", comment: "Title for the button to link to the iOS app settings and enable notifications app-wide.") + static let netPTurnOnNotificationsButtonTitle = NSLocalizedString("network.protection.turn.on.notifications.button.title", value: "Turn On Notifications", comment: "Title for the button to link to the iOS app settings and enable notifications app-wide.") static let netPTurnOnNotificationsSectionFooter = NSLocalizedString("network.protection.turn.on.notifications.section.footer", value: "Allow DuckDuckGo to notify you if your connection drops or VPN status changes.", comment: "Footer text under the button to link to the iOS app settings and enable notifications app-wide.") static let netPVPNAlertsToggleTitle = NSLocalizedString("network.protection.vpn.alerts.toggle.title", value: "VPN Alerts", comment: "Title for the toggle for VPN alerts.") static let netPVPNAlertsToggleSectionFooter = NSLocalizedString("network.protection.vpn.alerts.toggle.section.footer", value: "Get notified if your connection drops or VPN status changes.", comment: "List section footer for the toggle for VPN alerts.") @@ -894,7 +893,6 @@ But if you *do* want a peek under the hood, you can find more information about // MARK: - VPN Waitlist - static let networkProtectionWaitlistJoinTitle = NSLocalizedString("network-protection.waitlist.join.title", value: "Network Protection Early Access", comment: "Title for Network Protection join waitlist screen") static let networkProtectionWaitlistJoinSubtitle1 = NSLocalizedString("network-protection.waitlist.join.subtitle.1", value: "Secure your connection anytime, anywhere with Network Protection, the VPN from DuckDuckGo.", comment: "First subtitle for Network Protection join waitlist screen") static let networkProtectionWaitlistJoinSubtitle2 = NSLocalizedString("network-protection.waitlist.join.subtitle.2", value: "Join the waitlist, and we’ll notify you when it’s your turn.", comment: "Second subtitle for Network Protection join waitlist screen") diff --git a/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift b/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift index 2dc044aa24..bbdd441eb3 100644 --- a/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift +++ b/DuckDuckGo/VPNWaitlistTermsAndConditionsViewController.swift @@ -38,7 +38,7 @@ final class VPNWaitlistTermsAndConditionsViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - title = UserText.networkProtectionWaitlistJoinTitle + title = UserText.netPNavTitle addHostingControllerToViewHierarchy() DailyPixel.fire(pixel: .networkProtectionWaitlistTermsDisplayed) diff --git a/DuckDuckGo/VPNWaitlistView.swift b/DuckDuckGo/VPNWaitlistView.swift index 3e5bb91b92..d88e9e5557 100644 --- a/DuckDuckGo/VPNWaitlistView.swift +++ b/DuckDuckGo/VPNWaitlistView.swift @@ -64,7 +64,7 @@ struct VPNWaitlistSignUpView: View { GeometryReader { proxy in ScrollView { VStack(alignment: .center, spacing: 8) { - HeaderView(imageName: "JoinVPNWaitlist", title: UserText.networkProtectionWaitlistJoinTitle) + HeaderView(imageName: "JoinVPNWaitlist", title: UserText.netPNavTitle) Text(UserText.networkProtectionWaitlistJoinSubtitle1) .daxBodyRegular() @@ -87,7 +87,7 @@ struct VPNWaitlistSignUpView: View { action(.custom(.openNetworkProtectionInviteCodeScreen)) }) .buttonStyle(RoundedButtonStyle(enabled: true, style: .bordered)) - .padding(.top, 18) + .padding(.top, 16) if requestInFlight { HStack { @@ -99,13 +99,11 @@ struct VPNWaitlistSignUpView: View { } .padding(.top, 14) } - + Spacer() Text(UserText.networkProtectionWaitlistAvailabilityDisclaimer) .font(.footnote) .foregroundStyle(Color.secondary) .padding(.top, 24) - - Spacer() } .padding([.leading, .trailing], 24) .frame(minHeight: proxy.size.height) @@ -181,17 +179,22 @@ private struct AllowNotificationsView: View { .fixMultilineScrollableText() .lineSpacing(5) - Button(UserText.waitlistAllowNotifications) { + + Button { action(.openNotificationSettings) + } label: { + HStack { + Image("Bell-16") + Text(UserText.waitlistAllowNotifications) + .daxButton() + } } .buttonStyle(RoundedButtonStyle(enabled: true)) - } - .padding(24) + .padding(20) .background(Color.waitlistNotificationBackground) .cornerRadius(8) .shadow(color: .black.opacity(0.05), radius: 12, x: 0, y: 4) - } } @@ -208,17 +211,17 @@ struct VPNWaitlistInvitedView: View { let benefitsList: [VPNWaitlistBenefit] = [ .init( - imageName: "Shield-16", + imageName: "Shield-24", title: UserText.networkProtectionWaitlistInvitedSection1Title, subtitle: UserText.networkProtectionWaitlistInvitedSection1Subtitle ), .init( - imageName: "Rocket-16", + imageName: "Rocket-24", title: UserText.networkProtectionWaitlistInvitedSection2Title, subtitle: UserText.networkProtectionWaitlistInvitedSection2Subtitle ), .init( - imageName: "Card-16", + imageName: "Card-24", title: UserText.networkProtectionWaitlistInvitedSection3Title, subtitle: UserText.networkProtectionWaitlistInvitedSection3Subtitle ), @@ -232,7 +235,10 @@ struct VPNWaitlistInvitedView: View { GeometryReader { proxy in ScrollView { VStack(alignment: .center, spacing: 0) { - HeaderView(imageName: "InvitedVPNWaitlist", title: UserText.networkProtectionWaitlistInvitedTitle) + HeaderView( + imageName: "InvitedVPNWaitlist", + title: UserText.networkProtectionWaitlistInvitedTitle + ) Text(UserText.networkProtectionWaitlistInvitedSubtitle) .daxBodyRegular() @@ -249,14 +255,11 @@ struct VPNWaitlistInvitedView: View { Button(UserText.networkProtectionWaitlistGetStarted, action: { action(.custom(.openNetworkProtectionPrivacyPolicyScreen)) }) .buttonStyle(RoundedButtonStyle(enabled: true)) .padding(.top, 32) - + Spacer() Text(UserText.networkProtectionWaitlistAvailabilityDisclaimer) .font(.footnote) - .foregroundStyle(Color.secondary) + .foregroundStyle(Color(designSystemColor: .textSecondary)) .padding(.top, 24) - - Spacer() - } .frame(maxWidth: .infinity, minHeight: proxy.size.height) .padding([.leading, .trailing], 18) @@ -344,7 +347,6 @@ private struct WaitlistListEntryView: View { var body: some View { HStack(alignment: .center, spacing: 16) { Image(viewData.imageName) - .frame(maxWidth: 16, maxHeight: 16) VStack(alignment: .leading, spacing: 2) { Text(viewData.title) diff --git a/DuckDuckGo/VPNWaitlistViewController.swift b/DuckDuckGo/VPNWaitlistViewController.swift index c25153108b..f982f1bac4 100644 --- a/DuckDuckGo/VPNWaitlistViewController.swift +++ b/DuckDuckGo/VPNWaitlistViewController.swift @@ -42,7 +42,7 @@ final class VPNWaitlistViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - title = UserText.networkProtectionWaitlistJoinTitle + title = UserText.netPNavTitle addHostingControllerToViewHierarchy() diff --git a/DuckDuckGo/en.lproj/Localizable.strings b/DuckDuckGo/en.lproj/Localizable.strings index b9cf565057..bf60cfb7fe 100644 --- a/DuckDuckGo/en.lproj/Localizable.strings +++ b/DuckDuckGo/en.lproj/Localizable.strings @@ -1495,9 +1495,6 @@ https://duckduckgo.com/mac"; /* Second subtitle for Network Protection join waitlist screen */ "network-protection.waitlist.join.subtitle.2" = "Join the waitlist, and we’ll notify you when it’s your turn."; -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Network Protection Early Access"; - /* Title for Network Protection joined waitlist screen */ "network-protection.waitlist.joined.title" = "You’re on the list!"; @@ -1540,9 +1537,6 @@ https://duckduckgo.com/mac"; /* Prompt for the network protection invite code text field */ "network.protection.invite.field.prompt" = "Invite Code"; -/* Message explaining that netP is invite only */ -"network.protection.invite.only.message" = "DuckDuckGo Network Protection is currently invite-only."; - /* Message for the network protection invite success view */ "network.protection.invite.success.message" = "Hide your location from websites and conceal your online activity from Internet providers and others on your network."; @@ -1573,7 +1567,7 @@ https://duckduckgo.com/mac"; /* Header title label text for the status view when netP is connected */ "network.protection.status.header.title.on" = "Network Protection is On"; -/* The status view 'Share Feedback' button which is shown inline on the status view after the \(netPInviteOnlyMessage) text */ +/* The status view 'Share Feedback' button which is shown inline on the status view after the temporary free use footer text */ "network.protection.status.menu.share.feedback" = "Share Feedback"; /* Connection details label shown in NetworkProtection's status view. */ @@ -1598,7 +1592,7 @@ https://duckduckgo.com/mac"; "network.protection.status.view.title" = "Network Protection"; /* Title for the button to link to the iOS app settings and enable notifications app-wide. */ -"network.protection.turn.on.notifications.button.title" = "Turn on Notifications"; +"network.protection.turn.on.notifications.button.title" = "Turn On Notifications"; /* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ "network.protection.turn.on.notifications.section.footer" = "Allow DuckDuckGo to notify you if your connection drops or VPN status changes."; @@ -1610,7 +1604,7 @@ https://duckduckgo.com/mac"; "network.protection.vpn.alerts.toggle.title" = "VPN Alerts"; /* Footer text for the Exclude Local Networks setting item. */ -"network.protection.vpn.exclude.local.networks.setting.footer" = "Bypass the VPN for local network connections, like to a printer."; +"network.protection.vpn.exclude.local.networks.setting.footer" = "Let local traffic bypass the VPN and connect to devices on your local network, like a printer."; /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Exclude Local Networks"; From e4ec1a2e00d4665a1adb4e81849d7736d3b6f0b2 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 5 Dec 2023 11:43:34 -0800 Subject: [PATCH 07/19] Update BSK reference to include the disable rekeying flag (#2219) Task/Issue URL: https://app.asana.com/0/1199230911884351/1206100276423377/f Tech Design URL: CC: Description: This PR updates BSK to include a NetP settings change. The change isn't used here in any way. --- DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 03105d6edb..da59109997 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9217,7 +9217,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 89.0.0; + version = 90.0.0; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index db0975e18b..7824ece4bb 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "9a7c2f13f7769221809021371730bde3ab16e575", - "version": "89.0.0" + "revision": "bba78df5b33387502973387fd2a4f4ed0a80fce5", + "version": "90.0.0" } }, { @@ -156,7 +156,7 @@ }, { "package": "TrackerRadarKit", - "repositoryURL": "https://github.com/duckduckgo/TrackerRadarKit.git", + "repositoryURL": "https://github.com/duckduckgo/TrackerRadarKit", "state": { "branch": null, "revision": "4684440d03304e7638a2c8086895367e90987463", From 97ebdd409a9009de5c144c4b4f98c122bb715a24 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Wed, 6 Dec 2023 11:45:20 +0000 Subject: [PATCH 08/19] Breakage report improvements (#2197) Task/Issue URL: https://app.asana.com/0/1205842942115003/1205692741026215/f Tech Design URL: https://app.asana.com/0/1205842942115003/1205917507991804/f **Description**: This PR introduces a new version of BSK (PR: https://github.com/duckduckgo/BrowserServicesKit/pull/578) that allows iOS and macOS to share the same web implementation of the `ReportBrokenSite` page and introduce improvements to Pixels and the broken site report data. Additional changes - The old native `Report broken site` page has been removed - Added 2 new Pixels https://app.asana.com/0/1205842942115003/1205859726054342/f - Removed legacy PrivacyDashboard.storyboard localised strings --- .gitignore | 1 + Core/PixelEvent.swift | 13 +- DuckDuckGo.xcodeproj/project.pbxproj | 94 ++--------- .../xcshareddata/swiftpm/Package.resolved | 8 +- .../xcschemes/DuckDuckGo.xcscheme | 9 +- .../ActionSheetDaxDialogViewController.swift | 2 +- DuckDuckGo/Base.lproj/Feedback.storyboard | 63 ++------ DuckDuckGo/Base.lproj/Settings.storyboard | 12 +- DuckDuckGo/BrokenSiteCategories.swift | 63 -------- DuckDuckGo/MainViewController+Segues.swift | 31 +++- DuckDuckGo/MainViewController.swift | 6 +- .../Base.lproj/PrivacyDashboard.storyboard | 13 +- .../PrivacyDashboard/BrokenSiteInfo.swift | 130 +++++++++++++++ .../PrivacyDashboardViewController.swift | 97 +++++++---- DuckDuckGo/ReportBrokenSiteView.swift | 150 ------------------ .../ReportBrokenSiteViewController.swift | 79 --------- ...cSettingsViewController+SyncDelegate.swift | 4 +- DuckDuckGo/TabDelegate.swift | 1 - DuckDuckGo/TabViewController.swift | 10 +- DuckDuckGo/UserText.swift | 18 --- DuckDuckGo/WebContainerViewController.swift | 2 +- DuckDuckGo/bg.lproj/Feedback.strings | 6 - DuckDuckGo/bg.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/bg.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/bg.lproj/Settings.strings | 13 +- DuckDuckGo/cs.lproj/Feedback.strings | 6 - DuckDuckGo/cs.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/cs.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/cs.lproj/Settings.strings | 13 +- DuckDuckGo/da.lproj/Feedback.strings | 6 - DuckDuckGo/da.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/da.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/da.lproj/Settings.strings | 13 +- DuckDuckGo/de.lproj/Feedback.strings | 6 - DuckDuckGo/de.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/de.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/de.lproj/Settings.strings | 13 +- DuckDuckGo/el.lproj/Feedback.strings | 6 - DuckDuckGo/el.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/el.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/el.lproj/Settings.strings | 13 +- DuckDuckGo/en.lproj/Localizable.strings | 45 ------ DuckDuckGo/es.lproj/Feedback.strings | 6 - DuckDuckGo/es.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/es.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/es.lproj/Settings.strings | 13 +- DuckDuckGo/et.lproj/Feedback.strings | 6 - DuckDuckGo/et.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/et.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/et.lproj/Settings.strings | 13 +- DuckDuckGo/fi.lproj/Feedback.strings | 6 - DuckDuckGo/fi.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/fi.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/fi.lproj/Settings.strings | 13 +- DuckDuckGo/fr.lproj/Feedback.strings | 6 - DuckDuckGo/fr.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/fr.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/fr.lproj/Settings.strings | 13 +- DuckDuckGo/hr.lproj/Feedback.strings | 6 - DuckDuckGo/hr.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/hr.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/hr.lproj/Settings.strings | 13 +- DuckDuckGo/hu.lproj/Feedback.strings | 6 - DuckDuckGo/hu.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/hu.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/hu.lproj/Settings.strings | 13 +- DuckDuckGo/it.lproj/Feedback.strings | 6 - DuckDuckGo/it.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/it.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/it.lproj/Settings.strings | 13 +- DuckDuckGo/lt.lproj/Feedback.strings | 6 - DuckDuckGo/lt.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/lt.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/lt.lproj/Settings.strings | 13 +- DuckDuckGo/lv.lproj/Feedback.strings | 6 - DuckDuckGo/lv.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/lv.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/lv.lproj/Settings.strings | 13 +- DuckDuckGo/nb.lproj/Feedback.strings | 6 - DuckDuckGo/nb.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/nb.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/nb.lproj/Settings.strings | 13 +- DuckDuckGo/nl.lproj/Feedback.strings | 6 - DuckDuckGo/nl.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/nl.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/nl.lproj/Settings.strings | 13 +- DuckDuckGo/pl.lproj/Feedback.strings | 6 - DuckDuckGo/pl.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/pl.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/pl.lproj/Settings.strings | 13 +- DuckDuckGo/pt.lproj/Feedback.strings | 6 - DuckDuckGo/pt.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/pt.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/pt.lproj/Settings.strings | 13 +- DuckDuckGo/ro.lproj/Feedback.strings | 6 - DuckDuckGo/ro.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/ro.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/ro.lproj/Settings.strings | 13 +- DuckDuckGo/ru.lproj/Feedback.strings | 6 - DuckDuckGo/ru.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/ru.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/ru.lproj/Settings.strings | 13 +- DuckDuckGo/sk.lproj/Feedback.strings | 6 - DuckDuckGo/sk.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/sk.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/sk.lproj/Settings.strings | 13 +- DuckDuckGo/sl.lproj/Feedback.strings | 6 - DuckDuckGo/sl.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/sl.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/sl.lproj/Settings.strings | 13 +- DuckDuckGo/sv.lproj/Feedback.strings | 6 - DuckDuckGo/sv.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/sv.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/sv.lproj/Settings.strings | 13 +- DuckDuckGo/tr.lproj/Feedback.strings | 6 - DuckDuckGo/tr.lproj/Localizable.strings | 132 +++++++++------ DuckDuckGo/tr.lproj/PrivacyDashboard.strings | 129 --------------- DuckDuckGo/tr.lproj/Settings.strings | 13 +- .../BrokenSiteReportingTests.swift | 6 +- Widgets/bg.lproj/Localizable.strings | 15 ++ Widgets/cs.lproj/Localizable.strings | 15 ++ Widgets/da.lproj/Localizable.strings | 15 ++ Widgets/de.lproj/Localizable.strings | 15 ++ Widgets/el.lproj/Localizable.strings | 15 ++ Widgets/es.lproj/Localizable.strings | 15 ++ Widgets/et.lproj/Localizable.strings | 15 ++ Widgets/fi.lproj/Localizable.strings | 15 ++ Widgets/fr.lproj/Localizable.strings | 15 ++ Widgets/hr.lproj/Localizable.strings | 15 ++ Widgets/hu.lproj/Localizable.strings | 15 ++ Widgets/it.lproj/Localizable.strings | 15 ++ Widgets/lt.lproj/Localizable.strings | 15 ++ Widgets/lv.lproj/Localizable.strings | 15 ++ Widgets/nb.lproj/Localizable.strings | 15 ++ Widgets/nl.lproj/Localizable.strings | 15 ++ Widgets/pl.lproj/Localizable.strings | 15 ++ Widgets/pt.lproj/Localizable.strings | 15 ++ Widgets/ro.lproj/Localizable.strings | 15 ++ Widgets/ru.lproj/Localizable.strings | 15 ++ Widgets/sk.lproj/Localizable.strings | 15 ++ Widgets/sl.lproj/Localizable.strings | 15 ++ Widgets/sv.lproj/Localizable.strings | 15 ++ Widgets/tr.lproj/Localizable.strings | 15 ++ 143 files changed, 2783 insertions(+), 5154 deletions(-) delete mode 100644 DuckDuckGo/BrokenSiteCategories.swift rename DuckDuckGo/{ => PrivacyDashboard}/Base.lproj/PrivacyDashboard.storyboard (84%) create mode 100644 DuckDuckGo/PrivacyDashboard/BrokenSiteInfo.swift rename DuckDuckGo/{ => PrivacyDashboard}/PrivacyDashboardViewController.swift (62%) delete mode 100644 DuckDuckGo/ReportBrokenSiteView.swift delete mode 100644 DuckDuckGo/ReportBrokenSiteViewController.swift delete mode 100644 DuckDuckGo/bg.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/cs.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/da.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/de.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/el.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/es.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/et.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/fi.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/fr.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/hr.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/hu.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/it.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/lt.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/lv.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/nb.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/nl.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/pl.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/pt.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/ro.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/ru.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/sk.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/sl.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/sv.lproj/PrivacyDashboard.strings delete mode 100644 DuckDuckGo/tr.lproj/PrivacyDashboard.strings diff --git a/.gitignore b/.gitignore index f723942232..07ebc5f934 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,4 @@ fastlane/test_output # DuckDuckGo Configuration/ExternalDeveloper.xcconfig +scripts/assets diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index 955b921b00..621cdbd961 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -37,8 +37,10 @@ extension Pixel { case forgetAllDataCleared case privacyDashboardOpened - case privacyDashboardProtectionDisabled - case privacyDashboardProtectionEnabled + + case dashboardProtectionAllowlistAdd + case dashboardProtectionAllowlistRemove + case privacyDashboardReportBrokenSite case privacyDashboardPixelFromJS(rawPixel: String) @@ -553,9 +555,10 @@ extension Pixel.Event { case .forgetAllDataCleared: return "mf_dc" case .privacyDashboardOpened: return "mp" - - case .privacyDashboardProtectionDisabled: return "mp_wla" - case .privacyDashboardProtectionEnabled: return "mp_wlr" + + case .dashboardProtectionAllowlistAdd: return "mp_wla" + case .dashboardProtectionAllowlistRemove: return "mp_wlr" + case .privacyDashboardReportBrokenSite: return "mp_rb" case .privacyDashboardPixelFromJS(let rawPixel): return rawPixel diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index da59109997..e73d0a25eb 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -306,7 +306,6 @@ 4BBBBA902B031B4200D965DA /* VPNWaitlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBBBA8C2B031B4200D965DA /* VPNWaitlist.swift */; }; 4BBBBA922B03291700D965DA /* VPNWaitlistUserText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBBBA912B03291700D965DA /* VPNWaitlistUserText.swift */; }; 4BC21A2F27238B7500229F0E /* RunLoopExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC21A2C272388BD00229F0E /* RunLoopExtensionTests.swift */; }; - 4BC6DD1C2A60E6AD001EC129 /* ReportBrokenSiteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC6DD1B2A60E6AD001EC129 /* ReportBrokenSiteView.swift */; }; 4BCD14632B05AF2B000B1E4C /* NetworkProtectionAccessController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCD14622B05AF2B000B1E4C /* NetworkProtectionAccessController.swift */; }; 4BCD14672B05B682000B1E4C /* NetworkProtectionTermsAndConditionsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCD14662B05B682000B1E4C /* NetworkProtectionTermsAndConditionsStore.swift */; }; 4BCD14692B05BDD5000B1E4C /* AppDelegate+Waitlists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCD14682B05BDD5000B1E4C /* AppDelegate+Waitlists.swift */; }; @@ -564,8 +563,6 @@ 986B16C425E92DF0007D23E8 /* BrowsingMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986B16C225E92DF0007D23E8 /* BrowsingMenuViewController.swift */; }; 986B45CB299D5EF50089D2D7 /* BookmarksLookupPerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986B45CA299D5EF50089D2D7 /* BookmarksLookupPerformanceTests.swift */; }; 986B45D0299E30A50089D2D7 /* BookmarkEntityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986B45CF299E30A50089D2D7 /* BookmarkEntityTests.swift */; }; - 986C7FA724171C6000A3557D /* BrokenSiteCategories.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986C7FA624171C6000A3557D /* BrokenSiteCategories.swift */; }; - 986C7FA92417ADE700A3557D /* ReportBrokenSiteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986C7FA82417ADE700A3557D /* ReportBrokenSiteViewController.swift */; }; 986DA94A24884B18004A7E39 /* WebViewTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986DA94924884B18004A7E39 /* WebViewTransition.swift */; }; 987130C4294AAB9F00AB05E0 /* FavoriteListViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 987130BE294AAB9E00AB05E0 /* FavoriteListViewModelTests.swift */; }; 987130C5294AAB9F00AB05E0 /* BookmarkEditorViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 987130BF294AAB9E00AB05E0 /* BookmarkEditorViewModelTests.swift */; }; @@ -1342,7 +1339,6 @@ 4BBBBA8C2B031B4200D965DA /* VPNWaitlist.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPNWaitlist.swift; sourceTree = ""; }; 4BBBBA912B03291700D965DA /* VPNWaitlistUserText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNWaitlistUserText.swift; sourceTree = ""; }; 4BC21A2C272388BD00229F0E /* RunLoopExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunLoopExtensionTests.swift; sourceTree = ""; }; - 4BC6DD1B2A60E6AD001EC129 /* ReportBrokenSiteView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReportBrokenSiteView.swift; sourceTree = ""; }; 4BCD14622B05AF2B000B1E4C /* NetworkProtectionAccessController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionAccessController.swift; sourceTree = ""; }; 4BCD14662B05B682000B1E4C /* NetworkProtectionTermsAndConditionsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionTermsAndConditionsStore.swift; sourceTree = ""; }; 4BCD14682B05BDD5000B1E4C /* AppDelegate+Waitlists.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Waitlists.swift"; sourceTree = ""; }; @@ -1582,7 +1578,6 @@ 981685462521EEF000FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Home.strings; sourceTree = ""; }; 981685482521EEF100FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/OmniBar.strings; sourceTree = ""; }; 981685492521EEF100FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Authentication.strings; sourceTree = ""; }; - 9816854A2521EEF100FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9816854C2521EEF200FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Settings.strings; sourceTree = ""; }; 9816854D2521EEF300FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Tab.strings; sourceTree = ""; }; 9816854E2521EEF300FA91A1 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1685,7 +1680,6 @@ 9866DB8E251CA8F400612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Home.strings; sourceTree = ""; }; 9866DB90251CA8F400612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/OmniBar.strings; sourceTree = ""; }; 9866DB91251CA8F400612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Authentication.strings; sourceTree = ""; }; - 9866DB92251CA8F400612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DB94251CA8F500612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Settings.strings; sourceTree = ""; }; 9866DB95251CA8F500612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Tab.strings; sourceTree = ""; }; 9866DB96251CA8F500612E3A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1703,7 +1697,6 @@ 9866DBA5251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Home.strings; sourceTree = ""; }; 9866DBA7251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/OmniBar.strings; sourceTree = ""; }; 9866DBA8251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Authentication.strings; sourceTree = ""; }; - 9866DBA9251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DBAB251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Settings.strings; sourceTree = ""; }; 9866DBAC251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Tab.strings; sourceTree = ""; }; 9866DBAD251CA91800612E3A /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1721,7 +1714,6 @@ 9866DBBC251CA92A00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Home.strings; sourceTree = ""; }; 9866DBBE251CA92B00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/OmniBar.strings; sourceTree = ""; }; 9866DBBF251CA92B00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Authentication.strings; sourceTree = ""; }; - 9866DBC0251CA92B00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DBC2251CA92B00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Settings.strings; sourceTree = ""; }; 9866DBC3251CA92C00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Tab.strings; sourceTree = ""; }; 9866DBC4251CA92C00612E3A /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1739,7 +1731,6 @@ 9866DBD3251CA93900612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Home.strings; sourceTree = ""; }; 9866DBD5251CA93900612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/OmniBar.strings; sourceTree = ""; }; 9866DBD6251CA93900612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Authentication.strings; sourceTree = ""; }; - 9866DBD7251CA93900612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DBD9251CA93A00612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Settings.strings; sourceTree = ""; }; 9866DBDA251CA93A00612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Tab.strings; sourceTree = ""; }; 9866DBDB251CA93A00612E3A /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1757,7 +1748,6 @@ 9866DBEA251CA94F00612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Home.strings; sourceTree = ""; }; 9866DBEC251CA94F00612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/OmniBar.strings; sourceTree = ""; }; 9866DBED251CA94F00612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Authentication.strings; sourceTree = ""; }; - 9866DBEE251CA94F00612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DBF0251CA95000612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Settings.strings; sourceTree = ""; }; 9866DBF1251CA95000612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Tab.strings; sourceTree = ""; }; 9866DBF2251CA95000612E3A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1775,7 +1765,6 @@ 9866DC01251CA96200612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Home.strings; sourceTree = ""; }; 9866DC03251CA96300612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC04251CA96300612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC05251CA96300612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC07251CA96300612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Settings.strings; sourceTree = ""; }; 9866DC08251CA96300612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Tab.strings; sourceTree = ""; }; 9866DC09251CA96300612E3A /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1793,7 +1782,6 @@ 9866DC18251CA99B00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Home.strings; sourceTree = ""; }; 9866DC1A251CA99B00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC1B251CA99B00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC1C251CA99C00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC1E251CA99C00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Settings.strings; sourceTree = ""; }; 9866DC1F251CA99C00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Tab.strings; sourceTree = ""; }; 9866DC20251CA99C00612E3A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1811,7 +1799,6 @@ 9866DC2F251CA9B000612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Home.strings; sourceTree = ""; }; 9866DC31251CA9B000612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC32251CA9B000612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC33251CA9B000612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC35251CA9B100612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Settings.strings; sourceTree = ""; }; 9866DC36251CA9B100612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Tab.strings; sourceTree = ""; }; 9866DC37251CA9B100612E3A /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1829,7 +1816,6 @@ 9866DC46251CA9C000612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Home.strings; sourceTree = ""; }; 9866DC48251CA9C000612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC49251CA9C000612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC4A251CA9C000612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC4C251CA9C100612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Settings.strings; sourceTree = ""; }; 9866DC4D251CA9C100612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Tab.strings; sourceTree = ""; }; 9866DC4E251CA9C100612E3A /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1847,7 +1833,6 @@ 9866DC5D251CA9CE00612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Home.strings; sourceTree = ""; }; 9866DC5F251CA9CF00612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC60251CA9CF00612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC61251CA9CF00612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC63251CA9CF00612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Settings.strings; sourceTree = ""; }; 9866DC64251CA9CF00612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Tab.strings; sourceTree = ""; }; 9866DC65251CA9D000612E3A /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1865,7 +1850,6 @@ 9866DC74251CA9E300612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/Home.strings; sourceTree = ""; }; 9866DC76251CA9E300612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC77251CA9E300612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC78251CA9E300612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC7A251CA9E400612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/Settings.strings; sourceTree = ""; }; 9866DC7B251CA9E400612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/Tab.strings; sourceTree = ""; }; 9866DC7C251CA9E400612E3A /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1883,7 +1867,6 @@ 9866DC8B251CA9F500612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Home.strings; sourceTree = ""; }; 9866DC8D251CA9F500612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/OmniBar.strings; sourceTree = ""; }; 9866DC8E251CA9F500612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Authentication.strings; sourceTree = ""; }; - 9866DC8F251CA9F500612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DC91251CA9F600612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Settings.strings; sourceTree = ""; }; 9866DC92251CA9F600612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Tab.strings; sourceTree = ""; }; 9866DC93251CA9F600612E3A /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1901,7 +1884,6 @@ 9866DCA2251CAA0500612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Home.strings; sourceTree = ""; }; 9866DCA4251CAA0500612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/OmniBar.strings; sourceTree = ""; }; 9866DCA5251CAA0500612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Authentication.strings; sourceTree = ""; }; - 9866DCA6251CAA0600612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DCA8251CAA0600612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Settings.strings; sourceTree = ""; }; 9866DCA9251CAA0600612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Tab.strings; sourceTree = ""; }; 9866DCAA251CAA0600612E3A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1919,7 +1901,6 @@ 9866DCB9251CAA2600612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Home.strings; sourceTree = ""; }; 9866DCBB251CAA2600612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/OmniBar.strings; sourceTree = ""; }; 9866DCBC251CAA2700612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Authentication.strings; sourceTree = ""; }; - 9866DCBD251CAA2700612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DCBF251CAA2700612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Settings.strings; sourceTree = ""; }; 9866DCC0251CAA2700612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Tab.strings; sourceTree = ""; }; 9866DCC1251CAA2700612E3A /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1937,7 +1918,6 @@ 9866DCD0251CAA3400612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Home.strings; sourceTree = ""; }; 9866DCD2251CAA3400612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/OmniBar.strings; sourceTree = ""; }; 9866DCD3251CAA3400612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Authentication.strings; sourceTree = ""; }; - 9866DCD4251CAA3400612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DCD6251CAA3500612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Settings.strings; sourceTree = ""; }; 9866DCD7251CAA3500612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Tab.strings; sourceTree = ""; }; 9866DCD8251CAA3500612E3A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -1955,7 +1935,6 @@ 9866DCE7251CAA4800612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Home.strings; sourceTree = ""; }; 9866DCE9251CAA4900612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/OmniBar.strings; sourceTree = ""; }; 9866DCEA251CAA4900612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Authentication.strings; sourceTree = ""; }; - 9866DCEB251CAA4900612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DCED251CAA4900612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Settings.strings; sourceTree = ""; }; 9866DCEE251CAA4A00612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Tab.strings; sourceTree = ""; }; 9866DCEF251CAA4A00612E3A /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/TabSwitcher.strings; sourceTree = ""; }; @@ -2009,13 +1988,6 @@ 9866DD8E251CB12D00612E3A /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Authentication.strings; sourceTree = ""; }; 9866DD90251CB12E00612E3A /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Authentication.strings; sourceTree = ""; }; 9866DD92251CB12E00612E3A /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Authentication.strings; sourceTree = ""; }; - 9866DD9C251CB14600612E3A /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/PrivacyDashboard.strings; sourceTree = ""; }; - 9866DD9E251CB17A00612E3A /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/PrivacyDashboard.strings; sourceTree = ""; }; - 9866DDA2251CB1C000612E3A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/PrivacyDashboard.strings; sourceTree = ""; }; - 9866DDA4251CB1F500612E3A /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PrivacyDashboard.strings; sourceTree = ""; }; - 9866DDA6251CB24F00612E3A /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PrivacyDashboard.strings; sourceTree = ""; }; - 9866DDA8251CB41000612E3A /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/PrivacyDashboard.strings; sourceTree = ""; }; - 9866DDAA251CB4F500612E3A /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/PrivacyDashboard.strings; sourceTree = ""; }; 9866DDAC251CB58400612E3A /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Settings.strings; sourceTree = ""; }; 9866DDAE251CB5B400612E3A /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Settings.strings; sourceTree = ""; }; 9866DDB2251CB62500612E3A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Settings.strings; sourceTree = ""; }; @@ -2089,8 +2061,6 @@ 986B16C225E92DF0007D23E8 /* BrowsingMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsingMenuViewController.swift; sourceTree = ""; }; 986B45CA299D5EF50089D2D7 /* BookmarksLookupPerformanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksLookupPerformanceTests.swift; sourceTree = ""; }; 986B45CF299E30A50089D2D7 /* BookmarkEntityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkEntityTests.swift; sourceTree = ""; }; - 986C7FA624171C6000A3557D /* BrokenSiteCategories.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrokenSiteCategories.swift; sourceTree = ""; }; - 986C7FA82417ADE700A3557D /* ReportBrokenSiteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportBrokenSiteViewController.swift; sourceTree = ""; }; 986DA94924884B18004A7E39 /* WebViewTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewTransition.swift; sourceTree = ""; }; 987130BE294AAB9E00AB05E0 /* FavoriteListViewModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoriteListViewModelTests.swift; sourceTree = ""; }; 987130BF294AAB9E00AB05E0 /* BookmarkEditorViewModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarkEditorViewModelTests.swift; sourceTree = ""; }; @@ -3141,15 +3111,6 @@ name = PrivacyIconAndTrackers; sourceTree = ""; }; - 1E87615728A1515400C7C5CE /* PrivacyDashboard */ = { - isa = PBXGroup; - children = ( - 1E87615828A1517200C7C5CE /* PrivacyDashboardViewController.swift */, - 984147B924F0268D00362052 /* PrivacyDashboard.storyboard */, - ); - name = PrivacyDashboard; - sourceTree = ""; - }; 1E8AD1C527BE45F800ABA377 /* DownloadsList */ = { isa = PBXGroup; children = ( @@ -3616,18 +3577,14 @@ 83D4A73820E2454D003A7A6D /* UI */ = { isa = PBXGroup; children = ( - 98DA6B3222243CC3006EA9EB /* Feedback.xcassets */, 984147B024F0261A00362052 /* Feedback.storyboard */, - 9888F77A2224980500C46159 /* FeedbackViewController.swift */, - 9838059E2228208E00385F1A /* PositiveFeedbackViewController.swift */, + 98DA6B3222243CC3006EA9EB /* Feedback.xcassets */, 984D60B1222A1284003B9E3B /* FeedbackFormViewController.swift */, - 982E562F222C3D5B008D861B /* FeedbackPickerViewController.swift */, 980891A42237D4F500313A70 /* FeedbackNavigator.swift */, + 982E562F222C3D5B008D861B /* FeedbackPickerViewController.swift */, 980891A62237D5D800313A70 /* FeedbackPresenter.swift */, - 986C7FA624171C6000A3557D /* BrokenSiteCategories.swift */, - 4BC6DD1B2A60E6AD001EC129 /* ReportBrokenSiteView.swift */, - 986C7FA82417ADE700A3557D /* ReportBrokenSiteViewController.swift */, - 98728E812417E3300033960E /* BrokenSiteInfo.swift */, + 9888F77A2224980500C46159 /* FeedbackViewController.swift */, + 9838059E2228208E00385F1A /* PositiveFeedbackViewController.swift */, ); name = UI; sourceTree = ""; @@ -3723,7 +3680,7 @@ 85AE668C20971FCA0014CF04 /* Notifications */, F1C4A70C1E5771F800A6CA1B /* OmniBar */, F1AE54DB1F0425BB00D9A700 /* Privacy */, - 1E87615728A1515400C7C5CE /* PrivacyDashboard */, + F1DF09502B039E6E008CC908 /* PrivacyDashboard */, 02ECEC602A965074009F0654 /* PrivacyInfo.xcprivacy */, C1B7B51D28941F160098FD6A /* RemoteMessaging */, F1AB2B401E3F75A000868554 /* Settings */, @@ -5278,6 +5235,16 @@ name = UserInterface; sourceTree = ""; }; + F1DF09502B039E6E008CC908 /* PrivacyDashboard */ = { + isa = PBXGroup; + children = ( + 98728E812417E3300033960E /* BrokenSiteInfo.swift */, + 1E87615828A1517200C7C5CE /* PrivacyDashboardViewController.swift */, + 984147B924F0268D00362052 /* PrivacyDashboard.storyboard */, + ); + path = PrivacyDashboard; + sourceTree = ""; + }; F1E092B31E92A6B900732CCC /* Core */ = { isa = PBXGroup; children = ( @@ -6098,7 +6065,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "./lint.sh\n"; + shellScript = "./lint.sh --strict\n"; }; 98B0CE69251C937D003FB601 /* Update Localizable.strings */ = { isa = PBXShellScriptBuildPhase; @@ -6345,7 +6312,6 @@ 31A42566285A0A6300049386 /* FaviconViewModel.swift in Sources */, 8C4838B5221C8F7F008A6739 /* GestureToolbarButton.swift in Sources */, EE276BEA2A77F823009167B6 /* NetworkProtectionRootViewController.swift in Sources */, - 986C7FA92417ADE700A3557D /* ReportBrokenSiteViewController.swift in Sources */, 310ECFDD282A8BB0005029B3 /* EnableAutofillSettingsTableViewCell.swift in Sources */, 1E908BF329827C480008C8F3 /* AutoconsentManagement.swift in Sources */, CB9B8739278C8E72001F4906 /* WidgetEducationViewController.swift in Sources */, @@ -6374,7 +6340,6 @@ 4BCD14632B05AF2B000B1E4C /* NetworkProtectionAccessController.swift in Sources */, 1E8AD1D527C2E22900ABA377 /* DownloadsListSectionViewModel.swift in Sources */, EE0798C52B179936000A4F64 /* NetworkProtectionVPNCountryLabelsModel.swift in Sources */, - 4BC6DD1C2A60E6AD001EC129 /* ReportBrokenSiteView.swift in Sources */, 31584616281AFB46004ADB8B /* AutofillLoginDetailsViewController.swift in Sources */, C1F341C72A6924100032057B /* EmailAddressPromptViewModel.swift in Sources */, F47E53D9250A97330037C686 /* OnboardingDefaultBroswerViewController.swift in Sources */, @@ -6475,7 +6440,6 @@ 027F487A2A4B66CD001A1C6C /* AppTPFAQViewModel.swift in Sources */, F1E90C201E678E7C005E7E21 /* HomeControllerDelegate.swift in Sources */, F17922DE1E7192E6006E3D97 /* SuggestionTableViewCell.swift in Sources */, - 986C7FA724171C6000A3557D /* BrokenSiteCategories.swift in Sources */, 85DB12ED2A1FED0C000A4A72 /* AppDelegate+AppDeepLinks.swift in Sources */, 98DA6ECA2181E41F00E65433 /* ThemeManager.swift in Sources */, C159DF072A430B60007834BB /* EmailSignupViewController.swift in Sources */, @@ -7324,30 +7288,6 @@ isa = PBXVariantGroup; children = ( 984147B824F0268D00362052 /* Base */, - 9866DB92251CA8F400612E3A /* bg */, - 9866DBA9251CA91800612E3A /* hr */, - 9866DBC0251CA92B00612E3A /* cs */, - 9866DBD7251CA93900612E3A /* da */, - 9866DBEE251CA94F00612E3A /* nl */, - 9866DC05251CA96300612E3A /* et */, - 9866DC1C251CA99C00612E3A /* de */, - 9866DC33251CA9B000612E3A /* el */, - 9866DC4A251CA9C000612E3A /* hu */, - 9866DC61251CA9CF00612E3A /* it */, - 9866DC78251CA9E300612E3A /* lv */, - 9866DC8F251CA9F500612E3A /* lt */, - 9866DCA6251CAA0600612E3A /* pl */, - 9866DCBD251CAA2700612E3A /* ro */, - 9866DCD4251CAA3400612E3A /* sk */, - 9866DCEB251CAA4900612E3A /* sl */, - 9866DD9C251CB14600612E3A /* fi */, - 9866DD9E251CB17A00612E3A /* fr */, - 9866DDA2251CB1C000612E3A /* pt */, - 9866DDA4251CB1F500612E3A /* ru */, - 9866DDA6251CB24F00612E3A /* es */, - 9866DDA8251CB41000612E3A /* sv */, - 9866DDAA251CB4F500612E3A /* tr */, - 9816854A2521EEF100FA91A1 /* nb */, ); name = PrivacyDashboard.storyboard; sourceTree = ""; @@ -9217,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 90.0.0; + version = 91.0.1; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 7824ece4bb..13ff3bc894 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "bba78df5b33387502973387fd2a4f4ed0a80fce5", - "version": "90.0.0" + "revision": "822e284a50ebb42f0880ebcae87dc36e007f8c31", + "version": "91.0.1" } }, { @@ -105,8 +105,8 @@ "repositoryURL": "https://github.com/duckduckgo/privacy-dashboard", "state": { "branch": null, - "revision": "daa9708223b4b4318fb6448ca44801dfabcddc6f", - "version": "3.0.0" + "revision": "38336a574e13090764ba09a6b877d15ee514e371", + "version": "3.1.1" } }, { diff --git a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo.xcscheme b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo.xcscheme index 5383c46f83..046960ab50 100644 --- a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo.xcscheme +++ b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo.xcscheme @@ -1,7 +1,7 @@ + version = "1.7"> @@ -95,7 +95,8 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" - allowLocationSimulation = "YES"> + allowLocationSimulation = "NO" + showNonLocalizedStrings = "YES"> + + - + - + - @@ -29,8 +28,8 @@ - - + + @@ -683,8 +641,5 @@ - - - diff --git a/DuckDuckGo/Base.lproj/Settings.storyboard b/DuckDuckGo/Base.lproj/Settings.storyboard index 63439e5402..e3d799493f 100644 --- a/DuckDuckGo/Base.lproj/Settings.storyboard +++ b/DuckDuckGo/Base.lproj/Settings.storyboard @@ -1,9 +1,9 @@ - + - + @@ -1102,7 +1102,7 @@ - + @@ -1278,15 +1278,15 @@ - + - + - + diff --git a/DuckDuckGo/BrokenSiteCategories.swift b/DuckDuckGo/BrokenSiteCategories.swift deleted file mode 100644 index 443a51185d..0000000000 --- a/DuckDuckGo/BrokenSiteCategories.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// BrokenSiteCategories.swift -// DuckDuckGo -// -// Copyright © 2020 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -struct BrokenSite { - - enum Category: String, CaseIterable, Identifiable { - case images - case paywall - case comments - case videos - case links - case content - case login - case unsupported - case cookiePrompt = "cookieprompt" - case other - - var id: Self { self } - - var categoryText: String { - switch self { - case .images: - return UserText.brokenSiteCategoryImages - case .paywall: - return UserText.brokenSiteCategoryPaywall - case .comments: - return UserText.brokenSiteCategoryComments - case .videos: - return UserText.brokenSiteCategoryVideos - case .links: - return UserText.brokenSiteCategoryLinks - case .content: - return UserText.brokenSiteCategoryContent - case .login: - return UserText.brokenSiteCategoryLogin - case .unsupported: - return UserText.brokenSiteCategoryUnsupported - case .cookiePrompt: - return UserText.brokenSiteCategoryCookiePrompt - case .other: - return UserText.brokenSiteCategoryOther - } - } - } -} diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index 4eb01f301a..47af3fba21 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -22,6 +22,7 @@ import Common import Core import Bookmarks import BrowserServicesKit +import PrivacyDashboard extension MainViewController { @@ -122,21 +123,37 @@ extension MainViewController { os_log(#function, log: .generalLog, type: .debug) hideAllHighlightsIfNeeded() - let storyboard = UIStoryboard(name: "Feedback", bundle: nil) - guard let controller: UINavigationController = storyboard.instantiateInitialViewController(), - let brokenSiteScreen = controller.topViewController as? ReportBrokenSiteViewController else { - assertionFailure() + let brokenSiteInfo = currentTab?.getCurrentWebsiteInfo() + guard let currentURL = currentTab?.url, + let privacyInfo = currentTab?.makePrivacyInfo(url: currentURL) else { + assertionFailure("Missing fundamental data") return } - - brokenSiteScreen.brokenSiteInfo = currentTab?.getCurrentWebsiteInfo() + + let storyboard = UIStoryboard(name: "PrivacyDashboard", bundle: nil) + let controller = storyboard.instantiateInitialViewController { coder in + PrivacyDashboardViewController(coder: coder, + privacyInfo: privacyInfo, + privacyConfigurationManager: ContentBlocking.shared.privacyConfigurationManager, + contentBlockingManager: ContentBlocking.shared.contentBlockingManager, + initMode: .reportBrokenSite) + } + + guard let controller = controller else { + assertionFailure("PrivacyDashboardViewController not initialised") + return + } + + currentTab?.privacyDashboard = controller + controller.popoverPresentationController?.delegate = controller + controller.brokenSiteInfo = brokenSiteInfo if UIDevice.current.userInterfaceIdiom == .pad { controller.modalPresentationStyle = .formSheet } else { controller.modalPresentationStyle = .pageSheet } - + present(controller, animated: true) } diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index fa2a0b7336..5aaf4871fe 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -680,10 +680,10 @@ class MainViewController: UIViewController { func onQuickFirePressed() { wakeLazyFireButtonAnimator() - self.forgetAllWithAnimation {} - self.dismiss(animated: true) + forgetAllWithAnimation {} + dismiss(animated: true) if KeyboardSettings().onAppLaunch { - self.enterSearch() + enterSearch() } } diff --git a/DuckDuckGo/Base.lproj/PrivacyDashboard.storyboard b/DuckDuckGo/PrivacyDashboard/Base.lproj/PrivacyDashboard.storyboard similarity index 84% rename from DuckDuckGo/Base.lproj/PrivacyDashboard.storyboard rename to DuckDuckGo/PrivacyDashboard/Base.lproj/PrivacyDashboard.storyboard index a30dfbca7b..7f4ce74cea 100644 --- a/DuckDuckGo/Base.lproj/PrivacyDashboard.storyboard +++ b/DuckDuckGo/PrivacyDashboard/Base.lproj/PrivacyDashboard.storyboard @@ -1,9 +1,9 @@ - + - + @@ -38,21 +38,12 @@ - - - - - - - - - diff --git a/DuckDuckGo/PrivacyDashboard/BrokenSiteInfo.swift b/DuckDuckGo/PrivacyDashboard/BrokenSiteInfo.swift new file mode 100644 index 0000000000..a6395d695d --- /dev/null +++ b/DuckDuckGo/PrivacyDashboard/BrokenSiteInfo.swift @@ -0,0 +1,130 @@ +// +// BrokenSiteInfo.swift +// DuckDuckGo +// +// Copyright © 2020 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import Core + +public struct BrokenSiteInfo { + + static let allowedQueryReservedCharacters = CharacterSet(charactersIn: ",") + + private struct Keys { + static let url = "siteUrl" + static let category = "category" + static let reportFlow = "reportFlow" + static let description = "description" + static let upgradedHttps = "upgradedHttps" + static let tds = "tds" + static let blockedTrackers = "blockedTrackers" + static let surrogates = "surrogates" + static let atb = "atb" + static let os = "os" + static let manufacturer = "manufacturer" + static let model = "model" + static let siteType = "siteType" + static let gpc = "gpc" + static let ampUrl = "ampUrl" + static let urlParametersRemoved = "urlParametersRemoved" + static let protectionsState = "protectionsState" + } + + public enum Source: String { + case appMenu = "menu" + case dashboard + } + + private let url: URL? + private let httpsUpgrade: Bool + private let blockedTrackerDomains: [String] + private let installedSurrogates: [String] + private let isDesktop: Bool + private let tdsETag: String? + private let ampUrl: String? + private let urlParametersRemoved: Bool + private let model: String + private let manufacturer: String + private let systemVersion: String + private let gpc: Bool + private let protectionsState: Bool + + public init(url: URL?, httpsUpgrade: Bool, + blockedTrackerDomains: [String], + installedSurrogates: [String], + isDesktop: Bool, + tdsETag: String?, + ampUrl: String?, + urlParametersRemoved: Bool, + protectionsState: Bool, + model: String = UIDevice.current.model, + manufacturer: String = "Apple", + systemVersion: String = UIDevice.current.systemVersion, + gpc: Bool? = nil) { + self.url = url + self.httpsUpgrade = httpsUpgrade + self.blockedTrackerDomains = blockedTrackerDomains + self.installedSurrogates = installedSurrogates + self.isDesktop = isDesktop + self.tdsETag = tdsETag + self.ampUrl = ampUrl + self.urlParametersRemoved = urlParametersRemoved + + self.model = model + self.manufacturer = manufacturer + self.systemVersion = systemVersion + self.protectionsState = protectionsState + + if let gpcParam = gpc { + self.gpc = gpcParam + } else { + self.gpc = AppDependencyProvider.shared.appSettings.sendDoNotSell + } + } + + func send(with category: String?, description: String, source: Source) { + + let parameters: [String: String] = [ + Keys.url: normalize(url), + Keys.category: category ?? "", + Keys.description: description, + Keys.reportFlow: source.rawValue, + Keys.upgradedHttps: httpsUpgrade ? "true" : "false", + Keys.siteType: isDesktop ? "desktop" : "mobile", + Keys.tds: tdsETag?.trimmingCharacters(in: CharacterSet(charactersIn: "\"")) ?? "", + Keys.blockedTrackers: blockedTrackerDomains.joined(separator: ","), + Keys.surrogates: installedSurrogates.joined(separator: ","), + Keys.atb: StatisticsUserDefaults().atb ?? "", + Keys.os: systemVersion, + Keys.manufacturer: manufacturer, + Keys.model: model, + Keys.gpc: gpc ? "true" : "false", + Keys.ampUrl: ampUrl ?? "", + Keys.urlParametersRemoved: urlParametersRemoved ? "true" : "false", + Keys.protectionsState: protectionsState ? "true" : "false" + ] + + Pixel.fire(pixel: .brokenSiteReport, + withAdditionalParameters: parameters, + allowedQueryReservedCharacters: BrokenSiteInfo.allowedQueryReservedCharacters) + } + + private func normalize(_ url: URL?) -> String { + return url?.normalized()?.absoluteString ?? "" + } + +} diff --git a/DuckDuckGo/PrivacyDashboardViewController.swift b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift similarity index 62% rename from DuckDuckGo/PrivacyDashboardViewController.swift rename to DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift index 319e31b91e..c4a2e67877 100644 --- a/DuckDuckGo/PrivacyDashboardViewController.swift +++ b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift @@ -24,27 +24,42 @@ import Core import BrowserServicesKit import PrivacyDashboard +/// View controller used for `Privacy Dasboard` or `Report broken site`, the web content is chosen at init time setting the correct `initMode` class PrivacyDashboardViewController: UIViewController { + /// Type of web page displayed + enum Mode { + case privacyDashboard + case reportBrokenSite + } + @IBOutlet private(set) weak var webView: WKWebView! - public weak var tabViewController: TabViewController? - + private let initMode: Mode private let privacyDashboardController: PrivacyDashboardController private let privacyConfigurationManager: PrivacyConfigurationManaging private let contentBlockingManager: ContentBlockerRulesManager + public var brokenSiteInfo: BrokenSiteInfo? + + var source: BrokenSiteInfo.Source { + initMode == .reportBrokenSite ? .appMenu : .dashboard + } init?(coder: NSCoder, privacyInfo: PrivacyInfo?, privacyConfigurationManager: PrivacyConfigurationManaging, - contentBlockingManager: ContentBlockerRulesManager) { + contentBlockingManager: ContentBlockerRulesManager, + initMode: Mode) { self.privacyDashboardController = PrivacyDashboardController(privacyInfo: privacyInfo) self.privacyConfigurationManager = privacyConfigurationManager self.contentBlockingManager = contentBlockingManager + self.initMode = initMode super.init(coder: coder) - self.privacyDashboardController.delegate = self + self.privacyDashboardController.privacyDashboardDelegate = self + self.privacyDashboardController.privacyDashboardNavigationDelegate = self + self.privacyDashboardController.privacyDashboardReportBrokenSiteDelegate = self } required init?(coder: NSCoder) { @@ -53,8 +68,7 @@ class PrivacyDashboardViewController: UIViewController { public override func viewDidLoad() { super.viewDidLoad() - - privacyDashboardController.setup(for: webView) + privacyDashboardController.setup(for: webView, reportBrokenSiteOnly: initMode == Mode.reportBrokenSite ? true : false) privacyDashboardController.preferredLocale = Bundle.main.preferredLocalizations.first applyTheme(ThemeManager.shared.currentTheme) } @@ -68,38 +82,30 @@ class PrivacyDashboardViewController: UIViewController { privacyDashboardController.didFinishRulesCompilation() privacyDashboardController.updatePrivacyInfo(privacyInfo) } - - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - if let navController = segue.destination as? UINavigationController, - let brokenSiteScreen = navController.topViewController as? ReportBrokenSiteViewController { - brokenSiteScreen.brokenSiteInfo = tabViewController?.getCurrentWebsiteInfo() - } - } -} -private extension PrivacyDashboardViewController { - - func privacyDashboardProtectionSwitchChangeHandler(enabled: Bool) { + private func privacyDashboardProtectionSwitchChangeHandler(state: ProtectionState) { + + dismiss(animated: true) + guard let domain = privacyDashboardController.privacyInfo?.url.host else { return } let privacyConfiguration = privacyConfigurationManager.privacyConfig - - if enabled { + let pixelParam = ["trigger_origin": state.eventOrigin.screen.rawValue, + "source": source.rawValue] + if state.isProtected { privacyConfiguration.userEnabledProtection(forDomain: domain) ActionMessageView.present(message: UserText.messageProtectionEnabled.format(arguments: domain)) + Pixel.fire(pixel: .dashboardProtectionAllowlistRemove, withAdditionalParameters: pixelParam) } else { privacyConfiguration.userDisabledProtection(forDomain: domain) ActionMessageView.present(message: UserText.messageProtectionDisabled.format(arguments: domain)) + Pixel.fire(pixel: .dashboardProtectionAllowlistAdd, withAdditionalParameters: pixelParam) } contentBlockingManager.scheduleCompilation() - - privacyDashboardController.didStartRulesCompilation() - - Pixel.fire(pixel: enabled ? .privacyDashboardProtectionEnabled : .privacyDashboardProtectionDisabled) } - func privacyDashboardCloseTappedHandler() { + private func privacyDashboardCloseHandler() { dismiss(animated: true) } } @@ -122,9 +128,8 @@ extension PrivacyDashboardViewController: Themable { extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { - func privacyDashboardController(_ privacyDashboardController: PrivacyDashboardController, - didChangeProtectionSwitch protectionState: ProtectionState) { - privacyDashboardProtectionSwitchChangeHandler(enabled: protectionState.isProtected) + func privacyDashboardController(_ privacyDashboardController: PrivacyDashboardController, didChangeProtectionSwitch protectionState: ProtectionState) { + privacyDashboardProtectionSwitchChangeHandler(state: protectionState) } func privacyDashboardController(_ privacyDashboardController: PrivacyDashboardController, didRequestOpenUrlInNewTab url: URL) { @@ -135,13 +140,8 @@ extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { } } - func privacyDashboardControllerDidTapClose(_ privacyDashboardController: PrivacyDashboardController) { - privacyDashboardCloseTappedHandler() - } - func privacyDashboardControllerDidRequestShowReportBrokenSite(_ privacyDashboardController: PrivacyDashboardController) { Pixel.fire(pixel: .privacyDashboardReportBrokenSite) - performSegue(withIdentifier: "ReportBrokenSite", sender: self) } func privacyDashboardController(_ privacyDashboardController: PrivacyDashboard.PrivacyDashboardController, @@ -159,4 +159,35 @@ extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { } } -extension PrivacyDashboardViewController: UIPopoverPresentationControllerDelegate { } +extension PrivacyDashboardViewController: PrivacyDashboardNavigationDelegate { + + func privacyDashboardController(_ privacyDashboardController: PrivacyDashboard.PrivacyDashboardController, didSetHeight height: Int) { + // The size received in iPad is wrong, shane will sort this out soon. + // preferredContentSize.height = CGFloat(height) + } + + func privacyDashboardControllerDidTapClose(_ privacyDashboardController: PrivacyDashboardController) { + privacyDashboardCloseHandler() + } +} + +extension PrivacyDashboardViewController: PrivacyDashboardReportBrokenSiteDelegate { + + func privacyDashboardController(_ privacyDashboardController: PrivacyDashboardController, reportBrokenSiteDidChangeProtectionSwitch protectionState: ProtectionState) { + privacyDashboardProtectionSwitchChangeHandler(state: protectionState) + } + + func privacyDashboardController(_ privacyDashboardController: PrivacyDashboard.PrivacyDashboardController, didRequestSubmitBrokenSiteReportWithCategory category: String, description: String) { + + guard let brokenSiteInfo = brokenSiteInfo else { + assertionFailure("brokenSiteInfo not initialised") + return + } + + brokenSiteInfo.send(with: category, description: description, source: source) + ActionMessageView.present(message: UserText.feedbackSumbittedConfirmation) + privacyDashboardCloseHandler() + } +} + +extension PrivacyDashboardViewController: UIPopoverPresentationControllerDelegate {} diff --git a/DuckDuckGo/ReportBrokenSiteView.swift b/DuckDuckGo/ReportBrokenSiteView.swift deleted file mode 100644 index 788c524e29..0000000000 --- a/DuckDuckGo/ReportBrokenSiteView.swift +++ /dev/null @@ -1,150 +0,0 @@ -// -// ReportBrokenSiteView.swift -// DuckDuckGo -// -// Copyright © 2023 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import SwiftUI -import DuckUI -import DesignResourcesKit - -struct ReportBrokenSiteView: View { - - let categories: [BrokenSite.Category] - let submitReport: (BrokenSite.Category?, String) -> Void - - @State private var selectedCategory: BrokenSite.Category? - - @State private var description: String = "" - @State private var placeholderText: String = UserText.brokenSiteCommentPlaceholder - - func submitForm() { - submitReport(selectedCategory, description) - } - - var form: some View { - Form { - Section { - - } header: { - VStack { - Image("Breakage-128") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: Const.Size.imageSize, height: Const.Size.imageSize) - - Text(UserText.reportBrokenSiteHeader) - .textCase(nil) - .multilineTextAlignment(.center) - .daxBodyRegular() - .foregroundColor(Color(designSystemColor: .textSecondary)) - } - .frame(maxWidth: .infinity) - } - .listRowBackground(Color.clear) - - Section { - HStack { - Picker("", selection: $selectedCategory) { - HStack { - Text(UserText.brokenSiteCategoryPlaceholder) - Spacer() - } - .tag(nil as BrokenSite.Category?) - - ForEach(categories) { cat in - HStack { - Text(cat.categoryText) - Spacer() - } - .tag(Optional(cat)) - } - } - .labelsHidden() - - Spacer() - } - .padding(.leading, Const.Size.pickerPadding) - } header: { - Text(UserText.brokenSiteCategoryTitle) - } - - Section { - // As of July 2023 SwiftUI STILL does not support placeholders for `TextEditor` - // Until that time we have to use this hack to show a placeholder - // https://stackoverflow.com/a/65406506 - ZStack { - if self.description.isEmpty { - TextEditor(text: $placeholderText) - .font(.body) - .foregroundColor(Color(UIColor.placeholderText)) - .disabled(true) - } - - TextEditor(text: $description) - .font(.body) - } - .padding(.leading, Const.Size.commentFieldPadding) - .frame(minHeight: Const.Size.minCommentHeight) - } header: { - Text(UserText.brokenSiteSectionTitle) - } - - Section { - Button(action: { - submitForm() - }, label: { - Text(UserText.appTPReportSubmit) - }) - .buttonStyle(PrimaryButtonStyle()) - .listRowBackground(Color.clear) - } - .listRowInsets(EdgeInsets()) - } - } - - @ViewBuilder - var formWithBackground: some View { - if #available(iOS 16, *) { - form - .scrollContentBackground(.hidden) - .background(Color(designSystemColor: .background)) - } else { - form - .background(Color(designSystemColor: .background)) - } - } - - var body: some View { - formWithBackground - } -} - -private enum Const { - enum Size { - static let imageSize: CGFloat = 128 - static let minCommentHeight: CGFloat = 60 - static let commentFieldPadding: CGFloat = -4 - static let pickerPadding: CGFloat = -12 - static let buttonHeight: CGFloat = 30 - } -} - -struct ReportBrokenSiteView_Previews: PreviewProvider { - static var previews: some View { - ReportBrokenSiteView(categories: BrokenSite.Category.allCases, submitReport: { _, _ in }) - } -} diff --git a/DuckDuckGo/ReportBrokenSiteViewController.swift b/DuckDuckGo/ReportBrokenSiteViewController.swift deleted file mode 100644 index ea23d8112c..0000000000 --- a/DuckDuckGo/ReportBrokenSiteViewController.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// ReportBrokenSiteViewController.swift -// DuckDuckGo -// -// Copyright © 2020 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import SwiftUI - -class ReportBrokenSiteViewController: UIViewController { - - public var brokenSiteInfo: BrokenSiteInfo? - - private var reportView: ReportBrokenSiteView? - - private let categories: [BrokenSite.Category] = { - var categories = BrokenSite.Category.allCases - categories = categories.filter { $0 != .other } - categories = categories.shuffled() - categories.append(.other) - return categories - }() - - override func viewDidLoad() { - super.viewDidLoad() - - applyTheme(ThemeManager.shared.currentTheme) - - reportView = ReportBrokenSiteView(categories: categories, submitReport: submitForm(category:description:)) - let hc = UIHostingController(rootView: reportView) - - self.addChild(hc) - self.view.addSubview(hc.view) - hc.didMove(toParent: self) - - hc.view.translatesAutoresizingMaskIntoConstraints = false - hc.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true - hc.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true - hc.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true - hc.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true - - DispatchQueue.main.async { - self.view.setNeedsLayout() - self.view.layoutIfNeeded() - } - } - - @IBAction func onClosePressed(sender: Any) { - dismiss(animated: true) - } - - func submitForm(category: BrokenSite.Category?, description: String) { - brokenSiteInfo?.send(with: category?.rawValue, description: description) - ActionMessageView.present(message: UserText.feedbackSumbittedConfirmation) - dismiss(animated: true) - } -} - -extension ReportBrokenSiteViewController: Themable { - - func decorate(with theme: Theme) { - decorateNavigationBar(with: theme) - - view.backgroundColor = theme.backgroundColor - } -} diff --git a/DuckDuckGo/SyncSettingsViewController+SyncDelegate.swift b/DuckDuckGo/SyncSettingsViewController+SyncDelegate.swift index c8854639c5..a47505c79d 100644 --- a/DuckDuckGo/SyncSettingsViewController+SyncDelegate.swift +++ b/DuckDuckGo/SyncSettingsViewController+SyncDelegate.swift @@ -27,13 +27,13 @@ extension SyncSettingsViewController: SyncManagementViewModelDelegate { func launchAutofillViewController() { guard let mainVC = view.window?.rootViewController as? MainViewController else { return } - self.dismiss(animated: true) + dismiss(animated: true) mainVC.launchAutofillLogins() } func launchBookmarksViewController() { guard let mainVC = view.window?.rootViewController as? MainViewController else { return } - self.dismiss(animated: true) + dismiss(animated: true) mainVC.segueToBookmarks() } diff --git a/DuckDuckGo/TabDelegate.swift b/DuckDuckGo/TabDelegate.swift index 6f7438d918..d5c58da091 100644 --- a/DuckDuckGo/TabDelegate.swift +++ b/DuckDuckGo/TabDelegate.swift @@ -86,5 +86,4 @@ protocol TabDelegate: AnyObject { func tabCheckIfItsBeingCurrentlyPresented(_ tab: TabViewController) -> Bool func showBars() - } diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index e63a5d9c21..9d1348546e 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -82,7 +82,7 @@ class TabViewController: UIViewController { private(set) var webView: WKWebView! private lazy var appRatingPrompt: AppRatingPrompt = AppRatingPrompt() - private weak var privacyDashboard: PrivacyDashboardViewController? + public weak var privacyDashboard: PrivacyDashboardViewController? private var storageCache: StorageCache = AppDependencyProvider.shared.storageCache let appSettings: AppSettings @@ -681,7 +681,7 @@ class TabViewController: UIViewController { controller.popoverPresentationController?.sourceRect = iconView.bounds } privacyDashboard = controller - privacyDashboard?.tabViewController = self + privacyDashboard?.brokenSiteInfo = getCurrentWebsiteInfo() } if let controller = segue.destination as? FullscreenDaxDialogViewController { @@ -707,8 +707,10 @@ class TabViewController: UIViewController { PrivacyDashboardViewController(coder: coder, privacyInfo: privacyInfo, privacyConfigurationManager: ContentBlocking.shared.privacyConfigurationManager, - contentBlockingManager: ContentBlocking.shared.contentBlockingManager) + contentBlockingManager: ContentBlocking.shared.contentBlockingManager, + initMode: .privacyDashboard) } + private func addTextSizeObserver() { NotificationCenter.default.addObserver(self, selector: #selector(onTextSizeChange), @@ -770,7 +772,7 @@ class TabViewController: UIViewController { onPrivacyInfoChanged() } - private func makePrivacyInfo(url: URL) -> PrivacyInfo? { + public func makePrivacyInfo(url: URL) -> PrivacyInfo? { guard let host = url.host else { return nil } let entity = ContentBlocking.shared.trackerDataManager.trackerData.findEntity(forHost: host) diff --git a/DuckDuckGo/UserText.swift b/DuckDuckGo/UserText.swift index 61b31851ec..bc1454043b 100644 --- a/DuckDuckGo/UserText.swift +++ b/DuckDuckGo/UserText.swift @@ -91,24 +91,6 @@ public struct UserText { public static let navigationTitleEdit = NSLocalizedString("navigation.title.edit", value: "Edit", comment: "Edit button") public static let navigationTitleDone = NSLocalizedString("navigation.title.done", value: "Done", comment: "Finish editing bookmarks button") - static let reportBrokenSiteHeader = NSLocalizedString("report.brokensite.header", value: "Submitting an anonymous broken site report helps us debug these issues and improve the app.", comment: "") - - static let brokenSiteSectionTitle = NSLocalizedString("brokensite.sectionTitle", value: "DESCRIBE WHAT HAPPENED", comment: "Broken Site Section Title") - static let brokenSiteCategoryTitle = NSLocalizedString("brokensite.categoryTitle", value: "SELECT A CATEGORY", comment: "Broken Site Category Section Title") - static let brokenSiteCategoryPlaceholder = NSLocalizedString("brokensite.categoryPlaceholder", value: "Pick your issue from the list...", comment: "Broken Site Category Placeholder") - static let brokenSiteCommentPlaceholder = NSLocalizedString("brokensite.commentPlaceholder", value: "Sharing more details can help us address this issue", comment: "Broken Site Comment Placeholder") - - static let brokenSiteCategoryImages = NSLocalizedString("brokensite.category.images", value: "Images didn’t load", comment: "Broken Site Category") - static let brokenSiteCategoryPaywall = NSLocalizedString("brokensite.category.paywall", value: "The site asked me to disable", comment: "Broken Site Category") - static let brokenSiteCategoryComments = NSLocalizedString("brokensite.category.comments", value: "Comments didn’t load", comment: "Broken Site Category") - static let brokenSiteCategoryVideos = NSLocalizedString("brokensite.category.videos", value: "Video didn’t play", comment: "Broken Site Category") - static let brokenSiteCategoryLinks = NSLocalizedString("brokensite.category.links", value: "Links or buttons don’t work", comment: "Broken Site Category") - static let brokenSiteCategoryContent = NSLocalizedString("brokensite.category.content", value: "Content is missing", comment: "Broken Site Category") - static let brokenSiteCategoryLogin = NSLocalizedString("brokensite.category.login", value: "I can’t sign in", comment: "Broken Site Category") - static let brokenSiteCategoryUnsupported = NSLocalizedString("brokensite.category.unsupported", value: "The browser is incompatible", comment: "Broken Site Category") - static let brokenSiteCategoryCookiePrompt = NSLocalizedString("brokensite.category.cookieprompt", value: "Cookie pop-up wasn't managed", comment: "Broken Site Category") - static let brokenSiteCategoryOther = NSLocalizedString("brokensite.category.other", value: "Something else", comment: "Broken Site Category") - public static let homeRowReminderTitle = NSLocalizedString("home.row.reminder.title", value: "Take DuckDuckGo home", comment: "Home is this context is the bottom home row (dock)") public static let homeRowReminderMessage = NSLocalizedString("home.row.reminder.message", value: "Add DuckDuckGo to your dock for easy access!", comment: "") diff --git a/DuckDuckGo/WebContainerViewController.swift b/DuckDuckGo/WebContainerViewController.swift index 2dd1663815..fa4f3d74bb 100644 --- a/DuckDuckGo/WebContainerViewController.swift +++ b/DuckDuckGo/WebContainerViewController.swift @@ -63,7 +63,7 @@ class WebContainerViewController: UIViewController { } @IBAction func dismiss() { - self.dismiss(animated: true) + dismiss(animated: true) } private func load(url: URL) { diff --git a/DuckDuckGo/bg.lproj/Feedback.strings b/DuckDuckGo/bg.lproj/Feedback.strings index a207c7cead..6cf1444e00 100644 --- a/DuckDuckGo/bg.lproj/Feedback.strings +++ b/DuckDuckGo/bg.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Не, благодаря! Готово"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Затваряне"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Споделяне на отзив"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Кой уебсайт е повреден?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Подаване на сигнал за повреден сайт"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Споделяне на отзив"; diff --git a/DuckDuckGo/bg.lproj/Localizable.strings b/DuckDuckGo/bg.lproj/Localizable.strings index ebb2fec0f5..4619b25016 100644 --- a/DuckDuckGo/bg.lproj/Localizable.strings +++ b/DuckDuckGo/bg.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Редактиране"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Съществуващите отметки няма да бъдат дублирани."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Превишихте ограничението за синхронизиране на отметки. Опитайте да изтриете някои от отметките. Докато този проблем не бъде разрешен, отметките няма да бъдат архивирани."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Синхронизирането на отметки е на пауза"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Превишихте ограничението за синхронизиране на пароли. Опитайте да изтриете някои от паролите. Докато този проблем не бъде разрешен, паролите няма да бъдат архивирани."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Синхронизирането на паролите е на пауза"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Научете повече"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "ОК"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Поставяне на всички раздели в отметки?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Импортирайте HTML файл с отметки от друг браузър или експортирайте съществуващите отметки."; -/* Broken Site Category */ -"brokensite.category.comments" = "Коментарите не се зареждат"; - -/* Broken Site Category */ -"brokensite.category.content" = "Липсва съдържание"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Неуспешно управление на изскачащ прозорец за бисквитки"; - -/* Broken Site Category */ -"brokensite.category.images" = "Изображенията не се зареждат"; - -/* Broken Site Category */ -"brokensite.category.links" = "Връзките или бутоните не работят"; - -/* Broken Site Category */ -"brokensite.category.login" = "Не мога да вляза"; - -/* Broken Site Category */ -"brokensite.category.other" = "Нещо друго"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Сайтът ме помоли да деактивирам"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Браузърът е несъвместим"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Видеото не се възпроизвежда"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Изберете проблем от списъка..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "ИЗБЕРЕТЕ КАТЕГОРИЯ"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Ако споделите повече подробности, може да ни помогне да се справим с този проблем"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "ОПИШЕТЕ ПРОБЛЕМА"; - /* No comment provided by engineer. */ "bucket: %@" = "контейнер: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Премахване"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Всички любими, запазени на устройството"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Изберете кои любими отметки да се показват в нов раздел въз основа на техния произход."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Предпочитания за показване"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Само любими на мобилни устройства"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Блокиране на реклами и изскачащи прозорци"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Отваряне на VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Управление"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Включване на известията"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Разрешете на DuckDuckGo да Ви уведомява, ако връзката бъде прекъсната или състоянието на VPN се промени."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Получавайте известия при прекъсване на връзката или промяна на състоянието на VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Известия за VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Автоматично възстановяване на VPN връзка след прекъсване."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Винаги включено"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Известия за VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Мрежовата защита предотвратява изтичането на DNS към Вашия доставчик на интернет услуги, като насочва DNS заявките през VPN тунела към нашия собствен резолвер."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Сигурен DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Настройки на VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Отваряне в друго приложение?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Изпращането на анонимен доклад за неработещ сайт ни помага да отстраним грешките и да подобрим приложението."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Търсене или въвеждане на адрес"; diff --git a/DuckDuckGo/bg.lproj/PrivacyDashboard.strings b/DuckDuckGo/bg.lproj/PrivacyDashboard.strings deleted file mode 100644 index a0488e0ab4..0000000000 --- a/DuckDuckGo/bg.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Сайтът е основна проследяваща мрежа"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Нов опит"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Данните не са криптирани"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Подаване на сигнал за повреден сайт"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "ОСНОВНИ НАРУШИТЕЛИ В ПРОСЛЕДЯВАЩАТА МРЕЖА"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Проверете интернет връзката и опитайте отново."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Засилена степен"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Етикет"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Опа, това не се получи"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Клас на поверителност"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Бутон"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "ПРАКТИКИ ЗА ЗАЩИТА НА ПОВЕРИТЕЛНОСТТА"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Нулиране на статистики на проследяващи мрежи"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "ОСНОВНИ НАРУШИТЕЛИ В ПРОСЛЕДЯВАЩАТА МРЕЖА"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Бутон"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ШИФРОВАНА ВРЪЗКА"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Бутон"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Незащитени сайтове"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Блокирани мрежи"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 блокирани тракери"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Подаване на сигнал за повреден сайт"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Практики за защита на поверителността"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Основни нарушители"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Етикет"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Не са намерени практики за защита на поверителността"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Незащитени сайтове"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Етикет"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Добри практики за защита на поверителността"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Защита на поверителността на сайта"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "ОСНОВНИ НАРУШИТЕЛИ В ПРОСЛЕДЯВАЩАТА МРЕЖА"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Защита на поверителността на сайта"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "ОСНОВНИ НАРУШИТЕЛИ В ПРОСЛЕДЯВАЩАТА МРЕЖА"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Шифрована връзка"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Деактивирахме временно защитата на поверителността, защото изглежда, че пречи на зареждането на този сайт."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Блокирани основни мрежи"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "ЧЕСТОТА НА ПРОСЛЕДЯВАЩА МРЕЖА"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Заредени са 8 други домейна"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Шифрована връзка"; - diff --git a/DuckDuckGo/bg.lproj/Settings.strings b/DuckDuckGo/bg.lproj/Settings.strings index 961ce72b2a..6887796705 100644 --- a/DuckDuckGo/bg.lproj/Settings.strings +++ b/DuckDuckGo/bg.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Автоматично изчистване на данните"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Още на duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Настройки"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "По подразбиране"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Поверителност, опростена. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Управление на прозорци за бисквитки"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Защитата на поверителността е активирана за всички сайтове"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Икона"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Още от DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Синхронизиране"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Синхронизиране и архивиране"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Сърфирайте поверително с нашето приложение за Mac "; diff --git a/DuckDuckGo/cs.lproj/Feedback.strings b/DuckDuckGo/cs.lproj/Feedback.strings index a9f2cec279..816910d59f 100644 --- a/DuckDuckGo/cs.lproj/Feedback.strings +++ b/DuckDuckGo/cs.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Ne, díky! Skončil(a) jsem"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Zavřít"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Podělte se o zpětnou vazbu"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Které webové stránky jsou poškozené?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Nahlásit nefunkční webové stránky"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Podělte se o zpětnou vazbu"; diff --git a/DuckDuckGo/cs.lproj/Localizable.strings b/DuckDuckGo/cs.lproj/Localizable.strings index 02864ed0e8..1542c6559b 100644 --- a/DuckDuckGo/cs.lproj/Localizable.strings +++ b/DuckDuckGo/cs.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Upravit"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Existující záložky nebudou duplikovány."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Máš překročený limit pro synchronizaci záložek. Zkus pár záložek smazat. Dokud problém nevyřešíš, záložky se nebudou zálohovat."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Synchronizace záložek je pozastavená"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Máš překročený limit pro synchronizaci hesel. Zkus pár hesel smazat. Dokud tenhle problém nevyřešíš, hesla se nebudou zálohovat."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Synchronizace hesel je pozastavená"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Více informací"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "DOBŘE"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Dát do záložek všechny karty?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Naimportuj soubor HTML se záložkami z jiného prohlížeče nebo vyexportuj svoje existující záložky."; -/* Broken Site Category */ -"brokensite.category.comments" = "Komentáře se nenačetly"; - -/* Broken Site Category */ -"brokensite.category.content" = "Chybí obsah"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Správa vyskakovacích oken pro souhlas s cookies se neaktivovala"; - -/* Broken Site Category */ -"brokensite.category.images" = "Obrázky se nenačetly"; - -/* Broken Site Category */ -"brokensite.category.links" = "Odkazy nebo tlačítka nefungují"; - -/* Broken Site Category */ -"brokensite.category.login" = "Nemohu se přihlásit"; - -/* Broken Site Category */ -"brokensite.category.other" = "Něco jiného"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Tato stránka mě požádala o deaktivaci"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Prohlížeč je nekompatibilní"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video se nepřehrálo"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Vyber problém ze seznamu..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VYBER KATEGORII"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Tento problém snáz vyřešíme, když nám nasdílíš další informace"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "POPIŠTE, CO SE STALO"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: % @"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Odstranit"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Všechny oblíbené položky na zařízení"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Vyber, které oblíbené položky se mají zobrazit na nové kartě podle jejich původu."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Předvolby zobrazení"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Jenom oblíbené mobilní položky"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokování reklam a vyskakovacích oken"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Otevřít VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Spravovat"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Zapnout oznámení"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Nech si od DuckDuckGo poslat upozornění, když se přeruší připojení nebo se změní stav VPN."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Nech si poslat upozornění, když se přeruší připojení nebo se změní stav VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Upozornění VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Po přerušení automaticky obnovit připojení VPN."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Vždycky zapnuté"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Oznámení sítě VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Ochrana sítě zabraňuje únikům DNS k poskytovateli internetových služeb tím, že směruje dotazy DNS přes tunel VPN na náš vlastní resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Zabezpečený systém DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Nastavení sítě VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otevřít v jiné aplikaci?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Odeslání anonymní zprávy o nefunkčním webu nám pomůže tyto problémy řešit a vylepšovat aplikaci."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Vyhledejte nebo zadejte adresu"; diff --git a/DuckDuckGo/cs.lproj/PrivacyDashboard.strings b/DuckDuckGo/cs.lproj/PrivacyDashboard.strings deleted file mode 100644 index aa68ffa1dc..0000000000 --- a/DuckDuckGo/cs.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Stránky jsou hlavní sledovací sítí"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Zkuste to znovu"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Data jsou nezašifrovaná"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Nahlásit nefunkční webové stránky"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "NEJČASTĚJŠÍ DELIKVENTI SLEDOVACÍ SÍTĚ"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Zkontrolujte připojení k internetu a zkuste to znovu."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Rozšířené hodnocení"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Štítek"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "A jéje, to nefungovalo"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Hodnocení ochrany soukromí"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Tlačítko"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "ZÁSADY OCHRANY SOUKROMÍ"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Obnovit statistiky sledovací sítě"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "NEJČASTĚJŠÍ DELIKVENTI SLEDOVACÍ SÍTĚ"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Tlačítko"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŠIFROVANÉ PŘIPOJENÍ"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Tlačítko"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Nechráněné stránky"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Blokované sítě"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 blokovaných trackerů"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Nahlásit nefunkční webové stránky"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Zásady ochrany soukromí"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Nejčastější provinilci"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Štítek"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nebyly nalezeny žádné postupy na ochranu soukromí"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Nechráněné stránky"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Štítek"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Správné postupy ochrany soukromí"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Ochrana osobních údajů na webových stránkách"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "NEJČASTĚJŠÍ DELIKVENTI SLEDOVACÍ SÍTĚ"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Ochrana osobních údajů na webových stránkách"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "NEJČASTĚJŠÍ DELIKVENTI SLEDOVACÍ SÍTĚ"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Šifrované připojení"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Dočasně jsme zakázali ochranu osobních údajů, protože se zdá, že porušuje podmínky této stránky."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Hlavní sítě zablokovány"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FREKVENCE SLEDOVACÍ SÍTĚ"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Načteno dalších 8 domén"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Šifrované připojení"; - diff --git a/DuckDuckGo/cs.lproj/Settings.strings b/DuckDuckGo/cs.lproj/Settings.strings index bb12c152b4..965b4ff82e 100644 --- a/DuckDuckGo/cs.lproj/Settings.strings +++ b/DuckDuckGo/cs.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Automaticky vymazat data"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Více na duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Nastavení"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Výchozí"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Ochrana soukromí, zjednodušená. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Správa vyskakovacích oken ohledně cookies"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Ochrana osobních údajů povolena pro všechny weby"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Další od DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synchronizace"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synchronizace a zálohování"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Anonymní brouzdání po internetu s naší aplikací pro Mac "; diff --git a/DuckDuckGo/da.lproj/Feedback.strings b/DuckDuckGo/da.lproj/Feedback.strings index 8d15d853f7..9ef0f1d21d 100644 --- a/DuckDuckGo/da.lproj/Feedback.strings +++ b/DuckDuckGo/da.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nej tak. jeg er færdig"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Luk"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Del feedback"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Hvilket websted er ødelagt?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Rapporter ødelagt websted"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Del feedback"; diff --git a/DuckDuckGo/da.lproj/Localizable.strings b/DuckDuckGo/da.lproj/Localizable.strings index a0e9bb2c37..3b9fcbc22c 100644 --- a/DuckDuckGo/da.lproj/Localizable.strings +++ b/DuckDuckGo/da.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Rediger"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Eksisterende bogmærker duplikeres ikke."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Du har overskredet grænsen for bogmærkesynkronisering. Prøv at slette nogle bogmærker. Dine bogmærker vil ikke blive sikkerhedskopieret, før dette er løst."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Bogmærkesynkronisering er sat på pause"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Du har overskredet grænsen for synkronisering af adgangskoder. Prøv at slette nogle adgangskoder. Dine adgangskoder vil ikke blive sikkerhedskopieret, før dette er løst."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Synkronisering af adgangskoder er sat på pause"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Mere info"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "Okay"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Bogmærk alle faner?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importér en HTML-fil med bogmærker fra en anden browser, eller eksportér dine eksisterende bogmærker."; -/* Broken Site Category */ -"brokensite.category.comments" = "Kommentarer blev ikke indlæst"; - -/* Broken Site Category */ -"brokensite.category.content" = "Indhold mangler"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Cookie-pop op blev ikke administreret"; - -/* Broken Site Category */ -"brokensite.category.images" = "Billeder blev ikke indlæst"; - -/* Broken Site Category */ -"brokensite.category.links" = "Links eller knapper fungerer ikke"; - -/* Broken Site Category */ -"brokensite.category.login" = "Jeg kan ikke logge ind"; - -/* Broken Site Category */ -"brokensite.category.other" = "Noget andet"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Webstedet bad mig om at deaktivere"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Browseren er inkompatibel"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Videoen blev ikke spillet"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Vælg dit emne fra listen ..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VÆLG EN KATEGORI"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Flere detaljer kan hjælpe os med at løse dette problem"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "BESKRIV, HVAD DER SKETE"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Fjern"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Alle favoritter på enheden"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Vælg, hvilke favoritter der skal vises på en ny fane baseret på deres oprindelse."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Indstillinger for visning"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Kun favoritter på mobil"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokering af annoncer og pop op-vinduer"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Åbn VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Administrer"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Slå notifikationer til"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Tillad DuckDuckGo at give dig besked, hvis din forbindelse falder ud, eller VPN-status ændres."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Få besked, hvis din forbindelse falder ud, eller VPN-status ændres."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-advarsler"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Gendan automatisk en VPN-forbindelse efter afbrydelse."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Altid aktiv"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-meddelelser"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection forhindrer DNS-lækager til din internetudbyder ved at dirigere DNS-forespørgsler gennem VPN-tunnelen til vores egen resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Sikker DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-indstillinger"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Åbn i en anden app?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Indsendelse af en anonym webstedsrapport om brud hjælper os med at debugge disse problemer og forbedre appen."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Søg eller indtast adresse"; diff --git a/DuckDuckGo/da.lproj/PrivacyDashboard.strings b/DuckDuckGo/da.lproj/PrivacyDashboard.strings deleted file mode 100644 index 48b888961d..0000000000 --- a/DuckDuckGo/da.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Websted er et stort tracker-netværk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Prøv igen"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Data er ikke krypterede"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Rapporter ødelagt websted"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "DE STØRSTE LOVOVERTRÆDERE FRA TRACKER-NETVÆRK"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Kontroller din internetforbindelse, og prøv igen."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Forstærket grad"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etiket"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Åh nej, det fungerede ikke"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Grad af privatliv"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Knap"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "Praksis for beskyttelse af privatlivets fred"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Nulstil statistik for tracker-netværk"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "DE STØRSTE LOVOVERTRÆDERE FRA TRACKER-NETVÆRK"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Knap"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "Krypteret forbindelse"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Knap"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Ubeskyttede websteder"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Netværk blokeret"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 trackere blokeret"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Rapporter ødelagt websted"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Praksis for beskyttelse af privatlivets fred"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Primære overtrædere"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etiket"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Ingen praksis for beskyttelse af privatlivets fred fundet"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Ubeskyttede websteder"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etiket"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "God praksis for beskyttelse af privatlivets fred"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Webstedets beskyttelse af personlige oplysninger"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "DE STØRSTE LOVOVERTRÆDERE FRA TRACKER-NETVÆRK"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Webstedets beskyttelse af personlige oplysninger"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "DE STØRSTE LOVOVERTRÆDERE FRA TRACKER-NETVÆRK"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Krypteret forbindelse"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Vi har midlertidigt deaktiveret beskyttelse af privatlivets fred, da det ser ud til at ødelægge dette websted."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Store netværk blokeret"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "TRACKER NETVÆRKSFREKVENS"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 andre domæner indlæst"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Krypteret forbindelse"; - diff --git a/DuckDuckGo/da.lproj/Settings.strings b/DuckDuckGo/da.lproj/Settings.strings index b0c910808b..631f1f1c56 100644 --- a/DuckDuckGo/da.lproj/Settings.strings +++ b/DuckDuckGo/da.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Ryd data automatisk"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Mere på duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Indstillinger"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Tema"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Fortrolighed, helt enkelt. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Administrer cookie pop op-vinduer"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Databeskyttelse aktiveret for alle websteder"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikon"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Mere fra DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synkronisering"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synkronisering og sikkerhedskopiering"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Browse privat med vores app til Mac "; diff --git a/DuckDuckGo/de.lproj/Feedback.strings b/DuckDuckGo/de.lproj/Feedback.strings index 5630ec0bc1..1e29dbe8a2 100644 --- a/DuckDuckGo/de.lproj/Feedback.strings +++ b/DuckDuckGo/de.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nein danke. Ich bin fertig"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Schließen"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Feedback teilen"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Welche Website ist fehlerhaft?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Fehlerhafte Website melden"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Feedback teilen"; diff --git a/DuckDuckGo/de.lproj/Localizable.strings b/DuckDuckGo/de.lproj/Localizable.strings index 6f59a19e6e..3a0b2d35d1 100644 --- a/DuckDuckGo/de.lproj/Localizable.strings +++ b/DuckDuckGo/de.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Bearbeiten"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Bestehende Lesezeichen werden nicht kopiert."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Du hast das Limit für die Synchronisierung von Lesezeichen überschritten. Versuche, einige Lesezeichen zu löschen. Bis dieses Problem behoben ist, werden deine Lesezeichen nicht gesichert."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Lesezeichen-Synchronisierung ist angehalten"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Du hast das Limit für die Synchronisierung von Passwörtern überschritten. Versuche, einige Passwörter zu löschen. Bis dieses Problem behoben ist, werden deine Passwörter nicht gesichert."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Passwortsynchronisierung ist angehalten"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Mehr erfahren"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Alle Tabs mit Lesezeichen versehen?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importiere eine HTML-Datei mit Lesezeichen aus einem anderen Browser oder exportieren deine vorhandenen Lesezeichen."; -/* Broken Site Category */ -"brokensite.category.comments" = "Kommentare wurden nicht geladen"; - -/* Broken Site Category */ -"brokensite.category.content" = "Inhalt fehlt"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Cookie-Pop-up wurde nicht verwaltet"; - -/* Broken Site Category */ -"brokensite.category.images" = "Bilder wurden nicht geladen"; - -/* Broken Site Category */ -"brokensite.category.links" = "Links oder Schaltflächen funktionieren nicht"; - -/* Broken Site Category */ -"brokensite.category.login" = "Ich kann mich nicht anmelden"; - -/* Broken Site Category */ -"brokensite.category.other" = "Etwas anderes"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Die Seite hat mich aufgefordert zu deaktivieren"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Der Browser ist nicht kompatibel"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video wurde nicht abgespielt"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Wähle dein Problem aus der Liste aus..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "EINE KATEGORIE AUSWÄHLEN"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Das Teilen weiterer Details kann uns helfen, dieses Problem zu lösen"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "BESCHREIBE, WAS PASSIERT IST"; - /* No comment provided by engineer. */ "bucket: %@" = "Bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Entfernen"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Alle Gerätefavoriten"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Wähle aus, welche Favoriten auf in einem neuen Tab angezeigt werden sollen, je nachdem, woher sie stammen."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Anzeigeeinstellungen"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Nur mobile Favoriten"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blockieren von Werbungen und Pop-ups"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "VPN öffnen"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Verwalten"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Benachrichtigungen aktivieren"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Erlaube DuckDuckGo, dich zu benachrichtigen, wenn deine Verbindung abbricht oder sich dein VPN-Status ändert."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Lass dich benachrichtigen, wenn deine Verbindung abbricht oder sich der VPN-Status ändert."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-Benachrichtigungen"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Stelle eine VPN-Verbindung nach einer Unterbrechung automatisch wieder her."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Immer aktiviert"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-Benachrichtigungen"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection verhindert DNS-Lecks zu deinem Internetanbieter, indem DNS-Anfragen über den VPN-Tunnel an unseren eigenen Resolver weitergeleitet werden."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Sicheres DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-Einstellungen"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "In einer anderen App öffnen?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Das Senden eines anonymen Berichts über fehlerhafte Websites hilft uns, diese Probleme zu beheben und die App zu verbessern."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Adresse suchen oder eingeben"; diff --git a/DuckDuckGo/de.lproj/PrivacyDashboard.strings b/DuckDuckGo/de.lproj/PrivacyDashboard.strings deleted file mode 100644 index 7173449fbc..0000000000 --- a/DuckDuckGo/de.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Diese Website gehört zu einem großen Tracker-Netzwerk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Erneut versuchen"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Die Daten sind unverschlüsselt"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Fehlerhafte Website melden"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "HARTNÄCKIGSTE TRACKER-NETZWERKE"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Überprüfe deine Internetverbindung und versuche es erneut."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Erhöhte Stufe"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Oh, das hat nicht funktioniert"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Datenschutz-Stufe"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Schaltfläche"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "DATENSCHUTZPRAKTIKEN"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Tracker-Netzwerk-Statistiken zurücksetzen"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "HARTNÄCKIGSTE TRACKER-NETZWERKE"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Schaltfläche"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "Verschlüsselte Verbindung"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Schaltfläche"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Ungeschützte Websites"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Netzwerke wurden blockiert"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 Tracker wurden blockiert"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Fehlerhafte Website melden"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Datenschutzpraktiken"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Hartnäckigste Tracker"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Keine Datenschutzpraktiken gefunden"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Ungeschützte Websites"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Gute Datenschutzpraktiken"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Datenschutz der Website"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "HARTNÄCKIGSTE TRACKER-NETZWERKE"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Datenschutz der Website"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "HARTNÄCKIGSTE TRACKER-NETZWERKE"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Verschlüsselte Verbindung"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Wir haben den Datenschutz vorübergehend deaktiviert, da die Seite derzeit dadurch gestört wird."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Große Netzwerke wurden blockiert"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "TRACKER-NETZWERK-HÄUFIGKEIT"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 weitere Domains geladen"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Verschlüsselte Verbindung"; - diff --git a/DuckDuckGo/de.lproj/Settings.strings b/DuckDuckGo/de.lproj/Settings.strings index 739a017f02..49d0dd41f7 100644 --- a/DuckDuckGo/de.lproj/Settings.strings +++ b/DuckDuckGo/de.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Daten automatisch löschen"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Mehr auf duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Einstellungen"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Standard"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Datenschutz, vereinfacht. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Cookie-Pop-ups verwalten"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Datenschutz für alle Websites aktiviert"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Symbol"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Mehr von DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synchronisieren"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synchronisieren und sichern"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Privat browsen mit unserer App für Mac "; diff --git a/DuckDuckGo/el.lproj/Feedback.strings b/DuckDuckGo/el.lproj/Feedback.strings index 8bdc855b3f..f79eaed2c7 100644 --- a/DuckDuckGo/el.lproj/Feedback.strings +++ b/DuckDuckGo/el.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Όχι ευχαριστώ! Τελείωσα"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Κλείσιμο"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Κοινοποίηση σχολίου"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Ποιος ιστότοπος είναι κατεστραμμένος;"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Αναφορά ιστότοπου που δεν λειτουργεί"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Κοινοποίηση σχολίου"; diff --git a/DuckDuckGo/el.lproj/Localizable.strings b/DuckDuckGo/el.lproj/Localizable.strings index ff3591fc75..b416648110 100644 --- a/DuckDuckGo/el.lproj/Localizable.strings +++ b/DuckDuckGo/el.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Επεξεργασία"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Οι υπάρχοντες σελιδοδείκτες δεν θα αναπαραχθούν."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Έχετε υπερβεί το όριο συγχρονισμού σελιδοδεικτών. Προσπαθήστε να διαγράψετε ορισμένους σελιδοδείκτες. Μέχρι να επιλυθεί το πρόβλημα αυτό, δεν θα δημιουργηθούν αντίγραφα ασφαλείας για τους σελιδοδείκτες σας."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Ο συγχρονισμός σελιδοδεικτών έχει τεθεί σε παύση"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Έχετε υπερβεί το όριο συγχρονισμού κωδικών πρόσβασης. Προσπαθήστε να διαγράψετε κάποιους κωδικούς πρόσβασης. Μέχρι να επιλυθεί το πρόβλημα αυτό, δεν θα δημιουργηθούν αντίγραφα ασφαλείας για τους κωδικούς πρόσβασής σας."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Ο συγχρονισμός κωδικών πρόσβασης έχει τεθεί σε παύση"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Μάθετε περισσότερα"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "Εντάξει"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Προσθήκη σελιδοδείκτη για όλες τις καρτέλες;"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Κάντε εισαγωγή ενός αρχείου HTML με σελιδοδείκτες από άλλο πρόγραμμα περιήγησης, ή κάντε εξαγωγή των σελιδοδεικτών που διαθέτετε ήδη."; -/* Broken Site Category */ -"brokensite.category.comments" = "Τα σχόλια δεν φορτώθηκαν"; - -/* Broken Site Category */ -"brokensite.category.content" = "Το περιεχόμενο λείπει"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Δεν έγινε διαχείριση του αναδυόμενου παραθύρου για cookies"; - -/* Broken Site Category */ -"brokensite.category.images" = "Οι εικόνες δεν φορτώθηκαν"; - -/* Broken Site Category */ -"brokensite.category.links" = "Οι σύνδεσμοι ή τα κουμπιά δεν λειτουργούν"; - -/* Broken Site Category */ -"brokensite.category.login" = "Δεν μπορώ να συνδεθώ"; - -/* Broken Site Category */ -"brokensite.category.other" = "Κάτι άλλο"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Ο ιστότοπος μου ζήτησε να απενεργοποιήσω"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Το πρόγραμμα περιήγησης είναι ασύμβατο"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Το βίντεο δεν αναπαράχθηκε"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Επιλέξτε το πρόβλημα που αντιμετωπίζετε, από τη λίστα..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "ΕΠΙΛΕΞΤΕ ΚΑΤΗΓΟΡΙΑ"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Η κοινοποίηση περισσότερων λεπτομερειών μπορεί να μας βοηθήσει να επιλύσουμε το πρόβλημα αυτό"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "ΠΕΡΙΓΡΑΨΤΕ ΤΙ ΣΥΝΕΒΗ"; - /* No comment provided by engineer. */ "bucket: %@" = "κάδος: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Αφαίρεση"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Αγαπημένα όλων των συσκευών"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Επιλέξτε ποια αγαπημένα θα εμφανίζονται σε μια νέα καρτέλα με βάση την προέλευσή τους."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Προτιμήσεις προβολής"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Αγαπημένα μόνο για κινητά"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Αποκλεισμός διαφημίσεων και αναδυόμενων παραθύρων"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Ανοικτό VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Διαχείριση"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Ενεργοποίηση ειδοποιήσεων"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Επιτρέψτε στο DuckDuckGo να σας ειδοποιεί εάν η ισχύς της σύνδεσή σας μειωθεί ή αλλάξει η κατάσταση του VPN."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Ειδοποιηθείτε εάν η ισχύς της σύνδεσής σας μειωθεί ή αλλάξει η κατάσταση του VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Ειδοποιήσεις VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Αυτόματη αποκατάσταση μιας σύνδεσης VPN έπειτα από διακοπή."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Πάντα σε λειτουργία"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Ειδοποιήσεις VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Η Προστασία δικτύου αποτρέπει διαρροές DNS προς τον πάροχο υπηρεσιών διαδικτύου σας, δρομολογώντας ερωτήματα DNS μέσω της σήραγγας VPN στο δικό μας πρόγραμμα επίλυσης."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Ασφαλές DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Ρυθμίσεις VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Άνοιγμα σε άλλη εφαρμογή;"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Η υποβολή μιας ανώνυμης αναφοράς για σπασμένους συνδεσμους μασ βοηθά να πραγματοποιήσουμε επανόρθωση των εντοπισμένων σφαλμάτων και προβλημάτων αυτών των ζητημάτων και να βελτιώσουμε την εφαρμογή."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Αναζήτηση ή εισαγωγή διεύθυνσης"; diff --git a/DuckDuckGo/el.lproj/PrivacyDashboard.strings b/DuckDuckGo/el.lproj/PrivacyDashboard.strings deleted file mode 100644 index 75c7e9766a..0000000000 --- a/DuckDuckGo/el.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Ο ιστότοπος είναι κύριο δίκτυο παρακολούθησης"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Προσπαθήστε ξανά"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Τα δεδομένα δεν είναι κρυπτογραφημένα"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Αναφορά ιστότοπου που δεν λειτουργεί"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "ΚΟΡΥΦΑΙΟΙ ΠΑΡΑΒΑΤΕΣ ΤΟΥ ΔΙΚΤΥΟΥ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Ελέγξτε τη σύνδεσή σας στο διαδίκτυο και προσπαθήστε ξανά."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Βελτιωμένη βαθμολογία"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Ωχ, όχι! Δεν λειτούργησε αυτό"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Βαθμολογία ιδιωτικότητας"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Κουμπί"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "ΠΡΑΚΤΙΚΕΣ ΙΔΙΩΤΙΚΟΤΗΤΑΣ"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Επαναφορά στατιστικών δικτύου παρακολούθησης"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "ΚΟΡΥΦΑΙΟΙ ΠΑΡΑΒΑΤΕΣ ΤΟΥ ΔΙΚΤΥΟΥ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Κουμπί"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ΚΡΥΠΤΟΓΡΑΦΗΜΕΝΗ ΣΥΝΔΕΣΗ"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Κουμπί"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Μη προστατευόμενοι ιστότοποι"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Αποκλείστηκαν δίκτυα"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Αποκλείστηκαν 8 εφαρμογές παρακολούθησης"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Αναφορά ιστότοπου που δεν λειτουργεί"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Πρακτικές ιδιωτικότητας"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Κορυφαίοι παραβάτες"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Δεν βρέθηκαν πρακτικές προστασίας προσωπικών δεδομένων"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Μη προστατευόμενοι ιστότοποι"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Ορθές πρακτικές ιδιωτικότητας"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Προστασία της ιδιωτικότητας του ιστότοπου"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "ΚΟΡΥΦΑΙΟΙ ΠΑΡΑΒΑΤΕΣ ΤΟΥ ΔΙΚΤΥΟΥ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Προστασία της ιδιωτικότητας του ιστότοπου"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "ΚΟΡΥΦΑΙΟΙ ΠΑΡΑΒΑΤΕΣ ΤΟΥ ΔΙΚΤΥΟΥ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Κρυπτογραφημένη σύνδεση"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Απενεργοποιήσαμε προσωρινά την Προστασία προσωπικών δεδομένων καθώς φαίνεται ότι ρίχνει τον ιστότοπο."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Αποκλείστηκαν κύρια δίκτυα"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "ΣΥΧΝΟΤΗΤΑ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ ΔΙΚΤΥΟΥ"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 ακόμη τομείς φορτώθηκαν"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Κρυπτογραφημένη σύνδεση"; - diff --git a/DuckDuckGo/el.lproj/Settings.strings b/DuckDuckGo/el.lproj/Settings.strings index a05763b68c..38a6b1ac4b 100644 --- a/DuckDuckGo/el.lproj/Settings.strings +++ b/DuckDuckGo/el.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Αυτόματη απαλοιφή δεδομένων"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Περισσότερα στη διεύθυνση duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Ρυθμίσεις"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Προεπιλογή"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Η ιδιωτικότητα απλοποιημένη. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Διαχείριση αναδυόμενων παραθύρων cookies"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Η προστασία προσωπικών δεδομένων είναι ενεργοποιημένη για όλους τους ιστότοπους"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Εικονίδιο"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Περισσότερα από το DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Συγχρονισμός"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Συγχρονισμός και δημιουργία αντιγράφων ασφαλείας"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Περιηγηθείτε ιδιωτικά με την εφαρμογή μας για Mac "; diff --git a/DuckDuckGo/en.lproj/Localizable.strings b/DuckDuckGo/en.lproj/Localizable.strings index bf60cfb7fe..b7a81a8f05 100644 --- a/DuckDuckGo/en.lproj/Localizable.strings +++ b/DuckDuckGo/en.lproj/Localizable.strings @@ -769,48 +769,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Import an HTML file of bookmarks from another browser, or export your existing bookmarks."; -/* Broken Site Category */ -"brokensite.category.comments" = "Comments didn’t load"; - -/* Broken Site Category */ -"brokensite.category.content" = "Content is missing"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Cookie pop-up wasn't managed"; - -/* Broken Site Category */ -"brokensite.category.images" = "Images didn’t load"; - -/* Broken Site Category */ -"brokensite.category.links" = "Links or buttons don’t work"; - -/* Broken Site Category */ -"brokensite.category.login" = "I can’t sign in"; - -/* Broken Site Category */ -"brokensite.category.other" = "Something else"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "The site asked me to disable"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "The browser is incompatible"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video didn’t play"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Pick your issue from the list..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SELECT A CATEGORY"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Sharing more details can help us address this issue"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "DESCRIBE WHAT HAPPENED"; - /* Title for a section containing only items from past month */ "date.range.past-month" = "Past month"; @@ -1753,9 +1711,6 @@ https://duckduckgo.com/mac"; /* Alert title */ "prompt.custom.url.scheme.title" = "Open in Another App?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Submitting an anonymous broken site report helps us debug these issues and improve the app."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Search or enter address"; diff --git a/DuckDuckGo/es.lproj/Feedback.strings b/DuckDuckGo/es.lproj/Feedback.strings index a81befc8d5..897984c7a4 100644 --- a/DuckDuckGo/es.lproj/Feedback.strings +++ b/DuckDuckGo/es.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "No, gracias. He terminado"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Cerrar"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Compartir opiniones"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "¿Qué sitio web no funciona?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Informar de sitio web dañado"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Compartir opiniones"; diff --git a/DuckDuckGo/es.lproj/Localizable.strings b/DuckDuckGo/es.lproj/Localizable.strings index 9262ddf95a..ed3a0d69b7 100644 --- a/DuckDuckGo/es.lproj/Localizable.strings +++ b/DuckDuckGo/es.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Editar"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Los marcadores existentes no se duplicarán."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Has superado el límite de sincronización de marcadores. Prueba a eliminar algunos marcadores. No se realizará una copia de seguridad de los marcadores hasta que se resuelva esto."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "La sincronización de marcadores está en pausa"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Ha superado el límite de sincronización de contraseñas. Prueba a eliminar algunas contraseñas. No se realizará una copia de seguridad de las contraseñas hasta que se resuelva esto."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "La sincronización de contraseñas está en pausa"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Más información"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "De acuerdo"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "¿Añadir todas las pestañas a marcadores?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importa un archivo HTML de marcadores desde otro navegador o exporta tus marcadores existentes."; -/* Broken Site Category */ -"brokensite.category.comments" = "No se han cargado los comentarios"; - -/* Broken Site Category */ -"brokensite.category.content" = "Falta contenido"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "No se ha gestionado la ventana emergente de cookies"; - -/* Broken Site Category */ -"brokensite.category.images" = "No se han cargado las imágenes"; - -/* Broken Site Category */ -"brokensite.category.links" = "No funcionan los enlaces o botones"; - -/* Broken Site Category */ -"brokensite.category.login" = "No puedo iniciar sesión"; - -/* Broken Site Category */ -"brokensite.category.other" = "Otro problema"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "El sitio me pidió que desactivara"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "El navegador es incompatible"; - -/* Broken Site Category */ -"brokensite.category.videos" = "No se ha reproducido el vídeo"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Elige tu problema en la lista..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SELECCIONA UNA CATEGORÍA"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Si compartes más detalles, nos ayudarás a resolver esta incidencia"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "DESCRIBE QUÉ PASÓ"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Eliminar"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Todos los favoritos del dispositivo"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Elige qué favoritos mostrar en una nueva pestaña en función de su origen."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Preferencias de visualización"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Solo favoritos móviles"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Bloquear anuncios y mensajes emergentes"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Abrir VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Gestionar"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Activar notificaciones"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Permite que DuckDuckGo te notifique si tu conexión se cae o si cambia el estado de la VPN."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Recibe notificaciones si tu conexión se cae o cambia el estado de la VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Alertas de VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Restaura automáticamente una conexión VPN después de una interrupción."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Siempre activado"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Notificaciones de VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "La protección de red evita las filtraciones DNS a tu proveedor de servicios de internet redirigiendo las consultas de DNS a través del túnel VPN a nuestro propio resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "DNS seguro"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Configuración de VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "¿Abrir en otra aplicación?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Enviar un informe anónimo del sitio dañado nos ayuda a depurar estos problemas y mejorar la aplicación."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Buscar o introducir dirección"; diff --git a/DuckDuckGo/es.lproj/PrivacyDashboard.strings b/DuckDuckGo/es.lproj/PrivacyDashboard.strings deleted file mode 100644 index 45827fcbba..0000000000 --- a/DuckDuckGo/es.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "El sitio web es una de las principales redes de rastreadores"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.ejemplo.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Intentar de nuevo"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Los datos no están cifrados"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Informar de sitio web dañado"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "PRINCIPALES CULPABLES DE LAS REDES DE RASTREADORES"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Comprueba tu conexión a internet e inténtalo de nuevo."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Nivel incrementado"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etiqueta"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Vaya, no ha funcionado"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.ejemplo.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Grado de privacidad"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Botón"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRACTICAS DE PRIVACIDAD"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Reiniciar las estadísticas de la red de rastreadores"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "PRINCIPALES CULPABLES DE LAS REDES DE RASTREADORES"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Botón"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "CONEXIÓN CIFRADA"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.ejemplo.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Botón"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.ejemplo.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Sitios no protegidos"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Redes bloqueadas"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 rastreadores bloqueados"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Informar de sitio web dañado"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Prácticas de privacidad"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Principales culpables"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etiqueta"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "No se han encontrado prácticas de privacidad"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Sitios no protegidos"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etiqueta"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Buenas prácticas de privacidad"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Protección de privacidad del sitio web"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "PRINCIPALES CULPABLES DE LAS REDES DE RASTREADORES"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Protección de privacidad del sitio web"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "PRINCIPALES CULPABLES DE LAS REDES DE RASTREADORES"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Conexión cifrada"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Hemos desactivado temporalmente la protección de privacidad, ya que parece que está causando errores en el sitio."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Redes principales bloqueadas"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FRECUENCIA DE REDES DE RASTREADORES"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Otros 8 dominios cargados"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Conexión cifrada"; - diff --git a/DuckDuckGo/es.lproj/Settings.strings b/DuckDuckGo/es.lproj/Settings.strings index 98762d2786..90ce5a3ace 100644 --- a/DuckDuckGo/es.lproj/Settings.strings +++ b/DuckDuckGo/es.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Borrar datos automáticamente"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Más información en duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Ajustes"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Predeterminado"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "La privacidad, simplificada. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Administrar ventanas emergentes de cookies"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Protección de privacidad habilitada para todos los sitios"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Icono"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Más sobre DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sincronizar"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sincronización y copia de seguridad"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Navega de forma privada con nuestra aplicación para Mac "; diff --git a/DuckDuckGo/et.lproj/Feedback.strings b/DuckDuckGo/et.lproj/Feedback.strings index 55e2028121..fa4a347aff 100644 --- a/DuckDuckGo/et.lproj/Feedback.strings +++ b/DuckDuckGo/et.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Tänan, ei! Olen lõpetanud"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Sulge"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Jaga tagasisidet"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Milline veebisait on katki?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Teata mittetoimivast saidist"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Jaga tagasisidet"; diff --git a/DuckDuckGo/et.lproj/Localizable.strings b/DuckDuckGo/et.lproj/Localizable.strings index 3df8179e8c..f777ed9d3c 100644 --- a/DuckDuckGo/et.lproj/Localizable.strings +++ b/DuckDuckGo/et.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Redigeeri"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Olemasolevaid järjehoidjaid ei dubleerita."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Oled järjehoidjate sünkroonimise limiidi ületanud. Proovi mõned järjehoidjad kustutada. Kuni see pole lahendatud, ei varundata sinu järjehoidjaid."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Järjehoidjate sünkroonimine on peatatud"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Oled paroolide sünkroonimise limiidi ületanud. Proovi mõned paroolid kustutada. Kuni see pole lahendatud, ei varundata sinu paroole."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Paroolide sünkroonimine on peatatud"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Loe edasi"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Kas lisada kõik vahekaardid järjehoidjasse?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Impordi järjehoidjate HTML-fail teisest brauserist või ekspordi oma olemas olevad järjehoidjad."; -/* Broken Site Category */ -"brokensite.category.comments" = "Kommentaare ei laaditud"; - -/* Broken Site Category */ -"brokensite.category.content" = "Sisu puudub"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Küpsise hüpikakent ei hallatud"; - -/* Broken Site Category */ -"brokensite.category.images" = "Pilte ei laaditud"; - -/* Broken Site Category */ -"brokensite.category.links" = "Lingid või nupud ei töötanud"; - -/* Broken Site Category */ -"brokensite.category.login" = "Ma ei saa sisse logida"; - -/* Broken Site Category */ -"brokensite.category.other" = "Midagi muud"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Sait palus mul välja lülitada"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Brauser ei ühildu"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Videot ei esitatud"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Vali loendist oma probleem..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VALI KATEGOORIA"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Probleemi täpsem kirjeldamine võib meil aidata seda lahendada"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "KIRJELDAGE TOIMUNUT"; - /* No comment provided by engineer. */ "bucket: %@" = "andmekogum: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Eemaldage"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Kõik seadme lemmikud"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Vali, milliseid lemmikuid uuel vahekaardil kuvada, lähtudes nende päritolust."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Kuvamise seaded"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Ainult mobiililemmikud"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklaami ja hüpikakende blokeerimine"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Ava VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Halda"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Lülita teavitused sisse"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Lubab DuckDuckGol sulle teada anda, kui sinu ühendus katkeb või VPN-i olek muutub."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Saad teate, kui sinu ühendus katkeb või VPN-i olek muutub."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-i hoiatused"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "VPN-ühendus taastatakse pärast katkestust automaatselt."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Alati sisse lülitatud"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-i teavitused"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection takistab DNS-i lekkeid sinu internetiteenuse pakkujale, suunates DNS-päringud läbi VPN-tunneli meie enda aadressiteisendusteenusesse."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Turvaline DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-i seaded"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Avada teises rakenduses?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Anonüümse katkise saidi aruande esitamine aitab meil neid probleeme siluda ja rakendust täiustada."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Otsi või sisesta aadress"; diff --git a/DuckDuckGo/et.lproj/PrivacyDashboard.strings b/DuckDuckGo/et.lproj/PrivacyDashboard.strings deleted file mode 100644 index d5425f6da1..0000000000 --- a/DuckDuckGo/et.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Sait on peamine jälgimisvõrk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Proovi uuesti"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Andmed on krüptimata"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Teata mittetoimivast saidist"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "JÄLGIMISVÕRGU SUURIMAD RIKKUJAD"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Kontrolli oma internetiühendust ja proovi uuesti."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Täiustatud aste"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Silt"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Oih, see ei toiminud"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Privaatsusaste"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Nupp"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRIVAATUSUPRAKTIKAD"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Lähtesta jälgimisvõrkude statistika"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "JÄLGIMISVÕRGU SUURIMAD RIKKUJAD"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Nupp"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "KRÜPTITUD ÜHENDUS"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Nupp"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Kaitseta saidid"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Võrgud blokeeritud"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 jälgijat blokeeritud"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Teata mittetoimivast saidist"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Privaatsuspõhimõtted"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Suurimad rikkujad"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Privaatsuspõhimõtteid ei leitud"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Kaitseta saidid"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Head privaatsustavad"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Saidi privaatsuse kaitse"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "JÄLGIMISVÕRGU SUURIMAD RIKKUJAD"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Saidi privaatsuse kaitse"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "JÄLGIMISVÕRGU SUURIMAD RIKKUJAD"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Krüptitud ühendus"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Keelasime ajutiselt privaatsuse kaitse, kuna näib, et see kahjustab seda saiti."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Suured võrgud blokeeritud"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "JÄLGIJA VÕRGU SAGEDUS"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 muud domeeni laaditud"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Krüptitud ühendus"; - diff --git a/DuckDuckGo/et.lproj/Settings.strings b/DuckDuckGo/et.lproj/Settings.strings index 5cb1f1e951..14d97bb0ae 100644 --- a/DuckDuckGo/et.lproj/Settings.strings +++ b/DuckDuckGo/et.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Kustuta andmed automaatselt"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Lisateave: duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Seaded"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Vaikimisi"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Privaatsus, lihtsalt. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Halda küpsiste hüpikaknaid"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Privaatsuse kaitse on lubatud kõigil saitidel"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikoon"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Veel DuckDuckGo'lt"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sünkrooni"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sünkroonimine ja varundamine"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Sirvi privaatselt meie Maci rakendusega "; diff --git a/DuckDuckGo/fi.lproj/Feedback.strings b/DuckDuckGo/fi.lproj/Feedback.strings index aef969e8ca..c2142a90a6 100644 --- a/DuckDuckGo/fi.lproj/Feedback.strings +++ b/DuckDuckGo/fi.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Ei kiitos! Valmista"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Sulje"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Jaa palaute"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Mikä verkkosivusto on viallinen?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Ilmoita viallisesta sivustosta"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Jaa palaute"; diff --git a/DuckDuckGo/fi.lproj/Localizable.strings b/DuckDuckGo/fi.lproj/Localizable.strings index 2f5ff76343..626d914125 100644 --- a/DuckDuckGo/fi.lproj/Localizable.strings +++ b/DuckDuckGo/fi.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Muokkaa"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Olemassa olevia kirjanmerkkejä ei kopioida."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Olet ylittänyt kirjanmerkkien synkronointirajan. Yritä poistaa joitakin kirjanmerkkejä. Kirjanmerkkejäsi ei varmuuskopioida ennen kuin tämä ongelma on ratkaistu."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Kirjanmerkkien synkronointi on keskeytetty"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Olet ylittänyt salasanojen synkronointirajan. Yritä poistaa joitakin salasanoja. Salasanojasi ei varmuuskopioida ennen kuin tämä ongelma on ratkaistu."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Salasanojen synkronointi on keskeytetty"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Lue lisää"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Lisätäänkö kaikki välilehdet kirjanmerkkeihin?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Tuo HTML-kirjanmerkkitiedosto toisesta selaimesta tai vie olemassa olevat kirjanmerkkisi."; -/* Broken Site Category */ -"brokensite.category.comments" = "Kommentit eivät latautuneet"; - -/* Broken Site Category */ -"brokensite.category.content" = "Sisältöä puuttuu"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Evästeen ponnahdusikkunaa ei hallittu"; - -/* Broken Site Category */ -"brokensite.category.images" = "Kuvat eivät latautuneet"; - -/* Broken Site Category */ -"brokensite.category.links" = "Linkit tai painikkeet eivät toimi"; - -/* Broken Site Category */ -"brokensite.category.login" = "En pysty kirjautumaan sisään"; - -/* Broken Site Category */ -"brokensite.category.other" = "Jotain muuta"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Sivusto pyysi minua poistamaan käytöstä"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Selain ei ole yhteensopiva"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Videota ei toistettu"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Valitse ongelma luettelosta..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VALITSE KATEGORIA"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Lisätiedot saattavat auttaa meitä ratkaisemaan tämän ongelman"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "KUVAILE MITÄ TAPAHTUI"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Poista"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Kaikki laitteen suosikit"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Valitse alkuperän perusteella, mitkä suosikit näytetään uudessa välilehdessä."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Näytön asetukset"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Vain mobiilisuosikit"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Mainosten ja ponnahdusikkunoiden esto"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Avaa VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Hallitse"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Ota ilmoitukset käyttöön"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Anna DuckDuckGon ilmoittaa sinulle, jos yhteys katkeaa tai VPN:n tila muuttuu."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Saat ilmoituksen, jos yhteytesi katkeaa tai VPN:n tila muuttuu."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-ilmoitukset"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Palauta VPN-yhteys automaattisesti keskeytyksen jälkeen."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Aina käytössä"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-ilmoitukset"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection estää DNS-vuodot internetpalveluntarjoajallesi ohjaamalla DNS-pyynnöt VPN-verkon kautta omalle välittäjällemme."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Suojattu DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-asetukset"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Avataanko toisessa sovelluksessa?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Anonyymin raportin lähettäminen toimimattomasta sivustosta auttaa meitä korjaamaan nämä ongelmat ja parantamaan sovellusta."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Hae tai anna osoite"; diff --git a/DuckDuckGo/fi.lproj/PrivacyDashboard.strings b/DuckDuckGo/fi.lproj/PrivacyDashboard.strings deleted file mode 100644 index 2e02e8efdb..0000000000 --- a/DuckDuckGo/fi.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Sivusto on merkittävä seurantaverkosto"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.esimerkki.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Yritä uudelleen"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Tiedot ovat salaamattomia"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Ilmoita viallisesta sivustosta"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "PAHIMMAT SEURANTAVERKOSTOT"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Tarkista internetyhteytesi ja yritä uudelleen."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Parannettu arvosana"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Hups, ei toiminut"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.esimerkki.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Tietosuoja-arvosana"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Painike"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "TIETOSUOJAKÄYTÄNNÖT"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Nollaa seurantaverkostojen tilastot"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "PAHIMMAT SEURANTAVERKOSTOT"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Painike"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "SALATTU YHTEYS"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.esimerkki.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Painike"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.esimerkki.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Suojaamattomat sivustot"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Verkostoja estetty"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 seurainta estetty"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Ilmoita viallisesta sivustosta"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Tietosuojakäytännöt"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Pahimmat seuraajat"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Tietosuojakäytäntöjä ei löytynyt"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Suojaamattomat sivustot"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Hyvät tietosuojakäytännöt"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Sivuston yksityisyydensuoja"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "PAHIMMAT SEURANTAVERKOSTOT"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Sivuston yksityisyydensuoja"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "PAHIMMAT SEURANTAVERKOSTOT"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Salattu yhteys"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Yksityisyyden suoja on väliaikaisesti poistettu käytöstä, koska se näyttäisi rikkovan tämän sivun."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Tärkeitä verkostoja estetty"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "SEURANTAVERKOSTOJEN YLEISYYS"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 Muuta verkkotunnusta ladattu"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Salattu yhteys"; - diff --git a/DuckDuckGo/fi.lproj/Settings.strings b/DuckDuckGo/fi.lproj/Settings.strings index 11b81ffefe..f684826ce3 100644 --- a/DuckDuckGo/fi.lproj/Settings.strings +++ b/DuckDuckGo/fi.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Tyhjennä tiedot automaattisesti"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Lisätietoa: duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Asetukset"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Oletus"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Itsestään selvää tietosuojaa. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Evästeiden hallinnan ponnahdusikkunat"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Tietosuoja on käytössä kaikilla sivustoilla"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Kuvake"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Lisää DuckDuckGolta"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synkronoi"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synkronoi ja varmuuskopioi"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Selaa yksityisesti Mac-sovelluksellamme "; diff --git a/DuckDuckGo/fr.lproj/Feedback.strings b/DuckDuckGo/fr.lproj/Feedback.strings index e829b3329b..31997163c4 100644 --- a/DuckDuckGo/fr.lproj/Feedback.strings +++ b/DuckDuckGo/fr.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Non merci ! J'ai terminé"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Fermer"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Partagez vos commentaires"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Quel site Web pose problème ?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Signaler un problème de site"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Partagez vos commentaires"; diff --git a/DuckDuckGo/fr.lproj/Localizable.strings b/DuckDuckGo/fr.lproj/Localizable.strings index e29c841bb2..2b4df59dc5 100644 --- a/DuckDuckGo/fr.lproj/Localizable.strings +++ b/DuckDuckGo/fr.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Modifier"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Les signets existants ne seront pas dupliqués."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Vous avez dépassé le nombre maximal de signets à synchroniser. Veuillez en supprimer quelques-uns pour pouvoir sauvegarder vos signets."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "La synchronisation des signets est suspendue"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Vous avez dépassé le nombre maximal de mots de passe à synchroniser. Veuillez en supprimer quelques-uns pour pouvoir sauvegarder vos mots de passe."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "La synchronisation des mots de passe est suspendue"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "En savoir plus"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Ajouter tous les onglets aux signets ?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importez un fichier HTML de signets à partir d'un autre navigateur, ou exportez vos signets existants."; -/* Broken Site Category */ -"brokensite.category.comments" = "Les commentaires n'ont pas pu être chargés"; - -/* Broken Site Category */ -"brokensite.category.content" = "Le contenu est manquant"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "La fenêtre contextuelle des cookies n'a pas été gérée"; - -/* Broken Site Category */ -"brokensite.category.images" = "Les images n'ont pas pu être chargées"; - -/* Broken Site Category */ -"brokensite.category.links" = "Les liens ou les boutons ne fonctionnent pas"; - -/* Broken Site Category */ -"brokensite.category.login" = "Je ne peux pas me connecter"; - -/* Broken Site Category */ -"brokensite.category.other" = "Autre chose"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Le site m'a demandé de désactiver"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Le navigateur est incompatible"; - -/* Broken Site Category */ -"brokensite.category.videos" = "La vidéo n'a pas été lue"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Sélectionnez votre problème dans la liste..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SÉLECTIONNER UNE CATÉGORIE"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Le fait de partager plus d'informations peut nous aider à résoudre ce problème"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "DÉCRIVEZ CE QU'IL S'EST PASSÉ"; - /* No comment provided by engineer. */ "bucket: %@" = "case : %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Supprimer"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Tous les favoris de l'appareil"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Choisissez les favoris à afficher dans un nouvel onglet en fonction de leur origine."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Préférences d'affichage"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Favoris sur mobile uniquement"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Bloquer les publicités et les fenêtres contextuelles"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Ouvrir le VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Gérer"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Activer les notifications"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Autorisez DuckDuckGo à vous avertir si votre connexion échoue ou si l'état de votre VPN change."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Recevez une notification si votre connexion échoue ou si l'état de votre VPN change."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Alertes VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Restaurez automatiquement une connexion VPN après une interruption."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Toujours activé"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Notifications VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection empêche les fuites DNS vers votre fournisseur de services Internet en acheminant les requêtes DNS via le tunnel VPN vers notre propre résolveur."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "DNS sécurisé"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Paramètres VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Ouvrir dans une autre application ?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "La soumission d'un rapport anonyme pour signaler le mauvais fonctionnement du site nous aide à déboguer ces problèmes et à améliorer l'application."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Rechercher ou saisir une adresse"; diff --git a/DuckDuckGo/fr.lproj/PrivacyDashboard.strings b/DuckDuckGo/fr.lproj/PrivacyDashboard.strings deleted file mode 100644 index 59c30dea8b..0000000000 --- a/DuckDuckGo/fr.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Le site est un réseau majeur de traqueurs"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.exemple.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Réessayer"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Les données ne sont pas chiffrées"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Signaler un problème de site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "PRINCIPAUX RÉSEAUX DE TRAQUEURS"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Vérifiez votre connexion Internet, puis réessayez."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Degré amélioré"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Oups, cela n'a pas fonctionné"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.exemple.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Degré de confidentialité"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Bouton"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRATIQUES DE CONFIDENTIALITÉ"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Réinitialiser les statistiques du réseau de traqueurs"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "PRINCIPAUX RÉSEAUX DE TRAQUEURS"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Bouton"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "CONNEXION CHIFFRÉE"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.exemple.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Bouton"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.exemple.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Sites non protégés"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Réseaux bloqués"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 traqueurs bloqués"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Signaler un problème de site"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Pratiques de confidentialité"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Principaux coupables"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Aucune pratique de confidentialité trouvée"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Sites non protégés"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Bonnes pratiques de confidentialité"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Protection de la confidentialité du site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "PRINCIPAUX RÉSEAUX DE TRAQUEURS"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Protection de la confidentialité du site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "PRINCIPAUX RÉSEAUX DE TRAQUEURS"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Connexion chiffrée"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Nous avons temporairement désactivé la protection de la confidentialité car elle semble perturber ce site."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Réseaux majeurs bloqués"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FRÉQUENCE DU RÉSEAU DE TRAQUEURS"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 autres domaines chargés"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Connexion chiffrée"; - diff --git a/DuckDuckGo/fr.lproj/Settings.strings b/DuckDuckGo/fr.lproj/Settings.strings index b4e289ee89..2fc2c6d4d7 100644 --- a/DuckDuckGo/fr.lproj/Settings.strings +++ b/DuckDuckGo/fr.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Effacer automatiquement les données"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Pour en savoir plus, visitez duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Paramètres"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Défaut"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "La confidentialité, simplifiée. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Gérer les fenêtres contextuelles (cookies)"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "La protection de la confidentialité est activée pour tous les sites"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Icône"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Plus de la part de DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synchronisation"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synchronisation et sauvegarde"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Naviguez incognito avec notre application pour Mac "; diff --git a/DuckDuckGo/hr.lproj/Feedback.strings b/DuckDuckGo/hr.lproj/Feedback.strings index db97dd3363..0789000dcd 100644 --- a/DuckDuckGo/hr.lproj/Feedback.strings +++ b/DuckDuckGo/hr.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Ne, hvala! Završio/la sam"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Zatvori"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Podijeli povratne informacije"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Koje je web-mjesto neispravno?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Prijavi neispravno web-mjesto"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Podijeli povratne informacije"; diff --git a/DuckDuckGo/hr.lproj/Localizable.strings b/DuckDuckGo/hr.lproj/Localizable.strings index 47220b3f4c..442bb1fb10 100644 --- a/DuckDuckGo/hr.lproj/Localizable.strings +++ b/DuckDuckGo/hr.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Uredi"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Postojeće knjižne oznake neće se duplicirati."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Prekoračeno je ograničenje sinkronizacije oznaka. Pokušaj izbrisati neke oznake. Dok se to ne riješi, tvoje se oznake neće sigurnosno kopirati."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Sinkronizacija oznaka je pauzirana"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Prekoračeno je ograničenje sinkronizacije lozinki. Pokušaj izbrisati neke lozinke. Dok se to ne riješi, tvoje se lozinke neće sigurnosno kopirati."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Sinkronizacija lozinki je pauzirana"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Saznajte više"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "U redu"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Označi sve kartice?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Uvezite HTML datoteku oznaka iz drugog preglednika ili izvezite postojeće oznake."; -/* Broken Site Category */ -"brokensite.category.comments" = "Komentari se nisu učitali"; - -/* Broken Site Category */ -"brokensite.category.content" = "Nedostaje sadržaj"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Nisu određena pravila za skočne prozore kolačića"; - -/* Broken Site Category */ -"brokensite.category.images" = "Slike se nisu učitale"; - -/* Broken Site Category */ -"brokensite.category.links" = "Poveznice ili gumbi ne funkcioniraju"; - -/* Broken Site Category */ -"brokensite.category.login" = "Ne mogu se prijaviti"; - -/* Broken Site Category */ -"brokensite.category.other" = "Nešto drugo"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Web-mjesto zatražilo je da onemogućim"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Preglednik nije kompatibilan"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Videozapis se nije reproducirao"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Odaberi svoj problem s popisa..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "ODABERI KATEGORIJU"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Dijeljenje više pojedinosti može nam pomoći u rješavanju ovog problema"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "OPIŠITE ŠTO SE DOGODILO"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Ukloni"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Svi favoriti na uređaju"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Odaberi koje favorite želiš prikazati na novoj kartici na temelju njihove izvorne lokacije."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Željeni prikaz"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Samo favoriti na mobilnom uređaju"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokiranje oglasa i skočnih prozora"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Otvori VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Upravljanje"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Uključi obavijesti"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Dopusti DuckDuckGou da te obavijesti ako se tvoja veza prekine ili se status VPN-a promijeni."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Primaj obavijesti ako se tvoja veza prekine ili se status VPN-a promijeni."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN upozorenja"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Automatski obnovi VPN vezu nakon prekida."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Uvijek uključeno"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN obavijesti"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Mrežna zaštita sprječava curenje DNS-a tvom davatelju internetskih usluga usmjeravanjem DNS upita kroz VPN tunel na naš vlastiti rješavač."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Siguran DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN postavke"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otvori u drugoj aplikaciji?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Slanje anonimnog izvješća o neispravnom web-mjestu pomaže nam da ispravimo te probleme i poboljšamo aplikaciju."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Pretraži ili unesi adresu"; diff --git a/DuckDuckGo/hr.lproj/PrivacyDashboard.strings b/DuckDuckGo/hr.lproj/PrivacyDashboard.strings deleted file mode 100644 index f27dae05e4..0000000000 --- a/DuckDuckGo/hr.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Web-mjesto glavna je mreža za praćenje"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Pokušaj ponovo"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Podaci nisu šifrirani"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Prijavi neispravno web-mjesto"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "NAJVEĆI PREKRŠITELJI OD MREŽA ZA PRAĆENJE"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Provjeri svoju internetsku vezu i pokušaj ponovo."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Poboljšana ocjena"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "O ne, to nije uspjelo"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Ocjena zaštite privatnosti"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Gumb"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRAKSE ZAŠTITE PRIVATNOSTI"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Poništi mrežnu statistiku tragača"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "NAJČEŠĆI MREŽNI TRAGAČI"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Gumb"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŠIFRIRANA VEZA"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Gumb"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Nezaštićena web-mjesta"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Mreže blokirane"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Blokirano 8 tragača"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Prijavi neispravno web-mjesto"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Prakse zaštite privatnosti"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Najčešći tragači"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nisu pronađene prakse zaštite privatnosti"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Nezaštićena web-mjesta"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Dobre prakse zaštite privatnosti"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Zaštita privatnosti web-mjesta"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "NAJČEŠĆI MREŽNI TRAGAČI"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Zaštita privatnosti web-mjesta"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "NAJČEŠĆI MREŽNI TRAGAČI"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Šifrirana veza"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Privremeno smo onemogućili zaštitu privatnosti jer se čini da narušava ovo web-mjesto."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Glavne mreže su blokirane"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "UČESTALOST MREŽNIH TRAGAČA"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Učitano je još 8 domena"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Šifrirana veza"; - diff --git a/DuckDuckGo/hr.lproj/Settings.strings b/DuckDuckGo/hr.lproj/Settings.strings index 522994e162..5b4efa5072 100644 --- a/DuckDuckGo/hr.lproj/Settings.strings +++ b/DuckDuckGo/hr.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Automatsko brisanje podataka"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Više na duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Postavke"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Zadano"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Zaštita privatnosti, pojednostavljeno. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Upravljanje skočnim prozorima kolačića"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Zaštita privatnosti omogućena za sva web-mjesta"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Više od DuckDuckGoa"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sinkronizacija"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sinkronizacija i sigurnosno kopiranje"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Pretražujte privatno s našom aplikacijom za Mac "; diff --git a/DuckDuckGo/hu.lproj/Feedback.strings b/DuckDuckGo/hu.lproj/Feedback.strings index ad536e2dd3..47b8cd039d 100644 --- a/DuckDuckGo/hu.lproj/Feedback.strings +++ b/DuckDuckGo/hu.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nem, köszönöm. Kész vagyok."; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Bezárás"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Visszajelzés megosztása"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Melyik weboldal nem működik?”"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Hibás weboldal jelentése"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Visszajelzés megosztása"; diff --git a/DuckDuckGo/hu.lproj/Localizable.strings b/DuckDuckGo/hu.lproj/Localizable.strings index 340223040d..7fb08d0a2e 100644 --- a/DuckDuckGo/hu.lproj/Localizable.strings +++ b/DuckDuckGo/hu.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Szerkesztés"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "A meglévő könyvjelzők nem kettőződnek."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Túllépted a szinkronizálható könyvjelzők maximális számát. Próbálj törölni néhány könyvjelzőt. Amíg ezt nem sikerül megoldani, a könyvjelzőkről nem készül biztonsági másolat."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "A könyvjelzők szinkronizálása szünetel"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Túllépted a szinkronizálható jelszavak maximális számát. Próbálj törölni néhány jelszót. Amíg ezt nem sikerül megoldani, a jelszavakról nem készül biztonsági másolat."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "A jelszavak szinkronizálása szünetel"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "További részletek"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Az összes lapot könyvjelzőzöd?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Könyvjelzőket tartalmazó HTML-fájl importálása másik gépről, vagy a meglévő könyvjelzők exportálása."; -/* Broken Site Category */ -"brokensite.category.comments" = "A megjegyzések nem töltődtek be"; - -/* Broken Site Category */ -"brokensite.category.content" = "Hiányzik a tartalom"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "A felugró sütiablak nem lett kezelve"; - -/* Broken Site Category */ -"brokensite.category.images" = "A képek nem töltődtek be"; - -/* Broken Site Category */ -"brokensite.category.links" = "A hivatkozások vagy a gombok nem működnek"; - -/* Broken Site Category */ -"brokensite.category.login" = "Nem tudok bejelentkezni"; - -/* Broken Site Category */ -"brokensite.category.other" = "Valami más"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "A webhely kérte tőlem a letiltást"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "A böngésző nem kompatibilis"; - -/* Broken Site Category */ -"brokensite.category.videos" = "A videót nem játszotta le"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Válaszd ki a problémát a listából…"; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VÁLASSZ KATEGÓRIÁT"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "A további részletek segítségünkre lehetnek a probléma megoldásában"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "ESEMÉNY LEÍRÁSA"; - /* No comment provided by engineer. */ "bucket: %@" = "gyűjtő: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Eltávolítás"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Eszközön lévő minden kedvenc"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Válaszd ki, hogy az eredetük alapján melyik kedvencek jelenjenek meg az új lapon."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Megjelenítési beállítások"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Csak mobilon lévő kedvencek"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Hirdetések és felugró ablakok letiltása"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "VPN megnyitása"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Kezelés"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Értesítések bekapcsolása"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Engedélyezd, hogy a DuckDuckGo értesítsen, ha a kapcsolat megszakad vagy a VPN állapota megváltozik."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Kapj értesítést, ha a kapcsolat megszakad vagy a VPN állapota megváltozik."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-figyelmeztetések"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "A VPN-kapcsolat automatikus helyreállítása megszakítás után."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Mindig be van kapcsolva"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-értesítések"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "A hálózatvédelem megakadályozza a DNS-szivárgást az internetszolgáltatód felé azáltal, hogy a DNS-lekérdezéseket a VPN-alagúton keresztül a saját feloldónkhoz irányítja."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Biztonságos DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-beállítások"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Megnyitás másik alkalmazásban?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Egy hibás webhelyről szóló névtelen bejelentés segít a hibakeresésben és az alkalmazás fejlesztésében."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Keresés vagy cím megadása"; diff --git a/DuckDuckGo/hu.lproj/PrivacyDashboard.strings b/DuckDuckGo/hu.lproj/PrivacyDashboard.strings deleted file mode 100644 index 59afe9e620..0000000000 --- a/DuckDuckGo/hu.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "A weboldal egy nagy nyomkövető-hálózat"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Próbáld újra"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Az adatok nincsenek titkosítva"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Hibás weboldal jelentése"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "A NYOMKÖVETŐ-HÁLÓZAT LEGNAGYOBB BŰNELKÖVETŐI"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Ellenőrizd az internetkapcsolatodat, és próbáld újra."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Emelt fokozat"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Címke"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Hát, ez nem vált be."; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Adatvédelmi fokozat"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Gomb"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "ADATVÉDELMI GYAKORLATOK"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Nyomkövető hálózati statisztikák visszaállítása"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "A NYOMKÖVETŐ-HÁLÓZAT LEGNAGYOBB BŰNELKÖVETŐI"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Gomb"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "TITKOSÍTOTT KAPCSOLAT"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Gomb"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Védelem nélküli weboldalak"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Hálózatok blokkolva"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 nyomkövető blokkolva"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Hibás weboldal jelentése"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Adatvédelmi gyakorlatok"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Fő bűnösök"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Címke"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nem találhatók adatvédelmi gyakorlatok"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Védelem nélküli weboldalak"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Címke"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Jó adatvédelmi gyakorlatok"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "A weboldal adatvédelme"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "A NYOMKÖVETŐ-HÁLÓZAT LEGNAGYOBB BŰNELKÖVETŐI"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "A weboldal adatvédelme"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "A NYOMKÖVETŐ-HÁLÓZAT LEGNAGYOBB BŰNELKÖVETŐI"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Titkosított kapcsolat"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Ideiglenesen letiltottuk az adatvédelmet, mert úgy tűnik, hogy kárt okoz ezen a webhelyen."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Fő blokkolt hálózatok"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "NYOMKÖVETŐ HÁLÓZAT GYAKORISÁGA"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 másik tartomány betöltve"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Titkosított kapcsolat"; - diff --git a/DuckDuckGo/hu.lproj/Settings.strings b/DuckDuckGo/hu.lproj/Settings.strings index e3b5199113..b6f3f5cc23 100644 --- a/DuckDuckGo/hu.lproj/Settings.strings +++ b/DuckDuckGo/hu.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Adatok automatikus törlése"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "További információk a duckduckgo.com/about oldalon"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Beállítások"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Alapértelmezett"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Adatvédelem, leegyszerűsítve. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Felugró sütiablakok kezelése"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Adatvédelem engedélyezve minden weboldalhoz"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikon"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Továbbiak a DuckDuckGótól"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Szinkronizálás"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Szinkronizálás és biztonsági mentés"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Privát böngészés Maces alkalmazásunkkal "; diff --git a/DuckDuckGo/it.lproj/Feedback.strings b/DuckDuckGo/it.lproj/Feedback.strings index 57876c9c21..02bd8b8089 100644 --- a/DuckDuckGo/it.lproj/Feedback.strings +++ b/DuckDuckGo/it.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "No, grazie! Ho finito"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Chiudi"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Condividi feedback"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Quale sito web è danneggiato?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Segnala sito danneggiato"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Condividi feedback"; diff --git a/DuckDuckGo/it.lproj/Localizable.strings b/DuckDuckGo/it.lproj/Localizable.strings index 70109a5069..327788f150 100644 --- a/DuckDuckGo/it.lproj/Localizable.strings +++ b/DuckDuckGo/it.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Modifica"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "I segnalibri già presenti non saranno duplicati."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Hai superato il limite di sincronizzazione dei segnalibri. Prova a eliminarne qualcuno. Fino a quando il problema non verrà risolto, non sarà eseguito il backup dei tuoi segnalibri."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "La sincronizzazione dei segnalibri è in pausa"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Hai superato il limite di sincronizzazione delle password. Prova a eliminarne qualcuna. Fino a quando il problema non verrà risolto, non sarà eseguito il backup delle tue password."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "La sincronizzazione delle password è in pausa"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Ulteriori informazioni"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Creare un segnalibro con tutte le schede?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importa un file HTML di segnalibri da un altro browser o esporta i segnalibri esistenti."; -/* Broken Site Category */ -"brokensite.category.comments" = "I commenti non sono stati caricati"; - -/* Broken Site Category */ -"brokensite.category.content" = "Manca il contenuto"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Il pop-up dei cookie non era gestito"; - -/* Broken Site Category */ -"brokensite.category.images" = "Le immagini non sono state caricate"; - -/* Broken Site Category */ -"brokensite.category.links" = "I collegamenti o i pulsanti non funzionano"; - -/* Broken Site Category */ -"brokensite.category.login" = "Non riesco ad accedere"; - -/* Broken Site Category */ -"brokensite.category.other" = "Qualcos'altro"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Il sito mi ha chiesto di disabilitare"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Il browser non è compatibile"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Il video non è stato riprodotto"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Seleziona il problema dall'elenco..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SELEZIONA UNA CATEGORIA"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Condividere maggiori dettagli può aiutarci a risolvere questo problema"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "DESCRIVI COSA È SUCCESSO"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Rimuovi"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Tutti i preferiti sul dispositivo"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Scegli i preferiti da visualizzare in una nuova scheda in base alla loro origine."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Preferenze di visualizzazione"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Solo preferiti sul dispositivo mobile"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blocco di annunci e popup"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Apri VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Gestisci"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Attiva le notifiche"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Consenti a DuckDuckGo di inviarti notifiche se la tua connessione si interrompe o lo stato della VPN cambia."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Ricevi una notifica se la tua connessione si interrompe o lo stato della VPN cambia."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Avvisi VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Ripristina automaticamente una connessione VPN dopo un'interruzione."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Sempre attiva"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Notifiche VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection previene le fughe di DNS verso il tuo Internet Service Provider instradando le query DNS tramite tunneling VPN verso il nostro resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "DNS sicuro"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Impostazioni VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Aprire in un'altra app?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "L'invio di un rapporto sul sito non funzionante nell'anonimato ci consente di eseguire il debug di questi problemi e migliorare l'app."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Cerca o digita l'indirizzo"; diff --git a/DuckDuckGo/it.lproj/PrivacyDashboard.strings b/DuckDuckGo/it.lproj/PrivacyDashboard.strings deleted file mode 100644 index 9bee227e61..0000000000 --- a/DuckDuckGo/it.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Il sito è una rete di tracciamento principale"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Riprova"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "I dati non sono crittografati"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Segnala sito danneggiato"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "PRINCIPALI MINACCE DELLE RETI DI TRACCIAMENTO"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Verifica la tua connessione a Internet e riprova."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Punteggio migliorato"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etichetta"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Non ha funzionato"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Valutazione dell’affidabilità dei siti"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Pulsante"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRATICHE DI PRIVACY"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Reimposta le statistiche sulle reti dei sistemi di tracciamento"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "PRINCIPALI MINACCE DELLE RETI DI TRACCIAMENTO"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Pulsante"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "CONNESSIONE CRITTOGRAFATA"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Pulsante"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Siti non protetti"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Reti bloccate"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 sistemi di tracciamento bloccati"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Segnala sito danneggiato"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Pratiche di privacy"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Minacce principali"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etichetta"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Pratiche di privacy non trovate"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Siti non protetti"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etichetta"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Buone pratiche di privacy"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Tutela della privacy del sito"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "PRINCIPALI MINACCE DELLE RETI DI TRACCIAMENTO"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Tutela della privacy del sito"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "PRINCIPALI MINACCE DELLE RETI DI TRACCIAMENTO"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Connessione crittografata"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Abbiamo temporaneamente disabilitato la Tutela della privacy poiché sembra che stia interrompendo il funzionamento del sito."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Reti principali bloccate"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FREQUENZA RETI DEI SISTEMI DI TRACCIAMENTO"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 altri domini caricati"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Connessione crittografata"; - diff --git a/DuckDuckGo/it.lproj/Settings.strings b/DuckDuckGo/it.lproj/Settings.strings index c50d0f31a9..ca6f845e18 100644 --- a/DuckDuckGo/it.lproj/Settings.strings +++ b/DuckDuckGo/it.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Cancellazione automatica dei dati"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Scopri di più su duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Impostazioni"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Predefinito"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "La privacy semplificata. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Gestisci popup dei cookie"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Tutela della privacy attivata per tutti i siti"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Icona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Ulteriori informazioni su DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sincronizzazione"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sincronizzazione e backup"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Naviga in privato con la nostra app per Mac "; diff --git a/DuckDuckGo/lt.lproj/Feedback.strings b/DuckDuckGo/lt.lproj/Feedback.strings index 018d11813a..48c7338f83 100644 --- a/DuckDuckGo/lt.lproj/Feedback.strings +++ b/DuckDuckGo/lt.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Ne, ačiū! Pakaks"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Uždaryti"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Bendrinti atsiliepimą"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Kuri svetainė neveikia?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Pranešti apie sugadintą svetainę"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Bendrinti atsiliepimą"; diff --git a/DuckDuckGo/lt.lproj/Localizable.strings b/DuckDuckGo/lt.lproj/Localizable.strings index 3a1bb62474..716ca0ad61 100644 --- a/DuckDuckGo/lt.lproj/Localizable.strings +++ b/DuckDuckGo/lt.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Redaguoti"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Esamos žymės nebus kopijuojamos."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Viršijote žymių sinchronizavimo limitą. Pabandykite ištrinti kai kurias žymes. Kol ši problema nebus išspręsta, nebus kuriamos atsarginės jūsų žymių kopijos."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Žymių sinchronizavimas pristabdytas"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Viršijote slaptažodžių sinchronizavimo limitą. Pabandykite ištrinti kai kuriuos slaptažodžius. Kol ši problema nebus išspręsta, nebus kuriamos atsarginės jūsų slaptažodžių kopijos."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Slaptažodžių sinchronizavimas pristabdytas"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Sužinoti daugiau"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "GERAI"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Pažymėti visus skirtukus?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Eksportuoti HTML žymelių failą iš kitos naršyklės arba eksportuoti esamas žymeles."; -/* Broken Site Category */ -"brokensite.category.comments" = "Komentarai neįkelti"; - -/* Broken Site Category */ -"brokensite.category.content" = "Trūksta turinio"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Iškylantysis slapukų langas nebuvo sutvarkytas"; - -/* Broken Site Category */ -"brokensite.category.images" = "Vaizdai neįkelti"; - -/* Broken Site Category */ -"brokensite.category.links" = "Nuorodos ar mygtukai neveikia"; - -/* Broken Site Category */ -"brokensite.category.login" = "Negaliu prisijungti"; - -/* Broken Site Category */ -"brokensite.category.other" = "Kažkas kito"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Svetainė paprašė manęs išjungti"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Naršyklė nesuderinama"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Vaizdo įrašas nepaleistas"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Pasirinkite problemą iš sąrašo..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "PASIRINKITE KATEGORIJĄ"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Jei pasidalinsime daugiau informacijos, galime padėti išspręsti šią problemą"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "APRAŠYKITE, KAS ATSITIKO"; - /* No comment provided by engineer. */ "bucket: %@" = "talpykla: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Pašalinti"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Visi įrenginio mėgstamiausi"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Pasirinkite, kuriuos mėgstamiausius rodyti naujame skirtuke pagal jų vietą."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Ekrano nuostatos"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Tik mobiliojo mėgstamiausi"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklamų ir iššokančiųjų langų blokavimas"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Atviras VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Tvarkyti"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Įjungti pranešimus"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Leiskite „DuckDuckGo“ pranešti, jei nutrūksta ryšys arba pasikeičia VPN būsena."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Gaukite pranešimą, jei nutrūksta ryšys arba pasikeičia VPN būsena."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN įspėjimai"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Automatiškai atkurti VPN ryšį po nutrūkimo."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Visada įjungta"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN pranešimai"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Tinklo apsauga apsaugo nuo DNS nutekėjimo interneto paslaugų teikėjui, nukreipdama DNS užklausas per VPN tunelį į mūsų trūkumo šalinimo įrankį."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Saugi DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN nustatymai"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Atidaryti kitoje programoje?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Pateikdami anoniminę sugadintos svetainės ataskaitą, galime padėti išspręsti šias problemas ir patobulinti programėlę."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Ieškoti arba įvesti adresą"; diff --git a/DuckDuckGo/lt.lproj/PrivacyDashboard.strings b/DuckDuckGo/lt.lproj/PrivacyDashboard.strings deleted file mode 100644 index a539b39a57..0000000000 --- a/DuckDuckGo/lt.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Svetainė yra didelis stebėjimo priemonių tinklas"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Bandyti dar kartą"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Duomenys nėra šifruojami"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Pranešti apie sugadintą svetainę"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "DAŽNIAUSI PAŽEIDĖJAI SEKIKLIŲ TINKLE"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Patikrinkite savo interneto ryšį ir bandykite dar kartą."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Pagerintas laipsnis"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etiketė"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Oi, nepavyko"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Privatumo laipsnis"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Mygtukas"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRIVATUMO PRAKTIKA"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Iš naujo nustatykite stebėjimo priemonės tinklo statistiką"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "DAŽNIAUSI PAŽEIDĖJAI SEKIKLIŲ TINKLE"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Mygtukas"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŠIFRUOTAS RYŠYS"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Mygtukas"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Neapsaugotos svetainės"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Tinklai užblokuoti"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Užblokuotos 8 stebėjimo priemonės"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Pranešti apie sugadintą svetainę"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Privatumo praktika"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Populiariausi pažeidėjai"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etiketė"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nerasta jokių privatumo praktikų"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Neapsaugotos svetainės"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etiketė"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Gera privatumo praktika"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Svetainės privatumo apsauga"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "DAŽNIAUSI PAŽEIDĖJAI SEKIKLIŲ TINKLE"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Svetainės privatumo apsauga"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "DAŽNIAUSI PAŽEIDĖJAI SEKIKLIŲ TINKLE"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Šifruotas ryšys"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Laikinai išjungiame privatumo apsaugą, kadangi atrodo, kad ji trukdo šios svetainės veikimui."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Pagrindiniai tinklai užblokuoti"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "STEBĖJIMO PRIEMONĖS TINKLO DAŽNIS"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Įkelti 8 kiti domenai"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Šifruotas ryšys"; - diff --git a/DuckDuckGo/lt.lproj/Settings.strings b/DuckDuckGo/lt.lproj/Settings.strings index c5ccd972b3..4f67084ae3 100644 --- a/DuckDuckGo/lt.lproj/Settings.strings +++ b/DuckDuckGo/lt.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Automatiškai valyti duomenis"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Daugiau informacijos rasite duckdukgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Nustatymai"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Numatytoji"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Supaprastintas privatumas. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Valdyti slapukų iššokančiuosius langus"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Privatumo apsauga įjungta visose svetainėse"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "„DuckDuckGo“"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Piktograma"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Daugiau iš „DuckDuckGo“"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sinchronizuoti"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sinchronizuoti ir kurti atsarginę kopiją"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Naršykite privačiai su mūsų „Mac“ skirta programa "; diff --git a/DuckDuckGo/lv.lproj/Feedback.strings b/DuckDuckGo/lv.lproj/Feedback.strings index b497d9cf11..7054c522ab 100644 --- a/DuckDuckGo/lv.lproj/Feedback.strings +++ b/DuckDuckGo/lv.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nē, paldies! Es pabeidzu."; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Aizvērt"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Kopīgot atsauksmi"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Kura vietne ir bojāta?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Ziņot par bojātu vietni"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Kopīgot atsauksmi"; diff --git a/DuckDuckGo/lv.lproj/Localizable.strings b/DuckDuckGo/lv.lproj/Localizable.strings index 02d64bd141..09a7d5fa0a 100644 --- a/DuckDuckGo/lv.lproj/Localizable.strings +++ b/DuckDuckGo/lv.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Rediģēt"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Esošās grāmatzīmes netiks dublētas."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Tu esi pārsniedzis grāmatzīmju sinhronizācijas ierobežojumu. Mēģini izdzēst dažas grāmatzīmes. Kamēr šī problēma nebūs atrisināta, grāmatzīmes netiks dublētas."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Grāmatzīmju sinhronizācija ir apturēta"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Tu esi pārsniedzis paroļu sinhronizācijas ierobežojumu. Mēģini izdzēst dažas paroles. Kamēr šī problēma nebūs atrisināta, paroles netiks dublētas."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Paroļu sinhronizācija ir apturēta"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Uzzināt vairāk"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "Labi"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Vai pievienot grāmatzīmes visām cilnēm?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importē grāmatzīmju HTML failu no citas pārlūkprogrammas vai eksportē esošās grāmatzīmes."; -/* Broken Site Category */ -"brokensite.category.comments" = "Komentāri netika ielādēti"; - -/* Broken Site Category */ -"brokensite.category.content" = "Trūkst satura"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Sīkfailu uznirstošais logs netika pārvaldīts"; - -/* Broken Site Category */ -"brokensite.category.images" = "Attēli netika ielādēti"; - -/* Broken Site Category */ -"brokensite.category.links" = "Saites vai pogas nedarbojas"; - -/* Broken Site Category */ -"brokensite.category.login" = "Es nevaru pierakstīties"; - -/* Broken Site Category */ -"brokensite.category.other" = "Kaut kas cits"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Vietne pieprasīja atspējošanu"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Pārlūks nav saderīgs"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video netika demonstrēts"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Norādi problēmu sarakstā..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "ATLASĪT KATEGORIJU"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Sīkākas informācijas sniegšana var mums palīdzēt atrisināt šo problēmu"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "APRAKSTI NOTIKUŠO"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Noņemt"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Visu ierīču izlase"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Izvēlies, kurus izlases vienumus rādīt jaunā cilnē, pamatojoties uz to izcelsmi."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Displeja preferences"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Tikai mobilā izlase"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklāmu un uznirstošo logu bloķēšana"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Atvērt VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Pārvaldīt"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Ieslēgt paziņojumus"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Ļauj DuckDuckGo tev paziņot, ja savienojums pārtrūkst vai mainās VPN statuss."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Saņem paziņojumu, ja savienojums pārtrūkst vai mainās VPN statuss."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN brīdinājumi"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Automātiski atjaunot VPN savienojumu pēc pārtraukuma."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Vienmēr ieslēgts"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN paziņojumi"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Tīkla aizsardzība novērš DNS noplūdi uz tavu interneta pakalpojumu sniedzēju, novirzot DNS vaicājumus caur VPN tuneli uz mūsu pašu atrisinātāju."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Drošs DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN iestatījumi"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Vai atvērt citā lietotnē?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Ja iesniegsi anonīmu ziņojumu par bojātu vietni, mēs varēsim atkļūdot šīs problēmas un uzlabot lietotni."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Meklē vai ievadi adresi"; diff --git a/DuckDuckGo/lv.lproj/PrivacyDashboard.strings b/DuckDuckGo/lv.lproj/PrivacyDashboard.strings deleted file mode 100644 index 4a1ff6a91e..0000000000 --- a/DuckDuckGo/lv.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Vietne ir lielākais izsekotāju tīkls"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.piemērs.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Mēģini vēlreiz"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Dati nav šifrēti"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Ziņot par bojātu vietni"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "IZSEKOTĀJU TĪKLA LIELĀKIE PĀRKĀPĒJI"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Pārbaudi interneta savienojumu un mēģini vēlreiz."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Uzlabots līmenis"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etiķete"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Ak, vai, tas nepalīdzēja."; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.piemērs.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Privātuma līmenis"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Poga"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRIVĀTUMA PRAKSE"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Atiestatīt izsekotāju tīklu statistiku"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "IZSEKOTĀJU TĪKLA LIELĀKIE PĀRKĀPĒJI"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Poga"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŠIFRĒTS SAVIENOJUMS"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.piemērs.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Poga"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.piemērs.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Neaizsargātas vietnes"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Tīkli ir bloķēti"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 izsekotāji ir bloķēti"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Ziņot par bojātu vietni"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Privātuma prakse"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Lielākie pārkāpēji"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etiķete"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Privātuma prakse nav atrasta"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Neaizsargātas vietnes"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etiķete"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Laba privātuma prakse"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Vietnes privātuma aizsardzība"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "IZSEKOTĀJU TĪKLA LIELĀKIE PĀRKĀPĒJI"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Vietnes privātuma aizsardzība"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "IZSEKOTĀJU TĪKLA LIELĀKIE PĀRKĀPĒJI"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Šifrēts savienojums"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Mēs īslaicīgi atspējojām privātuma aizsardzību, jo šķiet, ka tā traucē šīs vietnes darbību."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Lielākie tīkli ir bloķēti"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "IZSEKOTĀJU TĪKLU ATRAŠANAS BIEŽUMS"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Ielādēti 8 citi domēni"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Šifrēts savienojums"; - diff --git a/DuckDuckGo/lv.lproj/Settings.strings b/DuckDuckGo/lv.lproj/Settings.strings index 1cb5ae932d..23f21ecfb1 100644 --- a/DuckDuckGo/lv.lproj/Settings.strings +++ b/DuckDuckGo/lv.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Automātiski notīrīt datus"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Vairāk vietnē duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Iestatījumi"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Noklusējums"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Privātums – vienkāršots. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Pārvaldīt sīkfailu uznirstošos logus"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Privātuma aizsardzība ir iespējota visām vietnēm"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Vairāk no DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sinhronizēt"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sinhronizācija un dublēšana"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Pārlūko privāti, izmantojot mūsu Mac lietotni "; diff --git a/DuckDuckGo/nb.lproj/Feedback.strings b/DuckDuckGo/nb.lproj/Feedback.strings index 20b8629dd4..ccff489698 100644 --- a/DuckDuckGo/nb.lproj/Feedback.strings +++ b/DuckDuckGo/nb.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nei takk. Jeg er ferdig."; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Lukk"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Del tilbakemelding"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Hvilket nettsted fungerer ikke?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Rapporter nettstedfeil"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Del tilbakemelding"; diff --git a/DuckDuckGo/nb.lproj/Localizable.strings b/DuckDuckGo/nb.lproj/Localizable.strings index 5ace68b096..29ea848984 100644 --- a/DuckDuckGo/nb.lproj/Localizable.strings +++ b/DuckDuckGo/nb.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Rediger"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Eksisterende bokmerker blir ikke duplisert."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Du har overskredet grensen for synkronisering av bokmerker. Prøv å slette noen bokmerker. Inntil dette er løst, blir ikke bokmerkene sikkerhetskopiert."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Synkronisering av bokmerker er satt på pause"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Du har overskredet grensen for synkronisering av passord. Prøv å slette noen passord. Inntil dette er løst, blir ikke passordene sikkerhetskopiert."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Synkronisering av passord er satt på pause"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Finn ut mer"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Legg til alle faner i bokmerker?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importer en HTML-fil med bokmerker fra en annen nettleser, eller eksporter dine eksisterende bokmerker."; -/* Broken Site Category */ -"brokensite.category.comments" = "Kommentarene ble ikke lastet inn"; - -/* Broken Site Category */ -"brokensite.category.content" = "Innhold mangler"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Popup-vinduet om informasjonskapsler ble ikke håndtert"; - -/* Broken Site Category */ -"brokensite.category.images" = "Bildene ble ikke lastet inn"; - -/* Broken Site Category */ -"brokensite.category.links" = "Lenker eller knapper fungerer ikke"; - -/* Broken Site Category */ -"brokensite.category.login" = "Jeg kan ikke logge inn"; - -/* Broken Site Category */ -"brokensite.category.other" = "Noe annet"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Nettstedet ba meg om å deaktivere"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Nettleseren er inkompatibel"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video ble ikke avspilt"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Velg problemet ditt fra listen …"; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VELG EN KATEGORI"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Hvis du gir oss flere detaljer, kan det hjelpe oss å løse dette problemet"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "BESKRIV HVA SOM SKJEDDE"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Fjern"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Alle favoritter på enheten"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Velg hvilke favoritter som skal vises på en ny fane basert på opprinnelsen deres."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Visningsinnstillinger"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Kun favoritter på mobil"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokkering av reklame og popups"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Åpne VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Administrere"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Slå på varslinger"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Tillat DuckDuckGo å varsle deg hvis tilkoblingen blir brutt eller VPN-statusen endret."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Få varsel hvis tilkoblingen blir brutt eller VPN-statusen endret."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-varsler"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Gjenopprett automatisk VPN-tilkobling etter avbrudd."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Alltid på"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-varsler"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Nettverksbeskyttelse forhindrer DNS-lekkasjer til internettleverandøren din ved å rute DNS-forespørsler gjennom VPN-tunnelen til vår egen resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Sikker DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-innstillinger"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Åpne i en annen app?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Når du sender inn en anonym rapport om nettstedfeil, hjelper det oss med å feilsøke disse problemene og forbedre appen."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Søk eller skriv inn adresse"; diff --git a/DuckDuckGo/nb.lproj/PrivacyDashboard.strings b/DuckDuckGo/nb.lproj/PrivacyDashboard.strings deleted file mode 100644 index a4c696de3d..0000000000 --- a/DuckDuckGo/nb.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Nettstedet er et stort sporingsnettverk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Prøv igjen"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Data er ikke kryptert"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Rapporter nettstedfeil"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "DE VERSTE SPORINGSNETTVERKENE"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Kontroller internettforbindelsen og prøv igjen."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Forsterket grad"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etikett"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Ops, det virket ikke"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Grad av personvern"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Knapp"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PERSONVERNPRAKSIS"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Nullstill tall for sporingsnettverk"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "DE VERSTE SPORINGSNETTVERKENE"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Knapp"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "KRYPTERT TILKOBLING"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Knapp"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Ubeskyttede nettsteder"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Nettverk blokkert"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 sporere blokkert"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Rapporter nettstedfeil"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Personvernpraksis"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Verste syndere"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etikett"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Ingen personvernpraksis funnet"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Ubeskyttede nettsteder"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etikett"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "God personvernpraksis"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Personvern for side"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "DE VERSTE SPORINGSNETTVERKENE"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Personvern for side"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "DE VERSTE SPORINGSNETTVERKENE"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Kryptert tilkobling"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Vi har midlertidig deaktivert personvernbeskyttelse, da det ser ut til å få nettstedet til å slutte å fungere."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Større nettverk blokkert"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FOREKOMST AV SPORINGSNETTVERK"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 andre domener lastet"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Kryptert tilkobling"; - diff --git a/DuckDuckGo/nb.lproj/Settings.strings b/DuckDuckGo/nb.lproj/Settings.strings index bbd8470e81..8c3750d5fb 100644 --- a/DuckDuckGo/nb.lproj/Settings.strings +++ b/DuckDuckGo/nb.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Slett data automatisk"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Mer på duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Innstillinger"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Standard"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Personvern gjort enkelt. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Administrer vinduer om informasjonskapsler"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Personvernbeskyttelse aktivert for alle nettsteder"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikon"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Mer fra DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synkr."; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synkronisering og sikkerhetskopiering"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Surf privat med vår app for Mac "; diff --git a/DuckDuckGo/nl.lproj/Feedback.strings b/DuckDuckGo/nl.lproj/Feedback.strings index 0aa9568bb8..343f7a90aa 100644 --- a/DuckDuckGo/nl.lproj/Feedback.strings +++ b/DuckDuckGo/nl.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nee, bedankt! Ik ben klaar"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Sluiten"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Feedback delen"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Welke website is defect?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Defecte website melden"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Feedback delen"; diff --git a/DuckDuckGo/nl.lproj/Localizable.strings b/DuckDuckGo/nl.lproj/Localizable.strings index 0a52970964..0d8da8c2e0 100644 --- a/DuckDuckGo/nl.lproj/Localizable.strings +++ b/DuckDuckGo/nl.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Bewerken"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Bestaande bladwijzers worden niet gedupliceerd."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Je hebt de synchronisatielimiet voor bladwijzers overschreden. Probeer enkele bladwijzers te verwijderen. Er wordt geen back-up van je bladwijzers gemaakt totdat dit probleem is opgelost."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Synchronisatie van bladwijzers is gepauzeerd"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Je hebt de synchronisatielimiet voor wachtwoorden overschreden. Probeer enkele wachtwoorden te verwijderen. Er wordt geen back-up van je wachtwoorden gemaakt totdat dit probleem is opgelost."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Synchronisatie van wachtwoorden is gepauzeerd"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Meer informatie"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Alle tabbladen toevoegen als bladwijzer?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importeer een HTML-bestand met bladwijzers uit een andere browser of exporteer je bestaande bladwijzers."; -/* Broken Site Category */ -"brokensite.category.comments" = "Opmerkingen zijn niet geladen"; - -/* Broken Site Category */ -"brokensite.category.content" = "Inhoud ontbreekt"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Cookie-pop-up is niet beheerd"; - -/* Broken Site Category */ -"brokensite.category.images" = "Afbeeldingen zijn niet geladen"; - -/* Broken Site Category */ -"brokensite.category.links" = "Links of knoppen werken niet"; - -/* Broken Site Category */ -"brokensite.category.login" = "Ik kan niet inloggen"; - -/* Broken Site Category */ -"brokensite.category.other" = "Iets anders"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "De site heeft me gevraagd om uit te schakelen"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "De browser is niet compatibel"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video werd niet afgespeeld"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Kies je probleem in de lijst ..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SELECTEER EEN CATEGORIE"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Deel meer details om ons te helpen dit probleem op te lossen"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "BESCHRIJF WAT ER IS GEBEURD"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Verwijderen"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Alle favorieten op apparaat"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Kies welke favorieten je op een nieuw tabblad wilt weergeven op basis van hun herkomst."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Weergavevoorkeuren"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Alleen mobiele favorieten"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Advertentie- en pop-upblokkering"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "VPN openen"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Beheren"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Meldingen inschakelen"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Ontvang meldingen van DuckDuckGo als je verbinding wegvalt of de VPN-status verandert."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Ontvang een melding als je verbinding wegvalt of de VPN-status verandert."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-meldingen"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Herstel een VPN-verbinding automatisch na onderbreking."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Altijd aan"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-meldingen"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Netwerkbeveiliging voorkomt DNS-lekken naar je internetprovider door DNS-aanvragen via de VPN-tunnel naar onze eigen resolver te routeren."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Veilige DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-instellingen"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Openen in een andere app?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Als je een anoniem rapport voor een defecte site indient, kunnen we deze problemen oplossen en de app verbeteren."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Zoek of voer een adres in"; diff --git a/DuckDuckGo/nl.lproj/PrivacyDashboard.strings b/DuckDuckGo/nl.lproj/PrivacyDashboard.strings deleted file mode 100644 index 8b2c5e1cbe..0000000000 --- a/DuckDuckGo/nl.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Site is groot trackernetwerk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.voorbeeld.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Probeer het opnieuw"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Gegevens zijn niet versleuteld"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Defecte website melden"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "TOPOVERTREDERS TRACKERNETWERK"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Controleer je internetverbinding en probeer het opnieuw."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Verbeterde klasse"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Er is iets fout gegaan"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.voorbeeld.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Privacyklasse"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Knop"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRIVACYPRAKTIJKEN"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Trackernetwerkstatistieken resetten"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "TOPOVERTREDERS TRACKERNETWERK"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Knop"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "GECODEERDE VERBINDING"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.voorbeeld.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Knop"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.voorbeeld.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Onbeschermde sites"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Netwerken geblokkeerd"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 trackers geblokkeerd"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Defecte website melden"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Privacypraktijken"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Topovertreders"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Geen privacypraktijken gevonden"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Onbeschermde sites"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Goede privacypraktijken"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Privacybescherming van de site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "TOPOVERTREDERS TRACKERNETWERK"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Privacybescherming van de site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "TOPOVERTREDERS TRACKERNETWERK"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Gecodeerde verbinding"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "We hebben privacybescherming tijdelijk uitgeschakeld, omdat het erop lijkt dat deze site hierdoor niet goed meer werkt."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Grote netwerken geblokkeerd"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "TRACKERNETWERKFREQUENTIE"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 andere domeinen geladen"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Gecodeerde verbinding"; - diff --git a/DuckDuckGo/nl.lproj/Settings.strings b/DuckDuckGo/nl.lproj/Settings.strings index 96c60260cb..99c32eca3e 100644 --- a/DuckDuckGo/nl.lproj/Settings.strings +++ b/DuckDuckGo/nl.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Gegevens automatisch wissen"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Meer informatie op duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Instellingen"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Standaard"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Privacy, vereenvoudigd. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Cookiepop-ups beheren"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Privacybescherming ingeschakeld voor alle sites"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Pictogram"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Meer over DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synchroniseren"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synchronisatie en back-up"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Browse privé met onze app voor Mac "; diff --git a/DuckDuckGo/pl.lproj/Feedback.strings b/DuckDuckGo/pl.lproj/Feedback.strings index 020beeb122..d1b3e2eebe 100644 --- a/DuckDuckGo/pl.lproj/Feedback.strings +++ b/DuckDuckGo/pl.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nie, dziękuję, skończyłem(-am)"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Zamknij"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Podziel się opinią"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Która witryna nie działa poprawnie?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Zgłoś uszkodzoną witrynę"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Podziel się opinią"; diff --git a/DuckDuckGo/pl.lproj/Localizable.strings b/DuckDuckGo/pl.lproj/Localizable.strings index a9577094e3..f283b6e277 100644 --- a/DuckDuckGo/pl.lproj/Localizable.strings +++ b/DuckDuckGo/pl.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Edytuj"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Istniejące zakładki nie zostaną zduplikowane."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Przekroczono limit synchronizacji zakładek. Spróbuj usunąć niektóre zakładki. Dopóki ten problem nie zostanie rozwiązany, nie będzie tworzona kopia zapasowa zakładek."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Synchronizacja zakładek jest wstrzymana"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Przekroczono limit synchronizacji haseł. Spróbuj usunąć niektóre hasła. Dopóki ten problem nie zostanie rozwiązany, nie będzie tworzona kopia zapasowa haseł."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Synchronizacja haseł jest wstrzymana"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Dowiedz się więcej"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Dodać wszystkie karty do zakładek?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Zaimportuj plik HTML z zakładkami z innej przeglądarki lub wyeksportuj istniejące zakładki."; -/* Broken Site Category */ -"brokensite.category.comments" = "Nie wczytano komentarzy"; - -/* Broken Site Category */ -"brokensite.category.content" = "Brakuje treści"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Nie zarządzano wyskakującymi okienkami plików cookie"; - -/* Broken Site Category */ -"brokensite.category.images" = "Obrazy nie zostały wczytane"; - -/* Broken Site Category */ -"brokensite.category.links" = "Łącza lub przyciski nie działają"; - -/* Broken Site Category */ -"brokensite.category.login" = "Nie mogę się zalogować"; - -/* Broken Site Category */ -"brokensite.category.other" = "Coś innego"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Witryna poprosiła mnie o wyłączenie"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Przeglądarka jest niezgodna"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Film nie został odtworzony"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Wybierz problem z listy..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "WYBIERZ KATEGORIĘ"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Udostępnienie szczegółowych informacji może pomóc nam rozwiązać ten problem"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "OPISZ, CO SIĘ STAŁO"; - /* No comment provided by engineer. */ "bucket: %@" = "Zbiór: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Usuń"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Ulubione na urządzeniu"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Wybierz, które ulubione elementy mają być wyświetlane na nowej karcie w oparciu o ich źródło."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Preferencje wyświetlania"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Tylko ulubione z urządzeń mobilnych"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokowanie reklam i wyskakujących okienek"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Otwórz VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Zarządzaj"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Włącz powiadomienia"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Zezwól na powiadomienia DuckDuckGo o zerwaniu połączenia lub zmianie stanu VPN."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Otrzymuj powiadomienia o zerwaniu połączenia lub zmianie stanu VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Alerty VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Automatycznie przywracaj połączenie VPN po jego przerwaniu."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Zawsze włączone"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Powiadomienia VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Ochrona sieci zapobiega wyciekom DNS do dostawcy usług internetowych poprzez kierowanie zapytań DNS przez tunel VPN do naszego mechanizmu rozpoznawania nazw."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Bezpieczny DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Ustawienia VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otworzyć w innej aplikacji?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Przesłanie anonimowego raportu o uszkodzonej witrynie pomaga nam debugować te problemy i ulepszać aplikację."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Wyszukaj lub wprowadź adres"; diff --git a/DuckDuckGo/pl.lproj/PrivacyDashboard.strings b/DuckDuckGo/pl.lproj/PrivacyDashboard.strings deleted file mode 100644 index 356608dbb3..0000000000 --- a/DuckDuckGo/pl.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Strona stanowi główną sieć skryptów śledzących"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.domena.pl"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Spróbuj ponownie"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Dane są niezaszyfrowane"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Zgłoś uszkodzoną witrynę"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "SIECI SKRYPTÓW ŚLEDZĄCYCH – NAJWIĘKSI SPRAWCY"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Sprawdź połączenie internetowe i spróbuj ponownie."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Podwyższony poziom"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etykieta"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Niestety to nie zadziałało"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.domena.pl"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Poziom prywatności"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Przycisk"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "POLITYKA PRYWATNOŚCI"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Zresetuj statystyki sieciowe modułu śledzącego"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "SIECI SKRYPTÓW ŚLEDZĄCYCH – NAJWIĘKSI SPRAWCY"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Przycisk"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "POŁĄCZENIE ZASZYFROWANE"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.domena.pl"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Przycisk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.domena.pl"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Niezabezpieczone witryny"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Zablokowano sieci"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Zablokowano 8 skryptów śledzących"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Zgłoś uszkodzoną witrynę"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Polityka prywatności"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Najwięksi sprawcy"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etykieta"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nie znaleziono polityk prywatności"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Niezabezpieczone witryny"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etykieta"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Dobra polityka prywatności"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Ochrona prywatności witryny"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "SIECI SKRYPTÓW ŚLEDZĄCYCH – NAJWIĘKSI SPRAWCY"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Ochrona prywatności witryny"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "SIECI SKRYPTÓW ŚLEDZĄCYCH – NAJWIĘKSI SPRAWCY"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Połączenie zaszyfrowane"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Tymczasowo wyłączyliśmy ochronę prywatności, ponieważ wygląda na to, że zniekształca tę witrynę."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Zablokowane główne sieci"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "CZĘSTOTLIWOŚĆ SIECI SKRYPTÓW ŚLEDZĄCYCH"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Załadowano 8 innych domen"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Połączenie zaszyfrowane"; - diff --git a/DuckDuckGo/pl.lproj/Settings.strings b/DuckDuckGo/pl.lproj/Settings.strings index 0ce1fa9ac0..4afbe423ff 100644 --- a/DuckDuckGo/pl.lproj/Settings.strings +++ b/DuckDuckGo/pl.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Automatyczne czyszczenie danych"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Więcej informacji: duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Ustawienia"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Domyślny"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Prywatność – jeszcze prostsza. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Zarządzaj okienkami z prośbą o zgodę"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Ochrona prywatności włączona dla wszystkich witryn"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Więcej możliwości DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synchronizacja"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synchronizacja i kopia zapasowa"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Przeglądaj prywatnie za pomocą aplikacji dla komputerów Mac "; diff --git a/DuckDuckGo/pt.lproj/Feedback.strings b/DuckDuckGo/pt.lproj/Feedback.strings index ec88efdd05..5fe33ac432 100644 --- a/DuckDuckGo/pt.lproj/Feedback.strings +++ b/DuckDuckGo/pt.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Não, obrigado! Terminei"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Fechar"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Partilhar comentários"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Que site está com falhas?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Denunciar site danificado"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Partilhar comentários"; diff --git a/DuckDuckGo/pt.lproj/Localizable.strings b/DuckDuckGo/pt.lproj/Localizable.strings index 929e1ca91a..8aa6300773 100644 --- a/DuckDuckGo/pt.lproj/Localizable.strings +++ b/DuckDuckGo/pt.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Editar"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Os marcadores existentes não serão duplicados."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Excedeste o limite de sincronização de favoritos. Experimenta eliminar alguns favoritos. Não é possível fazer uma cópia de segurança dos favoritos até este problema estar resolvido."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "A sincronização de favoritos está em pausa"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Excedeste o limite de sincronização de palavras-passe. Experimenta eliminar algumas palavras-passe. Não é possível fazer uma cópia de segurança das palavras-passe até este problema estar resolvido."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "A sincronização de palavras-passe está em pausa"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Saiba mais"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Marcar todos os separadores?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importe um ficheiro HTML de marcadores de outro navegador ou exporte os seus marcadores existentes."; -/* Broken Site Category */ -"brokensite.category.comments" = "Os comentários não carregaram"; - -/* Broken Site Category */ -"brokensite.category.content" = "Falta conteúdo"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Não foi feita a gestão do pop-up de cookies"; - -/* Broken Site Category */ -"brokensite.category.images" = "As imagens não carregaram"; - -/* Broken Site Category */ -"brokensite.category.links" = "As ligações ou os botões não funcionam"; - -/* Broken Site Category */ -"brokensite.category.login" = "Não consigo iniciar sessão"; - -/* Broken Site Category */ -"brokensite.category.other" = "Outra coisa"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "O site pediu-me para desativar"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "O navegador é incompatível"; - -/* Broken Site Category */ -"brokensite.category.videos" = "O vídeo não foi reproduzido"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Escolhe o teu problema na lista…"; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SELECIONA UMA CATEGORIA"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Indica mais detalhes para nos ajudares a resolver este problema"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "DESCREVER O QUE ACONTECEU"; - /* No comment provided by engineer. */ "bucket: %@" = "grupo: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Remover"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Todos os favoritos no dispositivo"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Escolhe os favoritos a apresentar num novo separador com base na respetiva origem."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Preferências de apresentação"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Apenas favoritos em dispositivos móveis"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Bloquear anúncios e pop-ups"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Abrir VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Gerir"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Ativar as notificações"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Permite que o DuckDuckGo te notifique se a tua ligação cair ou o estado da VPN mudar."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Recebe uma notificação se a tua ligação cair ou o estado da VPN mudar."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Alertas de VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Restaurar automaticamente uma ligação VPN após a interrupção."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Sempre ligada"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Notificações da VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "A Network Protection impede fugas de DNS para o teu fornecedor de serviços de internet ao encaminhar as consultas de DNS através do túnel da VPN para o nosso resolvedor."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "DNS seguro"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Definições da VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Abrir noutra aplicação?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "O envio de um relatório anónimo de site com problemas ajuda-nos a depurar e a melhorar a aplicação."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Pesquisar ou inserir endereço"; diff --git a/DuckDuckGo/pt.lproj/PrivacyDashboard.strings b/DuckDuckGo/pt.lproj/PrivacyDashboard.strings deleted file mode 100644 index 9508ef3c61..0000000000 --- a/DuckDuckGo/pt.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "O site é uma grande rede de rastreadores"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.exemplo.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Tentar novamente"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Os dados não estão encriptados"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Denunciar site danificado"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "PRINCIPAIS INFRATORES DA REDE DE RASTREAMENTO"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Verifique a sua ligação e tente de novo."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Grau melhorado"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Rótulo"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Oh, não funcionou"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.exemplo.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Grau de privacidade"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Botão"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRÁTICAS DE PRIVACIDADE"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Repor as estatísticas da rede de rastreamento"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "PRINCIPAIS INFRATORES DA REDE DE RASTREAMENTO"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Botão"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "LIGAÇÃO ENCRIPTADA"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.exemplo.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Botão"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.exemplo.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Sites desprotegidos"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Redes bloqueadas"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 rastreadores bloqueados"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Denunciar site danificado"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Práticas de privacidade"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Principais infratores"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Rótulo"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Não foram encontradas práticas de privacidade"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Sites desprotegidos"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Rótulo"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Boas práticas de privacidade"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Proteção de Privacidade do Site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "PRINCIPAIS INFRATORES DA REDE DE RASTREAMENTO"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Proteção de Privacidade do Site"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "PRINCIPAIS INFRATORES DA REDE DE RASTREAMENTO"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Ligação encriptada"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Desativámos temporariamente a Proteção de Privacidade, pois parece estar a bloquear este site."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Redes principais bloqueadas"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FREQUÊNCIA DE REDE DE RASTREAMENTO"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 domínios adicionais carregados"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Ligação encriptada"; - diff --git a/DuckDuckGo/pt.lproj/Settings.strings b/DuckDuckGo/pt.lproj/Settings.strings index e7f04d47c8..f136fee8f4 100644 --- a/DuckDuckGo/pt.lproj/Settings.strings +++ b/DuckDuckGo/pt.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Limpar os dados automaticamente"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Mais em duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Definições"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Predefinido"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Privacidade, simplificada. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Gerir pop-ups de cookies"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Proteção de Privacidade ativa para todos os sites"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ícone"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Mais da DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sincronizar"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sincronização e cópia de segurança"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Navegue em privado com a nossa aplicação para Mac "; diff --git a/DuckDuckGo/ro.lproj/Feedback.strings b/DuckDuckGo/ro.lproj/Feedback.strings index c2715d7fcf..a0d66fdd73 100644 --- a/DuckDuckGo/ro.lproj/Feedback.strings +++ b/DuckDuckGo/ro.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nu mulțumesc! Am terminat"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Închidere"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Partajează feedback"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Ce site este defect?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Raportați site-ul defect"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Partajează feedback"; diff --git a/DuckDuckGo/ro.lproj/Localizable.strings b/DuckDuckGo/ro.lproj/Localizable.strings index 0064a3f2b3..2dcbdc6a07 100644 --- a/DuckDuckGo/ro.lproj/Localizable.strings +++ b/DuckDuckGo/ro.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Editați"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Marcajele existente nu vor fi duplicate."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Ai depășit limita de sincronizare a marcajelor. Încearcă să ștergi unele marcaje. Până la rezolvarea acestei probleme, nu se va efectua copierea de rezervă pentru marcajele tale."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Sincronizarea marcajelor este întreruptă"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Ai depășit limita de sincronizare a parolelor. Încearcă să ștergi câteva parole. Până la rezolvarea acestei probleme, nu se va efectua copierea de rezervă pentru parolele tale."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Sincronizarea parolelor este întreruptă"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Află mai multe"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Marchezi toate filele?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importă un fișier HTML sau marcaje dintr-un alt browser sau exportă marcajele tale existente."; -/* Broken Site Category */ -"brokensite.category.comments" = "Comentariile nu s-au încărcat"; - -/* Broken Site Category */ -"brokensite.category.content" = "Conținutul lipsește"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Fereastra pop-up privind modulele cookie nu a fost gestionată"; - -/* Broken Site Category */ -"brokensite.category.images" = "Imaginile nu s-au încărcat"; - -/* Broken Site Category */ -"brokensite.category.links" = "Linkurile sau butoanele nu funcționează"; - -/* Broken Site Category */ -"brokensite.category.login" = "Nu mă pot conecta"; - -/* Broken Site Category */ -"brokensite.category.other" = "Altceva"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Site-ul mi-a cerut să dezactivez"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Browserul este incompatibil"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Videoclipul nu s-a redat"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Alegeți problema ta din listă..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "SELECTEAZĂ O CATEGORIE"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Comunicarea mai multor detalii ne poate ajuta să rezolvăm această problemă"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "DESCRIE CE S-A INTAMPLAT"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Elimină"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Toate favoritele de pe dispozitiv"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Alege ce favorite să afișezi într-o filă nouă în funcție de originea lor."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Preferințe de afișare"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Doar favoritele pentru mobil"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blocarea anunțurilor și ferestrelor pop-up"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Deschide VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Gestionează"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Activează Notificările"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Permite ca DuckDuckGo să te înștiințeze dacă conexiunea ta devine mai slabă sau dacă starea VPN-ului se schimbă."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Primește o notificare dacă conexiunea ta devine mai slabă sau dacă starea VPN-ului se schimbă."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Alerte VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Restaurează automat o conexiune VPN după întrerupere."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Întotdeauna activat"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Notificări VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection previne scurgerile DNS către furnizorul tău de servicii de internet prin direcționarea interogărilor DNS prin tunelul VPN către propriul nostru resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "DNS securizat"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Setări VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Deschizi în altă aplicație?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Trimiterea unui raport anonim al unui site care nu funcționează ne ajută să corectăm aceste probleme și să îmbunătățim aplicația."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Caută sau introdu adresa"; diff --git a/DuckDuckGo/ro.lproj/PrivacyDashboard.strings b/DuckDuckGo/ro.lproj/PrivacyDashboard.strings deleted file mode 100644 index 740dd3c4ee..0000000000 --- a/DuckDuckGo/ro.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Site-ul este o rețea mare de instrumente de urmărire"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Încearcă din nou"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Datele sunt necriptate"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Raportați site-ul defect"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "CEI MAI MARI INFRACTORI ÎN CADRUL REȚELELOR DE COOKIE-URI DE URMĂRIRE"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Verifică conexiunea la internet și încearcă din nou."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Grad mărit"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Of, nu a funcționat"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Grad de confidențialitate"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Buton"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRACTICI DE CONFIDENȚIALITATE"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Resetează statisticile despre rețelele de urmărire"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "CEI MAI MARI INFRACTORI ÎN CADRUL REȚELELOR DE COOKIE-URI DE URMĂRIRE"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Buton"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "CONEXIUNE CRIPTATĂ"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Buton"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Site-uri neprotejate"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Rețele blocate"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 instrumente de urmărire blocate"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Raportați site-ul defect"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Practici privind confidențialitatea"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Principalii urmăritori"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nu s-au găsit practici privind confidențialitatea"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Site-uri neprotejate"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Bune practici privind confidențialitatea"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Protecția confidențialității site-ului"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "CEI MAI MARI INFRACTORI ÎN CADRUL REȚELELOR DE COOKIE-URI DE URMĂRIRE"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Protecția confidențialității site-ului"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "CEI MAI MARI INFRACTORI ÎN CADRUL REȚELELOR DE COOKIE-URI DE URMĂRIRE"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Conexiune criptată"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Am dezactivat temporar protecția confidențialității, deoarece pare să spargă acest site."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Rețele principale blocate"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FRECVENȚA REȚELELOR URMĂRITOARE"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 alte domenii încărcate"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Conexiune criptată"; - diff --git a/DuckDuckGo/ro.lproj/Settings.strings b/DuckDuckGo/ro.lproj/Settings.strings index c2b63de768..4404ec5c0d 100644 --- a/DuckDuckGo/ro.lproj/Settings.strings +++ b/DuckDuckGo/ro.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Șterge automat datele"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Aflați mai multe la duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Setări"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Implicită"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Despre confidențialitate, pe scurt. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Gestionare pop-up-uri pentru module cookie"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Protecția confidențialității este activată pentru toate site-urile"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Pictogramă"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Mai multe de la DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sincronizare"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sincronizare și copiere de rezervă"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Răsfoiește în mod privat, cu aplicația noastră pentru Mac "; diff --git a/DuckDuckGo/ru.lproj/Feedback.strings b/DuckDuckGo/ru.lproj/Feedback.strings index b34300f93c..7b1bd5e71e 100644 --- a/DuckDuckGo/ru.lproj/Feedback.strings +++ b/DuckDuckGo/ru.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Нет, спасибо. У меня пока всё"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Закрыть"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Оставьте нам отзыв"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "На каком сайте возникает проблема?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Сообщить о неработающем сайте"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Оставьте нам отзыв"; diff --git a/DuckDuckGo/ru.lproj/Localizable.strings b/DuckDuckGo/ru.lproj/Localizable.strings index 4b79bf5001..c36a7b98e5 100644 --- a/DuckDuckGo/ru.lproj/Localizable.strings +++ b/DuckDuckGo/ru.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Редактировать"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Существующие закладки дублироваться не будут."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Вы превысили лимит синхронизации закладок. Попробуйте удалить некоторые из них. Пока вы не устраните эту проблему, резервная копия закладок создаваться не будет."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Синхронизация закладок приостановлена"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Вы превысили лимит синхронизации паролей. Попробуйте удалить некоторые из них. Пока вы не устраните эту проблему, резервная копия закладок создаваться не будет."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Синхронизация паролей приостановлена"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Узнать больше"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "Хорошо"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Добавить все вкладки в закладки?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Импортировать файл HTML с закладками из другого браузера или экспортировать свои закладки."; -/* Broken Site Category */ -"brokensite.category.comments" = "Не загружаются комментарии"; - -/* Broken Site Category */ -"brokensite.category.content" = "Отсутствует содержимое"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Не выбраны настройки во всплывающем окне куки-файлов"; - -/* Broken Site Category */ -"brokensite.category.images" = "Не загружаются изображения"; - -/* Broken Site Category */ -"brokensite.category.links" = "Не работают ссылки или кнопки"; - -/* Broken Site Category */ -"brokensite.category.login" = "Не удается войти"; - -/* Broken Site Category */ -"brokensite.category.other" = "Что-то другое"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Сайт попросил меня отключить"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Несовместимость браузера"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Не воспроизводится видео"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Выберите проблему из списка..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "ВЫБЕРИТЕ КАТЕГОРИЮ"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Более подробная информация поможет нам быстрее найти решение"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "ОПИШИТЕ, ЧТО СЛУЧИЛОСЬ"; - /* No comment provided by engineer. */ "bucket: %@" = "контейнер: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Удалить"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Избранное со всех устройств"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Выберите, какие избранные объекты показывать в новой вкладке (в зависимости от места их нахождения)."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Настройки отображения"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Только избранное с телефона"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Блокировка рекламы и всплывающих окон"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Открыть настройки VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Настроить"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Включить уведомления"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Разрешить DuckDuckGo уведомлять вас о разрыве соединения или изменении состояния VPN."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "DuckDuckGo оповестит вас о разрыве соединения или изменении состояния VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Оповещения о VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Автоматически восстанавливать VPN-соединение в случае его прерывания."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Всегда включено"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Уведомления о VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Защита сети предотвращает утечку данных через DNS вашему интернет-провайдеру, направляя DNS-запросы через VPN-туннель к нашему собственному сопоставителю."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Безопасный DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Настройки VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Открыть в другом приложении?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Отправка анонимной жалобы на неработающий сайт помогает нам решить эти проблемы и улучшить приложение."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Введите поисковый запрос или адрес сайта"; diff --git a/DuckDuckGo/ru.lproj/PrivacyDashboard.strings b/DuckDuckGo/ru.lproj/PrivacyDashboard.strings deleted file mode 100644 index 75181675d4..0000000000 --- a/DuckDuckGo/ru.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Этот сайт — крупная сеть трекеров"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Повторите попытку"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Данные не шифруются"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Сообщить о неработающем сайте"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "ОСНОВНЫЕ СЕТИ ТРЕКЕРОВ, ПРЕДСТАВЛЯЮЩИЕ УГРОЗУ КОНФИДЕНЦИАЛЬНОСТИ"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Проверьте подключение к интернету и повторите попытку."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Повышенный рейтинг конфиденциальности"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Метка"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Ой, не сработало"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Рейтинг конфиденциальности"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Кнопка"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "УРОВЕНЬ КОНФИДЕНЦИАЛЬНОСТИ"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Сброс статистики сетей трекеров"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "ОСНОВНЫЕ СЕТИ ТРЕКЕРОВ, ПРЕДСТАВЛЯЮЩИЕ УГРОЗУ КОНФИДЕНЦИАЛЬНОСТИ"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Кнопка"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ЗАШИФРОВАННОЕ СОЕДИНЕНИЕ"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Кнопка"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Незащищенные сайты"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Заблокированы сети трекеров"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Заблокировано 8 трекеров"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Сообщить о неработающем сайте"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Уровень конфиденциальности"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Главные шпионы"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Метка"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Уровень конфиденциальности не определен"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Незащищенные сайты"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Метка"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Высокий уровень конфиденциальности"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Защита конфиденциальности сайта"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "ОСНОВНЫЕ СЕТИ ТРЕКЕРОВ, ПРЕДСТАВЛЯЮЩИЕ УГРОЗУ КОНФИДЕНЦИАЛЬНОСТИ"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Защита конфиденциальности сайта"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "ОСНОВНЫЕ СЕТИ ТРЕКЕРОВ, ПРЕДСТАВЛЯЮЩИЕ УГРОЗУ КОНФИДЕНЦИАЛЬНОСТИ"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Зашифрованное соединение"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Мы временно отключили функцию защиты конфиденциальности, так как она мешала работе сайта."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Заблокированы крупные сети трекеров"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "ЧАСТОТА БЛОКИРОВАНИЯ"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Загружено еще 8 доменов"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Зашифрованное соединение"; - diff --git a/DuckDuckGo/ru.lproj/Settings.strings b/DuckDuckGo/ru.lproj/Settings.strings index 7f84888c62..6b54a2d6c0 100644 --- a/DuckDuckGo/ru.lproj/Settings.strings +++ b/DuckDuckGo/ru.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Автоудаление данных"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Подробнее на https://duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Настройки"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "По умолчанию"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Максимум конфиденциальности, минимум усилий. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Управление окнами выбора куки-файлов"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Защита конфиденциальности включена на всех сайтах"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Значок"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "DuckDuckGo также предлагает..."; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Синхронизация"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Синхронизация и резервное копирование"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Интернет без трекеров с нашим приложением для Mac "; diff --git a/DuckDuckGo/sk.lproj/Feedback.strings b/DuckDuckGo/sk.lproj/Feedback.strings index 41fb371247..01a325f548 100644 --- a/DuckDuckGo/sk.lproj/Feedback.strings +++ b/DuckDuckGo/sk.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nie, vďaka! Skončil/skončila som"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Zatvoriť"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Zdieľať spätnú väzbu"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Ktorá webová stránka je nefunkčná?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Nahlásiť nefunkčnú stránku"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Zdieľať spätnú väzbu"; diff --git a/DuckDuckGo/sk.lproj/Localizable.strings b/DuckDuckGo/sk.lproj/Localizable.strings index 2cc71be60f..bfa9a50608 100644 --- a/DuckDuckGo/sk.lproj/Localizable.strings +++ b/DuckDuckGo/sk.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Upraviť"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Existujúce záložky sa nebudú duplikovať."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Prekročili ste limit na synchronizáciu záložiek. Skúste niektoré záložky odstrániť. Kým to nevyriešite, vaše záložky sa nebudú zálohovať."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Synchronizácia záložiek je pozastavená."; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Prekročili ste limit na synchronizáciu hesiel. Skúste niektoré heslá odstrániť. Kým to nevyriešite, vaše heslá sa nebudú zálohovať."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Synchronizácia hesiel je pozastavená."; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Zistite viac"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Uložiť všetky karty medzi záložky?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importujte súbor HTML so záložkami z iného prehliadača alebo exportujte svoje existujúce záložky."; -/* Broken Site Category */ -"brokensite.category.comments" = "Komentáre sa nepodarilo načítať"; - -/* Broken Site Category */ -"brokensite.category.content" = "Chýba obsah"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Automaticky otvárané okno pre súbory cookie nebolo spravované"; - -/* Broken Site Category */ -"brokensite.category.images" = "Obrázky sa nepodarilo načítať"; - -/* Broken Site Category */ -"brokensite.category.links" = "Odkazy alebo tlačidlá nefungujú"; - -/* Broken Site Category */ -"brokensite.category.login" = "Nemôžem sa prihlásiť"; - -/* Broken Site Category */ -"brokensite.category.other" = "Niečo iné"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Táto stránka ma požiadala o deaktiváciu"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Prehliadač je nekompatibilný"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video sa neprehráva"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Vyberte problém zo zoznamu..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VYBERTE KATEGÓRIU"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Zdieľanie ďalších podrobností nám môže pomôcť vyriešiť tento problém"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "POPÍŠTE, ČO SA STALO"; - /* No comment provided by engineer. */ "bucket: %@" = "vedro: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Odstrániť"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Obľúbené položky zo všetkých zariadení"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Vyberte, ktoré obľúbené položky sa majú zobraziť na novej karte na základe ich zdroja."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Nastavenia zobrazenia"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Iba obľúbené mobilné položky"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokovanie reklám a automaticky otváraných okien"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Otvoriť VPN sieť"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Spravujte stránku"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Zapnúť oznámenia"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Povoľte službe DuckDuckGo, aby vás upozornila, ak dôjde k prerušeniu pripojenia alebo zmene stavu VPN siete."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Dostávajte upozornenia, ak dôjde k prerušeniu pripojenia alebo sa zmení stav VPN siete."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Upozornenia týkajúce sa VPN siete"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Automatické obnovenie pripojenia VPN po prerušení."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Vždy zapnuté"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Oznámenia VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Ochrana siete zabraňuje úniku informácií DNS k poskytovateľovi internetových služieb tým, že presmeruje DNS požiadavky cez VPN tunel na náš vlastný, tzv. „DNS resolver“."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Zabezpečený systém DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Nastavenia siete VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otvoriť v inej aplikácii?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Odoslaním anonymného hlásenia o nefunkčnom webe nám pomôžete tieto problémy odstrániť a vylepšiť aplikáciu."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Vyhľadajte alebo zadajte adresu"; diff --git a/DuckDuckGo/sk.lproj/PrivacyDashboard.strings b/DuckDuckGo/sk.lproj/PrivacyDashboard.strings deleted file mode 100644 index 98a27974f1..0000000000 --- a/DuckDuckGo/sk.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Webová stránka je veľkou monitorovacou sieťou"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Skúste to znova"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Údaje sú nezašifrované"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Nahlásiť nefunkčnú stránku"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "SLEDOVACIE SIETE S NAJVÄČŠÍMI PRIESTUPKAMI"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Skontrolujte svoje internetové pripojenie a skúste znova."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Posilnený stupeň"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Označenie"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Ľutujeme, to nefungovalo"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Stupeň ochrany súkromia"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Tlačidlo"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "SPÔSOBY OCHRANY SÚKROMIA"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Obnoviť štatistiky sledovacích sietí"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "SLEDOVACIE SIETE S NAJVÄČŠÍMI PRIESTUPKAMI"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Tlačidlo"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŠIFROVANÉ PRIPOJENIE"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Tlačidlo"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Nezabezpečené webové stránky"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Siete boli zablokované"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Zablokovalo sa 8 sledovacích zariadení"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Nahlásiť nefunkčnú stránku"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Spôsoby ochrany súkromia"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Top prenasledovatelia"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Označenie"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Nenašli sa žiadne postupy ochrany súkromia"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Nezabezpečené webové stránky"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Označenie"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Osvedčené spôsoby ochrany súkromia"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Ochrana súkromia stránky"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "SLEDOVACIE SIETE S NAJVÄČŠÍMI PRIESTUPKAMI"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Ochrana súkromia stránky"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "SLEDOVACIE SIETE S NAJVÄČŠÍMI PRIESTUPKAMI"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Šifrované pripojenie"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Dočasne sme vypli ochranu súkromia, pretože sa zdá, že spôsobuje poruchy na tejto lokalite."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Hlavné siete boli zablokované"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FREKVENCIA SLEDOVACÍCH SIETÍ"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "Bolo načítaných ďalších 8 domén"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Šifrované pripojenie"; - diff --git a/DuckDuckGo/sk.lproj/Settings.strings b/DuckDuckGo/sk.lproj/Settings.strings index 6864fb3a4f..5aba47196d 100644 --- a/DuckDuckGo/sk.lproj/Settings.strings +++ b/DuckDuckGo/sk.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Automaticky vymazať údaje"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Viac informácií na stránke duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Nastavenia"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Štandardný"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Súkromie, zjednodušene. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Správa kontextových okien súborov cookie"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Ochrana súkromia je zapnutá pre všetky webové stránky"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Viac od DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synchronizácia"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synchronizácia a zálohovanie"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Prezerajte si súkromne stránky s našou aplikáciou pre Mac "; diff --git a/DuckDuckGo/sl.lproj/Feedback.strings b/DuckDuckGo/sl.lproj/Feedback.strings index a5fbc20190..c4005555fd 100644 --- a/DuckDuckGo/sl.lproj/Feedback.strings +++ b/DuckDuckGo/sl.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Ne, hvala! Zaključil/a sem"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Zapri"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Deli povratne informacije"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Katera spletna stran je poškodovana?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Prijavi nedelujočo stran"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Deli povratne informacije"; diff --git a/DuckDuckGo/sl.lproj/Localizable.strings b/DuckDuckGo/sl.lproj/Localizable.strings index 47190ef484..ccf5941d44 100644 --- a/DuckDuckGo/sl.lproj/Localizable.strings +++ b/DuckDuckGo/sl.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Uredi"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Obstoječi zaznamki ne bodo podvojeni."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Presegli ste omejitev sinhronizacije zaznamkov. Poskusite izbrisati nekaj zaznamkov. Dokler ta težava ne bo odpravljena, zaznamki ne bodo varnostno kopirani."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Sinhronizacija zaznamkov je zaustavljena"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Presegli ste omejitev sinhronizacije gesel. Poskusite izbrisati nekaj gesel. Dokler ta težava ne bo odpravljena, vaša gesla ne bodo varnostno kopirana."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Sinhronizacija gesel je zaustavljena"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Več"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "V REDU"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Želiš dodati vse zavihke med zaznamke?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Uvozite datoteko HTML z zaznamki iz drugega brskalnika ali pa izvozite vaše obstoječe zaznamke."; -/* Broken Site Category */ -"brokensite.category.comments" = "Komentarji se niso naložili"; - -/* Broken Site Category */ -"brokensite.category.content" = "Vsebina manjka"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Pojavno okno za piškotke ni bilo upravljano"; - -/* Broken Site Category */ -"brokensite.category.images" = "Slike se niso naložile"; - -/* Broken Site Category */ -"brokensite.category.links" = "Povezave ali tipke ne delujejo"; - -/* Broken Site Category */ -"brokensite.category.login" = "Ne morem se prijaviti"; - -/* Broken Site Category */ -"brokensite.category.other" = "Nekaj drugega"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Spletišče me je prosilo, da onemogočim"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Brskalnik ni združljiv"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video se ni predvajal"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Svoje vprašanje izberite s seznama ..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "IZBERITE KATEGORIJO"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Če z nami delite več podrobnosti, nam to lahko pomaga pri reševanju te težave"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "OPIŠITE, KAJ SE JE ZGODILO"; - /* No comment provided by engineer. */ "bucket: %@" = "zbiralnik: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Odstrani"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Priljubljene iz vseh naprav"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Izberite priljubljene, ki naj se prikažejo v novem zavihku, glede na njihov izvor."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Nastavitve prikaza"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Priljubljene samo iz mobilne naprave"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokiranje oglasov in pojavnih oken"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Odpri VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Upravljanje"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Vključite obvestila"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Dovolite, da vas DuckDuckGo obvesti o prekinitvi povezave ali spremembi stanja VPN."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Prejmite obvestilo o prekinitvi povezave ali spremembi stanja VPN."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "Opozorila VPN"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Samodejno obnovite povezavo VPN po prekinitvi."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Vedno vklopljeno"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "Obvestila VPN"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Zaščita omrežja preprečuje uhajanje podatkov DNS k ponudniku internetnih storitev, saj poizvedbe DNS usmerja prek tunela VPN k lastnemu razreševalniku."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Varen DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "Nastavitve VPN"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Odpri v drugi aplikaciji?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Če pošljete poročilo o anonimnem pokvarjenem spletišču, nam pomagate odpraviti napake in izboljšati aplikacijo."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Poišči ali vnesi naslov"; diff --git a/DuckDuckGo/sl.lproj/PrivacyDashboard.strings b/DuckDuckGo/sl.lproj/PrivacyDashboard.strings deleted file mode 100644 index 623216482f..0000000000 --- a/DuckDuckGo/sl.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Spletno mesto je glavno sledilno omrežje"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Poskusi znova"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Podatki niso šifrirani"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Prijavi nedelujočo stran"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "GLAVNI KRŠITELJI MED SLEDILNIMI OMREŽJI"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Preverite internetno povezavo in poskusite znova."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Izboljšana ocena"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Oznaka"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Joj, to pa ni uspelo"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Ocena zasebnosti"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Gumb"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "PRAKSE ZASEBNOSTI"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Ponastavi statistične podatke sledilnega omrežja"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "GLAVNI KRŠITELJI MED SLEDILNIMI OMREŽJI"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Gumb"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŠIFRIRANA POVEZAVA"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Gumb"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Nezaščitene strani"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Blokirana omrežja"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "Blokiranih 8 sledilnikov"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Prijavi nedelujočo stran"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Prakse zasebnosti"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Glavni kršitelji"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Oznaka"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Ni najdenih praks zasebnosti"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Nezaščitene strani"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Oznaka"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Dobre prakse zasebnosti"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Zaščita zasebnosti na strani"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "GLAVNI KRŠITELJI MED SLEDILNIMI OMREŽJI"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Zaščita zasebnosti na strani"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "GLAVNI KRŠITELJI MED SLEDILNIMI OMREŽJI"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Šifrirana povezava"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Začasno smo onemogočili zaščito zasebnosti, saj se zdi, da zato pride do napak na tem spletnem mestu."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Glavna blokirana omrežja"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "POGOSTOST SLEDENJA OMREŽIJ"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 drugih naloženih domen"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Šifrirana povezava"; - diff --git a/DuckDuckGo/sl.lproj/Settings.strings b/DuckDuckGo/sl.lproj/Settings.strings index 5c032acda2..ec4d2b7bf2 100644 --- a/DuckDuckGo/sl.lproj/Settings.strings +++ b/DuckDuckGo/sl.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Samodejno počisti podatke"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Več na duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Nastavitve"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Privzeto"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Zasebnost, poenostavljeno. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Upravljanje pojavnih oken za piškotke"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Zaščita zasebnosti omogočena za vsa spletna mesta"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikona"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Več od iskalnika DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Sinhronizacija"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Sinhronizacija in varnostno kopiranje"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Brskajte zasebno z našo aplikacijo za računalnike Mac "; diff --git a/DuckDuckGo/sv.lproj/Feedback.strings b/DuckDuckGo/sv.lproj/Feedback.strings index 1c1dce6277..426fab986c 100644 --- a/DuckDuckGo/sv.lproj/Feedback.strings +++ b/DuckDuckGo/sv.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Nej tack! Jag är klar."; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Stäng"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Berätta vad du tycker"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Vilken webbplats är skadad?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Rapportera skadad webbplats"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Berätta vad du tycker"; diff --git a/DuckDuckGo/sv.lproj/Localizable.strings b/DuckDuckGo/sv.lproj/Localizable.strings index 8cd3fdbc47..5e05b4d917 100644 --- a/DuckDuckGo/sv.lproj/Localizable.strings +++ b/DuckDuckGo/sv.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Redigera"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Befintliga bokmärken kommer inte att kopieras."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Du har överskridit gränsen för bokmärkessynkronisering. Ta bort några bokmärken. Dina bokmärken kommer inte att säkerhetskopieras förrän detta har åtgärdats."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Bokmärkessynkronisering är pausad"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Du har överskridit gränsen för lösenordssynkronisering. Ta bort några lösenord. Dina lösenord kommer inte att säkerhetskopieras förrän detta har åtgärdats."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Lösenordssynkronisering är pausad"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Läs mer"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Bokmärk alla flikar?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Importera en HTML-fil med bokmärken från en annan webbläsare eller exportera dina befintliga bokmärken."; -/* Broken Site Category */ -"brokensite.category.comments" = "Kommentarer laddades inte"; - -/* Broken Site Category */ -"brokensite.category.content" = "Innehåll saknas"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Popup-fönster för cookies hanterades inte"; - -/* Broken Site Category */ -"brokensite.category.images" = "Bilder laddades inte"; - -/* Broken Site Category */ -"brokensite.category.links" = "Länkar eller knappar fungerar inte"; - -/* Broken Site Category */ -"brokensite.category.login" = "Jag kan inte logga in"; - -/* Broken Site Category */ -"brokensite.category.other" = "Övrigt"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Webbplatsen bad mig att avaktivera"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Webbläsaren är inte kompatibel"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Videon spelades inte upp"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Välj din fråga i listan ..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "VÄLJ EN KATEGORI"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Om du delar mer information kan det hjälpa oss att lösa det här problemet"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "BERÄTTA VAD SOM HÄNDE"; - /* No comment provided by engineer. */ "bucket: %@" = "bucket: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Ta bort"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Alla enhetsfavoriter"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Välj vilka favoriter som ska visas på en ny flik baserat på deras ursprung."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Visningsinställningar"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Endast mobila favoriter"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blockering av annonser och poppuppfönster"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Öppna VPN"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Hantera"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Aktivera aviseringar"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Tillåt DuckDuckGo att meddela dig om din anslutning bryts eller VPN-statusen ändras."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Få en avisering om din anslutning bryts eller om VPN-statusen ändras."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN-varningar"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Återställ automatiskt en VPN-anslutning efter avbrott."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Alltid på"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN-aviseringar"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Network Protection förhindrar DNS-läckor till din internetleverantör genom att dirigera DNS-frågor genom VPN-tunneln till vår egen resolver."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Säker DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN-inställningar"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Öppna i annan app?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Om du skickar in en anonym anmälan om att webbplatsen inte fungerar hjälper det oss att åtgärda problemet och förbättra appen."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Sök eller ange adress"; diff --git a/DuckDuckGo/sv.lproj/PrivacyDashboard.strings b/DuckDuckGo/sv.lproj/PrivacyDashboard.strings deleted file mode 100644 index 58b58cd04d..0000000000 --- a/DuckDuckGo/sv.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Webbplatsen är ett större spårningsnätverk"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Försök igen"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Okrypterad data"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Rapportera skadad webbplats"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "SPÅRARNÄTVERKETS FRÄMSTA SYNDARE"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "Kontrollera din internetanslutning och försök igen."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Förbättrad klass"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Etikett"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Hoppsan, det där fungerade inte"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Sekretessklass"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Knapp"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "INTEGRITETSPRAXIS"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "Återställ statistik för spårningsnätverk"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "SPÅRARNÄTVERKETS FRÄMSTA SYNDARE"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Knapp"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "KRYPTERAD ANSLUTNING"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Knapp"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Oskyddade webbplatser"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Nätverk blockerade"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 spårare blockerade"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Rapportera skadad webbplats"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Integritetspraxis"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "Främsta syndare"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Etikett"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Ingen integritetspraxis hittades"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Oskyddade webbplatser"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Etikett"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "God integritetspraxis"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Webbplatsens integritetsskydd"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "SPÅRARNÄTVERKETS FRÄMSTA SYNDARE"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Webbplatsens integritetsskydd"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "SPÅRARNÄTVERKETS FRÄMSTA SYNDARE"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Krypterad anslutning"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Vi har tillfälligt inaktiverat integritetsskydd eftersom det verkade göra att denna webbplats inte fungerade."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Stora nätverk blockerade"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "FREKVENS FÖR SPÅRNINGSNÄTVERK"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 andra domäner lästes in"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Krypterad anslutning"; - diff --git a/DuckDuckGo/sv.lproj/Settings.strings b/DuckDuckGo/sv.lproj/Settings.strings index 50d25a1314..5a1b5101ff 100644 --- a/DuckDuckGo/sv.lproj/Settings.strings +++ b/DuckDuckGo/sv.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Rensa data automatiskt"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Mer på duckduckgo.com/about"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Inställningar"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Standard"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Personlig integritet, förenklad. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Hantera popup-fönster för cookies"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Integritetsskydd aktiverat för alla webbplatser"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Ikon"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "Mer från DuckDuckGo"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Synkronisering"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Synkronisering och säkerhetskopiering"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Surfa privat med vår app för Mac "; diff --git a/DuckDuckGo/tr.lproj/Feedback.strings b/DuckDuckGo/tr.lproj/Feedback.strings index c16a94b613..20b5110818 100644 --- a/DuckDuckGo/tr.lproj/Feedback.strings +++ b/DuckDuckGo/tr.lproj/Feedback.strings @@ -10,9 +10,6 @@ /* Class = "UIButton"; normalTitle = "No Thanks! I’m Done"; ObjectID = "A1s-GY-hbq"; */ "A1s-GY-hbq.normalTitle" = "Hayır Teşekkürler! Şimdilik Bu Kadar"; -/* Class = "UIBarButtonItem"; title = "Close"; ObjectID = "cZl-qB-kSL"; */ -"cZl-qB-kSL.title" = "Kapat"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "D8A-B7-Dqu"; */ "D8A-B7-Dqu.title" = "Geri Bildirim Paylaş"; @@ -52,9 +49,6 @@ /* Class = "UITextField"; placeholder = "Which website is broken?"; ObjectID = "TMj-NM-j3b"; */ "TMj-NM-j3b.placeholder" = "Hangi web sitesi hatalı?"; -/* Class = "UINavigationItem"; title = "Report Broken Site"; ObjectID = "WjT-HM-yim"; */ -"WjT-HM-yim.title" = "Hatalı Siteyi Bildir"; - /* Class = "UINavigationItem"; title = "Share Feedback"; ObjectID = "Xb0-Zu-opM"; */ "Xb0-Zu-opM.title" = "Geri Bildirim Paylaş"; diff --git a/DuckDuckGo/tr.lproj/Localizable.strings b/DuckDuckGo/tr.lproj/Localizable.strings index 1b87ef3f5d..4aed95b6cc 100644 --- a/DuckDuckGo/tr.lproj/Localizable.strings +++ b/DuckDuckGo/tr.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* No comment provided by engineer. */ "%@ [%@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)" = "%1$@ [%2$@](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)"; +/* No comment provided by engineer. */ +"⚠️ FEATURE IS WORK IN PROGRESS ⚠️" = "⚠️ FEATURE IS WORK IN PROGRESS ⚠️"; + /* Buton label for Edit action */ "action.generic.edit" = "Düzenle"; @@ -133,6 +136,24 @@ /* No comment provided by engineer. */ "alert.message.bookmarkAll" = "Mevcut yer imleri çoğaltılmayacaktır."; +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "Yer işaretleri senkronizasyon sınırını aştınız. Bazı yer işaretlerini silmeyi deneyin. Bu sorun çözülene kadar yer işaretleriniz yedeklenmeyecektir."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Yer İşaretleri Senkronizasyonu Duraklatıldı"; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "Şifre senkronizasyon sınırını aştınız. Bazı şifreleri silmeyi deneyin. Bu sorun çözülene kadar şifreleriniz yedeklenmeyecektir."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Şifre Senkronizasyonu Duraklatıldı"; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Daha Fazla Bilgi"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "Tamam"; + /* Question from confirmation dialog */ "alert.title.bookmarkAll" = "Tüm Sekmelere Yer İmi Eklensin mi?"; @@ -754,48 +775,6 @@ /* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ "bookmarks.importExport.title" = "Yer işaretleri HTML dosyasını başka bir tarayıcıdan içeri aktarın veya mevcut yer işaretlerinizi dışarı aktarın."; -/* Broken Site Category */ -"brokensite.category.comments" = "Yorumlar yüklenmedi"; - -/* Broken Site Category */ -"brokensite.category.content" = "İçerik eksik"; - -/* Broken Site Category */ -"brokensite.category.cookieprompt" = "Çerez açılır penceresi yönetilemedi"; - -/* Broken Site Category */ -"brokensite.category.images" = "Resimler yüklenmedi"; - -/* Broken Site Category */ -"brokensite.category.links" = "Bağlantılar veya düğmeler çalışmıyor"; - -/* Broken Site Category */ -"brokensite.category.login" = "Oturum açamıyorum"; - -/* Broken Site Category */ -"brokensite.category.other" = "Başka bir şey"; - -/* Broken Site Category */ -"brokensite.category.paywall" = "Site benden devre dışı bırakmamı istedi"; - -/* Broken Site Category */ -"brokensite.category.unsupported" = "Tarayıcı uyumsuz"; - -/* Broken Site Category */ -"brokensite.category.videos" = "Video oynatılamadı"; - -/* Broken Site Category Placeholder */ -"brokensite.categoryPlaceholder" = "Listeden yaşadığınız sorunu seçin..."; - -/* Broken Site Category Section Title */ -"brokensite.categoryTitle" = "BİR KATEGORİ SEÇİN"; - -/* Broken Site Comment Placeholder */ -"brokensite.commentPlaceholder" = "Daha fazla ayrıntı paylaşmak, bu sorunu çözmemize yardımcı olabilir"; - -/* Broken Site Section Title */ -"brokensite.sectionTitle" = "NE OLDUĞUNU AÇIKLAYIN"; - /* No comment provided by engineer. */ "bucket: %@" = "kova: %@"; @@ -1072,6 +1051,18 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Kaldır"; +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "Tüm Cihaz Sık Kullanılanları"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Kaynaklarına göre hangi favorilerin yeni bir sekmede görüntüleneceğini seçin."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Ekran Tercihleri"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Yalnızca Mobil Favoriler"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklam ve pop-up engelleme"; @@ -1438,6 +1429,9 @@ /* Title for the network protection invite success view */ "network.protection.invite.success.title" = "Success! You’re in."; +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "VPN'i aç"; + /* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ "network.protection.status.connected.format" = "Connected - %@"; @@ -1477,9 +1471,60 @@ /* Location label shown in NetworkProtection's status view. */ "network.protection.status.view.location" = "Location"; +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Yönet"; + /* Title label text for the status view when netP is disconnected */ "network.protection.status.view.title" = "Network Protection"; +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Bildirimleri Açın"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Bağlantınız kesilirse veya VPN durumunuz değişirse DuckDuckGo'nun sizi bilgilendirmesine izin verin."; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Bağlantınız kesilirse veya VPN durumunuz değişirse bildirim alın."; + +/* Title for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Uyarıları"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.footer" = "Kesintiden sonra VPN bağlantısını otomatik olarak geri yükleyin."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.always.on.setting.title" = "Her Zaman Açık"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Title for the VPN Location screen's Nearest Available selection item. */ +"network.protection.vpn.location.nearest.available.item.title" = "Nearest Available"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find"; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN Bildirimleri"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Available"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "Ağ Koruması, DNS sorgularını VPN tüneli üzerinden kendi çözümleyicimize yönlendirerek İnternet Servis Sağlayıcınıza DNS sızıntılarını önler."; + +/* Title for the Always on VPN setting item. */ +"network.protection.vpn.secure.dns.setting.title" = "Güvenli DNS"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN Ayarları"; + /* Do not translate - stringsdict entry */ "number.of.tabs" = "number.of.tabs"; @@ -1594,9 +1639,6 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Başka Bir Uygulamada Açılsın mı?"; -/* No comment provided by engineer. */ -"report.brokensite.header" = "Anonim olarak hatalı site raporu göndermeniz, bu sorunları ayıklamamıza ve uygulamayı geliştirmemize yardımcı olur."; - /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Adres ara veya gir"; diff --git a/DuckDuckGo/tr.lproj/PrivacyDashboard.strings b/DuckDuckGo/tr.lproj/PrivacyDashboard.strings deleted file mode 100644 index 8a697c7220..0000000000 --- a/DuckDuckGo/tr.lproj/PrivacyDashboard.strings +++ /dev/null @@ -1,129 +0,0 @@ -/* Class = "UILabel"; text = "Site Is a Major Tracker Network"; ObjectID = "0ax-Nd-tDU"; */ -"0ax-Nd-tDU.text" = "Site Önemli İzleyici Ağlarından Biri"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "0SO-8y-5QH"; */ -"0SO-8y-5QH.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Try Again"; ObjectID = "2KC-47-FBo"; */ -"2KC-47-FBo.normalTitle" = "Tekrar Dene"; - -/* Class = "UILabel"; text = "Data Is Unencrypted"; ObjectID = "2T4-dB-Wu0"; */ -"2T4-dB-Wu0.text" = "Veriler Şifrelenmemiş"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "2xP-ZS-UtN"; */ -"2xP-ZS-UtN.normalTitle" = "Hatalı Siteyi Bildir"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "3UG-EO-bt5"; */ -"3UG-EO-bt5.text" = "İZLEYİCİ AĞ İLK SIRADAKİ SUÇLULARI"; - -/* Class = "UILabel"; text = "Check your Internet connection and try again."; ObjectID = "3uo-s0-uRc"; */ -"3uo-s0-uRc.text" = "İnternet bağlantınızı kontrol edip tekrar deneyin."; - -/* Class = "UILabel"; text = "Enhanced Grade"; ObjectID = "5dV-qp-Hz5"; */ -"5dV-qp-Hz5.text" = "Geliştirilmiş Sınıf"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "6os-4h-chg"; */ -"6os-4h-chg.text" = "Label"; - -/* Class = "UILabel"; text = "Uh-Oh, That Didn’t Work"; ObjectID = "7k3-Qj-oya"; */ -"7k3-Qj-oya.text" = "Ne Yazık ki Bu İşe Yaramadı"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "7nh-8f-M2e"; */ -"7nh-8f-M2e.text" = "www.example.com"; - -/* Class = "UILabel"; text = "Privacy Grade"; ObjectID = "7xH-3L-wpf"; */ -"7xH-3L-wpf.text" = "Gizlilik Derecesi"; - -/* Class = "UITableViewController"; title = "xxx"; ObjectID = "7Z1-eg-OWQ"; */ -"7Z1-eg-OWQ.title" = "xxx"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "8Ec-67-0A8"; */ -"8Ec-67-0A8.normalTitle" = "Düğme"; - -/* Class = "UILabel"; text = "PRIVACY PRACTICES"; ObjectID = "25V-p3-wsn"; */ -"25V-p3-wsn.text" = "GİZLİLİK UYGULAMALARI"; - -/* Class = "UIButton"; normalTitle = "Reset Tracker Network Stats"; ObjectID = "953-jn-tmN"; */ -"953-jn-tmN.normalTitle" = "İzleyici Ağ İstatistiklerini Sıfırla"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "aD3-hP-MUU"; */ -"aD3-hP-MUU.text" = "İZLEYİCİ AĞ İLK SIRADAKİ SUÇLULARI"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "DGo-7C-PoV"; */ -"DGo-7C-PoV.normalTitle" = "Düğme"; - -/* Class = "UILabel"; text = "ENCRYPTED CONNECTION"; ObjectID = "dZC-7f-pp3"; */ -"dZC-7f-pp3.text" = "ŞİFRELİ BAĞLANTI"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "edo-u1-cGj"; */ -"edo-u1-cGj.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "eoi-RZ-ibW"; */ -"eoi-RZ-ibW.normalTitle" = "Düğme"; - -/* Class = "UILabel"; text = "www.example.com"; ObjectID = "F5w-e3-JfY"; */ -"F5w-e3-JfY.text" = "www.example.com"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "fqL-1Q-ilH"; */ -"fqL-1Q-ilH.normalTitle" = "Korumasız Siteler"; - -/* Class = "UILabel"; text = "Networks Blocked"; ObjectID = "Ge6-9h-2z5"; */ -"Ge6-9h-2z5.text" = "Engellenen Ağlar"; - -/* Class = "UILabel"; text = "8 Trackers Blocked"; ObjectID = "GZ4-PW-wOG"; */ -"GZ4-PW-wOG.text" = "8 İzleyici Engellendi"; - -/* Class = "UIButton"; normalTitle = "Report Broken Site"; ObjectID = "hDv-jp-eaS"; */ -"hDv-jp-eaS.normalTitle" = "Hatalı Siteyi Bildir"; - -/* Class = "UILabel"; text = "Privacy Practices"; ObjectID = "iF1-sO-WXk"; */ -"iF1-sO-WXk.text" = "Gizlilik Uygulamaları"; - -/* Class = "UILabel"; text = "Top Offenders"; ObjectID = "IPS-SD-65t"; */ -"IPS-SD-65t.text" = "İlk Sıradaki Suçlular"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "J3L-KE-1Vb"; */ -"J3L-KE-1Vb.text" = "Label"; - -/* Class = "UILabel"; text = "No privacy practices found"; ObjectID = "k0S-dU-EUe"; */ -"k0S-dU-EUe.text" = "Gizlilik Uygulamaları Bulunamadı"; - -/* Class = "UIButton"; normalTitle = "Unprotected Sites"; ObjectID = "Kme-pZ-l7N"; */ -"Kme-pZ-l7N.normalTitle" = "Korumasız Siteler"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Mv2-oP-SQd"; */ -"Mv2-oP-SQd.text" = "Label"; - -/* Class = "UILabel"; text = "Good Privacy Practices"; ObjectID = "oyz-09-obQ"; */ -"oyz-09-obQ.text" = "Öne Çıkan Gizlilik Uygulamaları"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "pW9-ic-ro9"; */ -"pW9-ic-ro9.text" = "Site Gizlilik Koruması"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "rXM-kA-bL0"; */ -"rXM-kA-bL0.text" = "İZLEYİCİ AĞ İLK SIRADAKİ SUÇLULARI"; - -/* Class = "UILabel"; text = "Site Privacy Protection"; ObjectID = "sr7-Qg-P74"; */ -"sr7-Qg-P74.text" = "Site Gizlilik Koruması"; - -/* Class = "UILabel"; text = "TRACKER NETWORK TOP OFFENDERS"; ObjectID = "tpT-I9-kDk"; */ -"tpT-I9-kDk.text" = "İZLEYİCİ AĞ İLK SIRADAKİ SUÇLULARI"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "wf1-HZ-e7d"; */ -"wf1-HZ-e7d.text" = "Şifreli Bağlantı"; - -/* Class = "UILabel"; text = "We temporarily disabled Privacy Protection as it appears to be breaking this site."; ObjectID = "wwe-ee-up0"; */ -"wwe-ee-up0.text" = "Bu sitede hatalara neden olduğu için Gizlilik Korumasını geçici olarak devre dışı bıraktık."; - -/* Class = "UILabel"; text = "Major Networks Blocked"; ObjectID = "XzQ-fW-tzk"; */ -"XzQ-fW-tzk.text" = "Engellenen Başlıca Ağlar"; - -/* Class = "UILabel"; text = "TRACKER NETWORK FREQUENCY"; ObjectID = "Y3q-u7-IeX"; */ -"Y3q-u7-IeX.text" = "İZLEYİCİNİN AĞ İLE KARŞILAŞMA SIKLIĞI"; - -/* Class = "UILabel"; text = "8 Other Domains Loaded"; ObjectID = "YDP-RX-LaV"; */ -"YDP-RX-LaV.text" = "8 Alan Adı Daha Yüklendi"; - -/* Class = "UILabel"; text = "Encrypted Connection"; ObjectID = "zz1-Q4-Fxr"; */ -"zz1-Q4-Fxr.text" = "Şifreli Bağlantı"; - diff --git a/DuckDuckGo/tr.lproj/Settings.strings b/DuckDuckGo/tr.lproj/Settings.strings index f15463e3e5..81c5b0fc5d 100644 --- a/DuckDuckGo/tr.lproj/Settings.strings +++ b/DuckDuckGo/tr.lproj/Settings.strings @@ -22,9 +22,6 @@ /* Class = "UILabel"; text = "Automatically Clear Data"; ObjectID = "5YD-Od-uDU"; */ "5YD-Od-uDU.text" = "Verileri Otomatik Olarak Temizle"; -/* Class = "UIButton"; normalTitle = "More at duckduckgo.com/about"; ObjectID = "7nt-uS-sOh"; */ -"7nt-uS-sOh.normalTitle" = "Duckduckgo.com/about adresinde daha fazla bilgi edinin"; - /* Class = "UIButton"; normalTitle = "Settings"; ObjectID = "8YG-7Q-Czd"; */ "8YG-7Q-Czd.normalTitle" = "Ayarlar"; @@ -148,9 +145,6 @@ /* Class = "UILabel"; text = "Default"; ObjectID = "Gbx-kl-uOO"; */ "Gbx-kl-uOO.text" = "Varsayılan"; -/* Class = "UILabel"; text = "Privacy, simplified. "; ObjectID = "gji-Fs-EET"; */ -"gji-Fs-EET.text" = "Gizlilik, basitleştirildi. "; - /* Class = "UILabel"; text = "Manage Cookie Pop-ups"; ObjectID = "GRv-M2-Kx1"; */ "GRv-M2-Kx1.text" = "Çerez Açılır Pencerelerini Yönetin"; @@ -166,9 +160,6 @@ /* Class = "UILabel"; text = "Privacy Protection enabled for all sites"; ObjectID = "Hu1-5i-vjL"; */ "Hu1-5i-vjL.text" = "Gizlilik Koruması tüm siteler için etkin"; -/* Class = "UIImageView"; accessibilityLabel = "DuckDuckGo"; ObjectID = "iNd-oh-m3g"; */ -"iNd-oh-m3g.accessibilityLabel" = "DuckDuckGo"; - /* Class = "UICollectionViewController"; title = "Icon"; ObjectID = "jbD-Oy-Cmw"; */ "jbD-Oy-Cmw.title" = "Icon"; @@ -199,8 +190,8 @@ /* Class = "UITableViewSection"; headerTitle = "More From DuckDuckGo"; ObjectID = "OxE-MQ-uJk"; */ "OxE-MQ-uJk.headerTitle" = "DuckDuckGo'dan Daha Fazlası"; -/* Class = "UILabel"; text = "Sync"; ObjectID = "oXN-ez-gct"; */ -"oXN-ez-gct.text" = "Senkronizasyon"; +/* Class = "UILabel"; text = "Sync & Back Up"; ObjectID = "oXN-ez-gct"; */ +"oXN-ez-gct.text" = "Senkronizasyon ve Yedekleme"; /* Class = "UILabel"; text = "Browse privately with our app for Mac "; ObjectID = "P0F-ts-ekd"; */ "P0F-ts-ekd.text" = "Mac için uygulamamızla internette gezinirken gizliliğinizi koruyun "; diff --git a/DuckDuckGoTests/BrokenSiteReportingTests.swift b/DuckDuckGoTests/BrokenSiteReportingTests.swift index 6c663fda98..2ffc9f0d7b 100644 --- a/DuckDuckGoTests/BrokenSiteReportingTests.swift +++ b/DuckDuckGoTests/BrokenSiteReportingTests.swift @@ -44,6 +44,7 @@ final class BrokenSiteReportingTests: XCTestCase { func testBrokenSiteReporting() throws { let testJSON = data.fromJsonFile(Resource.tests) + let testString = String(data: testJSON, encoding: .utf8) let testData = try JSONDecoder().decode(BrokenSiteReportingTestData.self, from: testJSON) referenceTests = testData.reportURL.tests.filter { @@ -64,7 +65,6 @@ final class BrokenSiteReportingTests: XCTestCase { return } - os_log("Testing [%s]", type: .info, test.name) let brokenSiteInfo = BrokenSiteInfo(url: URL(string: test.siteURL), @@ -81,7 +81,6 @@ final class BrokenSiteReportingTests: XCTestCase { systemVersion: test.os ?? "", gpc: test.gpcEnabled) - stub(condition: isHost(host)) { request -> HTTPStubsResponse in guard let requestURL = request.url else { @@ -117,7 +116,7 @@ final class BrokenSiteReportingTests: XCTestCase { return HTTPStubsResponse(data: Data(), statusCode: 200, headers: nil) } - brokenSiteInfo.send(with: test.category, description: "") + brokenSiteInfo.send(with: test.category, description: "", source: .dashboard) } } @@ -135,7 +134,6 @@ private struct ReportURL: Codable { } // MARK: - Test - private struct Test: Codable { let name: String let siteURL: String diff --git a/Widgets/bg.lproj/Localizable.strings b/Widgets/bg.lproj/Localizable.strings index 642c6a3542..e36bdab9db 100644 --- a/Widgets/bg.lproj/Localizable.strings +++ b/Widgets/bg.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Грешка"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Етикет"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Гласово търсене"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Насладете се на поверително търсене и сърфиране в любимите си сайтове само с едно докосване."; diff --git a/Widgets/cs.lproj/Localizable.strings b/Widgets/cs.lproj/Localizable.strings index 773e0773d7..845cf681a1 100644 --- a/Widgets/cs.lproj/Localizable.strings +++ b/Widgets/cs.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Chyba"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Štítek"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Hlasové vyhledávání"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Vyhledávejte nebo navštěvujte své oblíbené weby soukromě jediným klepnutím."; diff --git a/Widgets/da.lproj/Localizable.strings b/Widgets/da.lproj/Localizable.strings index a97d59db1c..ad5843944c 100644 --- a/Widgets/da.lproj/Localizable.strings +++ b/Widgets/da.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Fejl"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etiket"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Stemmesøgning"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Søg eller besøg dine yndlingssider privat med kun ét tryk."; diff --git a/Widgets/de.lproj/Localizable.strings b/Widgets/de.lproj/Localizable.strings index f2d7ca21a8..4e8d0d75e5 100644 --- a/Widgets/de.lproj/Localizable.strings +++ b/Widgets/de.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Fehler"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Sprachsuche"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Du kannst deine Lieblingswebsites privat durchsuchen und anzeigen – einfach durch Antippen!"; diff --git a/Widgets/el.lproj/Localizable.strings b/Widgets/el.lproj/Localizable.strings index 21fb056360..6aae28ca9a 100644 --- a/Widgets/el.lproj/Localizable.strings +++ b/Widgets/el.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Σφάλμα"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Φωνητική αναζήτηση"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Κάντε αναζήτηση ή επισκεφτείτε τους αγαπημένους ιστότοπούς σας ιδιωτικά, με μόνο ένα πάτημα."; diff --git a/Widgets/es.lproj/Localizable.strings b/Widgets/es.lproj/Localizable.strings index 74ffef6287..29ba8d8698 100644 --- a/Widgets/es.lproj/Localizable.strings +++ b/Widgets/es.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Error"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etiqueta"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Búsqueda por voz"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Busca o visita tus sitios web de forma privada con solo pulsar un botón."; diff --git a/Widgets/et.lproj/Localizable.strings b/Widgets/et.lproj/Localizable.strings index 9b45e87d3a..87539eae30 100644 --- a/Widgets/et.lproj/Localizable.strings +++ b/Widgets/et.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Viga"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Silt"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Häälotsing"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Otsi või külasta oma lemmiksaite privaatselt vaid ühe puudutusega."; diff --git a/Widgets/fi.lproj/Localizable.strings b/Widgets/fi.lproj/Localizable.strings index fe34c710fa..d3c3815e10 100644 --- a/Widgets/fi.lproj/Localizable.strings +++ b/Widgets/fi.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Virhe"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Äänihaku"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Tee hakuja ja käy lempisivustoillasi yhdellä napautuksella."; diff --git a/Widgets/fr.lproj/Localizable.strings b/Widgets/fr.lproj/Localizable.strings index 4560cf6c31..534645bedf 100644 --- a/Widgets/fr.lproj/Localizable.strings +++ b/Widgets/fr.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Erreur"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Recherche vocale"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Recherchez ou visitez vos sites favoris en privé et d'un seul mouvement."; diff --git a/Widgets/hr.lproj/Localizable.strings b/Widgets/hr.lproj/Localizable.strings index 109e6b1ab3..6f30e34502 100644 --- a/Widgets/hr.lproj/Localizable.strings +++ b/Widgets/hr.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Pogreška"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Glasovno pretraživanje"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Pretraži ili posjeti svoja omiljena web-mjesta privatno jednim dodirom."; diff --git a/Widgets/hu.lproj/Localizable.strings b/Widgets/hu.lproj/Localizable.strings index 4bfd4c0c17..020c39e048 100644 --- a/Widgets/hu.lproj/Localizable.strings +++ b/Widgets/hu.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Hiba"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Címke"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Beszédhangalapú keresés"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Látogasd meg a kedvenc weboldalaidat és keress rajtuk privát módon, mindössze egyetlen koppintással."; diff --git a/Widgets/it.lproj/Localizable.strings b/Widgets/it.lproj/Localizable.strings index 40201cee2a..054ce6c494 100644 --- a/Widgets/it.lproj/Localizable.strings +++ b/Widgets/it.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Errore"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etichetta"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Ricerca vocale"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Effettua ricerche o visita i tuoi siti preferiti in incognito con un solo tocco."; diff --git a/Widgets/lt.lproj/Localizable.strings b/Widgets/lt.lproj/Localizable.strings index 90cedf4c48..093743ccf9 100644 --- a/Widgets/lt.lproj/Localizable.strings +++ b/Widgets/lt.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Klaida"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etiketė"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Paieška balsu"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Ieškokite arba lankykitės savo mėgstamose svetainėse privačiai vienu bakstelėjimu."; diff --git a/Widgets/lv.lproj/Localizable.strings b/Widgets/lv.lproj/Localizable.strings index fad926197f..9a4f7e7289 100644 --- a/Widgets/lv.lproj/Localizable.strings +++ b/Widgets/lv.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Kļūda"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etiķete"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Balss meklēšana"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Meklē vai atver savas iecienītākās vietnes konfidenciāli, veicot tikai vienu pieskārienu."; diff --git a/Widgets/nb.lproj/Localizable.strings b/Widgets/nb.lproj/Localizable.strings index e36bae6f85..f4be22a9a9 100644 --- a/Widgets/nb.lproj/Localizable.strings +++ b/Widgets/nb.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Feil"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etikett"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Talesøk"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Søk eller besøk favorittsider privat med ett trykk."; diff --git a/Widgets/nl.lproj/Localizable.strings b/Widgets/nl.lproj/Localizable.strings index 51d9e9e4a8..18e0f7e4f1 100644 --- a/Widgets/nl.lproj/Localizable.strings +++ b/Widgets/nl.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Fout"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Zoeken via spraak"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Zoek of bezoek je favoriete sites in de privémodus met één tik."; diff --git a/Widgets/pl.lproj/Localizable.strings b/Widgets/pl.lproj/Localizable.strings index 062491c5fa..a188c79e20 100644 --- a/Widgets/pl.lproj/Localizable.strings +++ b/Widgets/pl.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Błąd"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etykieta"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Wyszukiwanie głosowe"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Prywatnie przeszukuj lub odwiedzaj swoje ulubione witryny za pomocą jednego dotknięcia."; diff --git a/Widgets/pt.lproj/Localizable.strings b/Widgets/pt.lproj/Localizable.strings index a4900f4bb6..5727c566a8 100644 --- a/Widgets/pt.lproj/Localizable.strings +++ b/Widgets/pt.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Erro"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Rótulo"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Pesquisa por voz"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Pesquise ou visite os seus sites favoritos de forma privada com apenas um toque."; diff --git a/Widgets/ro.lproj/Localizable.strings b/Widgets/ro.lproj/Localizable.strings index 0f2f18c418..8a8bc2c5c3 100644 --- a/Widgets/ro.lproj/Localizable.strings +++ b/Widgets/ro.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Eroare"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Căutare vocală"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Caută sau vizitează site-urile preferate în mod privat cu o singură atingere."; diff --git a/Widgets/ru.lproj/Localizable.strings b/Widgets/ru.lproj/Localizable.strings index 137b724614..8559bd3c26 100644 --- a/Widgets/ru.lproj/Localizable.strings +++ b/Widgets/ru.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Ошибка"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Метка"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Голосовой поиск"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Поиск и посещение любимых сайтов без слежки всего в одно касание."; diff --git a/Widgets/sk.lproj/Localizable.strings b/Widgets/sk.lproj/Localizable.strings index 9f736780af..817d0fd8b6 100644 --- a/Widgets/sk.lproj/Localizable.strings +++ b/Widgets/sk.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Chyba"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Označenie"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Hlasové vyhľadávanie"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Vyhľadávajte alebo navštevujte svoje obľúbené stránky súkromne iba pomocou jedného kliknutia."; diff --git a/Widgets/sl.lproj/Localizable.strings b/Widgets/sl.lproj/Localizable.strings index 38d7e43b69..8f94f58b78 100644 --- a/Widgets/sl.lproj/Localizable.strings +++ b/Widgets/sl.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Napaka"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Oznaka"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Glasovno iskanje"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Samo z enim dotikom zasebno poiščite ali obiščite priljubljena spletna mesta."; diff --git a/Widgets/sv.lproj/Localizable.strings b/Widgets/sv.lproj/Localizable.strings index 0ce98e5edd..0d06e15192 100644 --- a/Widgets/sv.lproj/Localizable.strings +++ b/Widgets/sv.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Fel"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Etikett"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Röstsökning"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Gör sökningar eller besök dina favoritwebbplatser privat med ett enda tryck."; diff --git a/Widgets/tr.lproj/Localizable.strings b/Widgets/tr.lproj/Localizable.strings index 06ad932581..ac5a006384 100644 --- a/Widgets/tr.lproj/Localizable.strings +++ b/Widgets/tr.lproj/Localizable.strings @@ -1,3 +1,15 @@ +/* No comment provided by engineer. */ +"Connect" = "Connect"; + +/* No comment provided by engineer. */ +"Disconnect" = "Disconnect"; + +/* No comment provided by engineer. */ +"Error" = "Hata"; + +/* No comment provided by engineer. */ +"iOS 17 required" = "iOS 17 required"; + /* No comment provided by engineer. */ "Label" = "Label"; @@ -31,6 +43,9 @@ /* Title shown to the user when adding the Voice Search lock screen widget */ "lock.screen.widget.voice.title" = "Sesli Arama"; +/* No comment provided by engineer. */ +"VPN Not Configured" = "VPN Not Configured"; + /* Description of search and favorites widget in widget gallery */ "widget.gallery.search.and.favorites.description" = "Tek bir dokunuşla favori sitelerinizi gizlice arayın veya ziyaret edin."; From 154c2cb1793c0d28ace0d9544e340bd97949c5d1 Mon Sep 17 00:00:00 2001 From: Brad Slayter Date: Wed, 6 Dec 2023 09:25:49 -0600 Subject: [PATCH 09/19] Update TRK (#2200) --- DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index e73d0a25eb..3bdff36d16 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9157,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 91.0.1; + version = 91.0.2; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 13ff3bc894..5a423c6bbc 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "822e284a50ebb42f0880ebcae87dc36e007f8c31", - "version": "91.0.1" + "revision": "c871e62fd8d07f9e3136948614003fbe7e582963", + "version": "91.0.2" } }, { @@ -123,8 +123,8 @@ "repositoryURL": "https://github.com/apple/swift-argument-parser", "state": { "branch": null, - "revision": "6b2aa2748a7881eebb9f84fb10c01293e15b52ca", - "version": "0.5.0" + "revision": "8f4d2753f0e4778c76d5f05ad16c74f707390531", + "version": "1.2.3" } }, { @@ -159,8 +159,8 @@ "repositoryURL": "https://github.com/duckduckgo/TrackerRadarKit", "state": { "branch": null, - "revision": "4684440d03304e7638a2c8086895367e90987463", - "version": "1.2.1" + "revision": "a6b7ba151d9dc6684484f3785293875ec01cc1ff", + "version": "1.2.2" } }, { From 6dbae284563b38ef6b8880059e48953c28d74420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81yp?= Date: Wed, 6 Dec 2023 17:15:07 +0100 Subject: [PATCH 10/19] Update all references to develop branch with main (#2231) --- .github/workflows/adhoc.yml | 2 +- .github/workflows/alpha.yml | 6 +++--- .github/workflows/pr.yml | 8 ++++---- fastlane/Fastfile | 2 +- scripts/prepare_release.sh | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/adhoc.yml b/.github/workflows/adhoc.yml index b22eb4014f..5a2e33c100 100644 --- a/.github/workflows/adhoc.yml +++ b/.github/workflows/adhoc.yml @@ -87,4 +87,4 @@ jobs: run: | curl -s "https://app.asana.com/api/1.0/tasks/${{ steps.get-task-id.outputs.task_id }}/attachments" \ -H "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \ - --form "file=@${{ env.ipa_path }};type=application/zip" \ No newline at end of file + --form "file=@${{ env.ipa_path }};type=application/zip" diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index 01ec4a7540..5d39e3648f 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/alpha.yml @@ -39,11 +39,11 @@ jobs: steps: - - name: Assert develop branch + - name: Assert main branch run: | case "${{ github.ref }}" in - *develop) ;; - *) echo "👎 Not develop branch"; exit 1 ;; + *main) ;; + *) echo "👎 Not main branch"; exit 1 ;; esac - name: Register SSH keys for access to certificates diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index fd709ad60c..1b2e4bba26 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,7 +2,7 @@ name: PR Checks on: push: - branches: [ develop, "release/**" ] + branches: [ main, "release/**" ] pull_request: jobs: @@ -114,7 +114,7 @@ jobs: | xargs -L 1 ./scripts/report-failed-unit-test.sh -s ${{ vars.APPLE_CI_FAILING_TESTS_FAILED_TESTS_SECTION_ID }} - name: Fetch latest commit author - if: always() && github.ref_name == 'develop' + if: always() && github.ref_name == 'main' id: fetch_commit_author env: GH_TOKEN: ${{ github.token }} @@ -189,7 +189,7 @@ jobs: name: Create Asana Task needs: [swiftlint, unit-tests, shellcheck, release-build] - if: failure() && github.ref_name == 'develop' && github.run_attempt == 1 + if: failure() && github.ref_name == 'main' && github.run_attempt == 1 runs-on: ubuntu-latest @@ -206,7 +206,7 @@ jobs: name: Close Asana Task needs: [swiftlint, unit-tests, shellcheck, release-build] - if: success() && github.ref_name == 'develop' && github.run_attempt > 1 + if: success() && github.ref_name == 'main' && github.run_attempt > 1 runs-on: ubuntu-latest diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 755788c816..40b796aeb0 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -239,4 +239,4 @@ def common_deliver_arguments add_id_info_uses_idfa: false } } -end \ No newline at end of file +end diff --git a/scripts/prepare_release.sh b/scripts/prepare_release.sh index 97a6ec729c..cfc87c38dc 100755 --- a/scripts/prepare_release.sh +++ b/scripts/prepare_release.sh @@ -4,7 +4,7 @@ set -eo pipefail mute=">/dev/null 2>&1" version="$1" -release_branch_parent="develop" +release_branch_parent="main" tag=${version} hotfix_branch_parent="tags/${tag}" @@ -272,4 +272,4 @@ main() { create_pull_request } -main "$@" \ No newline at end of file +main "$@" From c8e767d6204db049016d224bc574f91b5a9dee1a Mon Sep 17 00:00:00 2001 From: Graeme Arthur Date: Wed, 6 Dec 2023 18:10:09 +0100 Subject: [PATCH 11/19] Fix spacing between buttons (#2237) --- DuckDuckGo/VPNWaitlistView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/VPNWaitlistView.swift b/DuckDuckGo/VPNWaitlistView.swift index d88e9e5557..9f912e48b6 100644 --- a/DuckDuckGo/VPNWaitlistView.swift +++ b/DuckDuckGo/VPNWaitlistView.swift @@ -87,7 +87,7 @@ struct VPNWaitlistSignUpView: View { action(.custom(.openNetworkProtectionInviteCodeScreen)) }) .buttonStyle(RoundedButtonStyle(enabled: true, style: .bordered)) - .padding(.top, 16) + .padding(.top, 8) if requestInFlight { HStack { From 315a1477ae13aa8ca5d6a9cab098e40c72dc206e Mon Sep 17 00:00:00 2001 From: Graeme Arthur Date: Wed, 6 Dec 2023 19:19:37 +0100 Subject: [PATCH 12/19] Add Geoswitching pixels (#2235) --- Core/PixelEvent.swift | 10 ++++++++++ DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 4 ++-- .../NetworkProtectionConvenienceInitialisers.swift | 3 ++- DuckDuckGo/NetworkProtectionVPNLocationViewModel.swift | 7 +++++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index 621cdbd961..b5c54cf168 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -374,6 +374,11 @@ extension Pixel { case networkProtectionWaitlistNotificationShown case networkProtectionWaitlistNotificationLaunched + case networkProtectionGeoswitchingOpened + case networkProtectionGeoswitchingSetNearest + case networkProtectionGeoswitchingSetCustom + case networkProtectionGeoswitchingNoLocations + // MARK: remote messaging pixels case remoteMessageShown @@ -889,6 +894,11 @@ extension Pixel.Event { case .networkProtectionWaitlistNotificationShown: return "m_netp_waitlist_notification_shown" case .networkProtectionWaitlistNotificationLaunched: return "m_netp_waitlist_notification_launched" + case .networkProtectionGeoswitchingOpened: return "m_netp_imp_geoswitching" + case .networkProtectionGeoswitchingSetNearest: return "m_netp_ev_geoswitching_set_nearest" + case .networkProtectionGeoswitchingSetCustom: return "m_netp_ev_geoswitching_set_custom" + case .networkProtectionGeoswitchingNoLocations: return "m_netp_ev_geoswitching_no_locations" + // MARK: remote messaging pixels case .remoteMessageShown: return "m_remote_message_shown" diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 3bdff36d16..d57d1b8478 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9157,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 91.0.2; + version = 92.0.0; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5a423c6bbc..8162b05ed5 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "c871e62fd8d07f9e3136948614003fbe7e582963", - "version": "91.0.2" + "revision": "11a5fb5e7bf1f4fb4e2a79ce8dbe2eb39b583495", + "version": "92.0.0" } }, { diff --git a/DuckDuckGo/NetworkProtectionConvenienceInitialisers.swift b/DuckDuckGo/NetworkProtectionConvenienceInitialisers.swift index 193e9c959b..18e83a83a9 100644 --- a/DuckDuckGo/NetworkProtectionConvenienceInitialisers.swift +++ b/DuckDuckGo/NetworkProtectionConvenienceInitialisers.swift @@ -83,7 +83,8 @@ extension NetworkProtectionLocationListCompositeRepository { let settings = VPNSettings(defaults: .networkProtectionGroupDefaults) self.init( environment: settings.selectedEnvironment, - tokenStore: NetworkProtectionKeychainTokenStore() + tokenStore: NetworkProtectionKeychainTokenStore(), + errorEvents: .networkProtectionAppDebugEvents ) } } diff --git a/DuckDuckGo/NetworkProtectionVPNLocationViewModel.swift b/DuckDuckGo/NetworkProtectionVPNLocationViewModel.swift index 0a13bf75cb..dfe0e162f3 100644 --- a/DuckDuckGo/NetworkProtectionVPNLocationViewModel.swift +++ b/DuckDuckGo/NetworkProtectionVPNLocationViewModel.swift @@ -22,6 +22,7 @@ import Foundation import Combine import NetworkProtection +import Core final class NetworkProtectionVPNLocationViewModel: ObservableObject { private let locationListRepository: NetworkProtectionLocationListRepository @@ -51,15 +52,18 @@ final class NetworkProtectionVPNLocationViewModel: ObservableObject { } func onViewAppeared() async { + Pixel.fire(pixel: .networkProtectionGeoswitchingOpened) await reloadList() } func onNearestItemSelection() async { + DailyPixel.fireDailyAndCount(pixel: .networkProtectionGeoswitchingSetNearest) settings.selectedLocation = .nearest await reloadList() } func onCountryItemSelection(id: String, cityId: String? = nil) async { + DailyPixel.fireDailyAndCount(pixel: .networkProtectionGeoswitchingSetCustom) let location = NetworkProtectionSelectedLocation(country: id, city: cityId) settings.selectedLocation = .location(location) await reloadList() @@ -68,6 +72,9 @@ final class NetworkProtectionVPNLocationViewModel: ObservableObject { @MainActor private func reloadList() async { guard let list = try? await locationListRepository.fetchLocationList() else { return } + if list.isEmpty { + DailyPixel.fireDailyAndCount(pixel: .networkProtectionGeoswitchingNoLocations) + } let selectedLocation = self.settings.selectedLocation let isNearestSelected = selectedLocation == .nearest From 5b605a3e04c54fd7345b4737ac00a761399f7cb1 Mon Sep 17 00:00:00 2001 From: Diego Rey Mendez Date: Wed, 6 Dec 2023 21:12:52 -0300 Subject: [PATCH 13/19] Updates BSK (#2239) Task/Issue URL: https://app.asana.com/0/0/1206114617364817/f BSK PR: duckduckgo/BrowserServicesKit#594 macOS PR: duckduckgo/macos-browser#1934 Description We no longer exclude 10.0.0.0/8 from the VPN since it was causing our DNS to be excluded as well. --- DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index d57d1b8478..906db4da5a 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9157,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 92.0.0; + version = 92.0.1; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 8162b05ed5..1e39e0adb6 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "11a5fb5e7bf1f4fb4e2a79ce8dbe2eb39b583495", - "version": "92.0.0" + "revision": "fe577c508ad4ea163075ac8fab20673d0a7565f6", + "version": "92.0.1" } }, { From cea41ad70085514f1086d23647c493d1be7d6ffa Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Thu, 7 Dec 2023 10:04:12 +0000 Subject: [PATCH 14/19] expose window.print handler to page world (#2243) Co-authored-by: Shane Osbourne --- Core/PrintingUserScript.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Core/PrintingUserScript.swift b/Core/PrintingUserScript.swift index 64c458f727..4ee0c3c947 100644 --- a/Core/PrintingUserScript.swift +++ b/Core/PrintingUserScript.swift @@ -42,6 +42,7 @@ public class PrintingUserScript: NSObject, UserScript { public var injectionTime: WKUserScriptInjectionTime = .atDocumentStart public var forMainFrameOnly: Bool = false public var messageNames: [String] = ["printHandler"] + public var requiresRunInPageContentWorld: Bool = true public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { delegate?.printingUserScriptDidRequestPrintController(self) From 35be6f3fde9f299713427cafd53baf7ece40bb5f Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 7 Dec 2023 12:26:35 +0100 Subject: [PATCH 15/19] Ensure that LinkPresentation framework is called on main thread (#2241) Task/Issue URL: https://app.asana.com/0/1201493110486074/1206113035171145/f Description: Ensure that LinkPresentation's metadata lookup API is called on main thread. Otherwise, it would keep crashing on iOS 15. --- DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 906db4da5a..50230b2f99 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9157,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 92.0.1; + version = 92.0.3; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 1e39e0adb6..c942374997 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "fe577c508ad4ea163075ac8fab20673d0a7565f6", - "version": "92.0.1" + "revision": "5ca0b3d915ab73de43744db40edf41c1d5060034", + "version": "92.0.3" } }, { From adde1366297e6fd3722fe9922462380bb5cb4250 Mon Sep 17 00:00:00 2001 From: amddg44 Date: Thu, 7 Dec 2023 12:22:17 +0000 Subject: [PATCH 16/19] Update BSK with autofill 10.0.1 (#2245) Task/Issue URL: https://app.asana.com/0/1206111598841006/1206111598841006 Autofill Release: https://github.com/duckduckgo/duckduckgo-autofill/releases/tag/10.0.1 BSK PR: duckduckgo/BrowserServicesKit#591 Description Updates Autofill to version 10.0.1. --- DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 50230b2f99..63ba24736f 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9157,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 92.0.3; + version = 92.0.4; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index c942374997..5ed910bf01 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "5ca0b3d915ab73de43744db40edf41c1d5060034", - "version": "92.0.3" + "revision": "33e55105acc9d6d69ae1326fd5c506cefb89d5cc", + "version": "92.0.4" } }, { @@ -51,8 +51,8 @@ "repositoryURL": "https://github.com/duckduckgo/duckduckgo-autofill.git", "state": { "branch": null, - "revision": "93677cc02cfe650ce7f417246afd0e8e972cd83e", - "version": "10.0.0" + "revision": "dbecae0df07650a21b5632a92fa2e498c96af7b5", + "version": "10.0.1" } }, { From da640adefb84def01711255f3615cf2455956765 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 7 Dec 2023 21:25:05 +0100 Subject: [PATCH 17/19] Always use black and white colors for the QR code (#2248) Task/Issue URL: https://app.asana.com/0/1201493110486074/1205142491450702/f Description: This is to increase compatibility with Android devices. --- .../SyncUI/Views/Internal/QRCodeView.swift | 15 +++------------ .../SyncUI/Views/SaveRecoveryKeyView.swift | 2 +- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Internal/QRCodeView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Internal/QRCodeView.swift index ca1939e9e4..48374484f6 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Internal/QRCodeView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Internal/QRCodeView.swift @@ -22,23 +22,14 @@ import UIKit import SwiftUI struct QRCodeView: View { - - enum Style { - - case light, dark - - } - let context = CIContext() let string: String let size: CGFloat - let style: Style - init(string: String, size: CGFloat, style: Style = .light) { + init(string: String, size: CGFloat) { self.string = string self.size = size - self.style = style } var body: some View { @@ -69,8 +60,8 @@ struct QRCodeView: View { } let colorParameters: [String: Any] = [ - "inputColor0": CIColor(color: style == .light ? .white : .black), - "inputColor1": CIColor(color: style == .light ? .black : .white) + "inputColor0": CIColor(color: .black), + "inputColor1": CIColor(color: .white) ] let coloredImage = outputImage.applyingFilter("CIFalseColor", parameters: colorParameters) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/SaveRecoveryKeyView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/SaveRecoveryKeyView.swift index d4a5bc3a5e..3fa628d10e 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/SaveRecoveryKeyView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/SaveRecoveryKeyView.swift @@ -41,7 +41,7 @@ public struct SaveRecoveryKeyView: View { func recoveryInfo() -> some View { VStack(spacing: 26) { HStack(spacing: 16) { - QRCodeView(string: model.key, size: 64, style: .dark) + QRCodeView(string: model.key, size: 64) Text(model.key) .fontWeight(.light) From 8bbc63822f952c237119862654c47a181df36faf Mon Sep 17 00:00:00 2001 From: Anh Do <18567+quanganhdo@users.noreply.github.com> Date: Fri, 8 Dec 2023 17:26:42 -0500 Subject: [PATCH 18/19] Report macOS NetP connection attempts & tunnel failures (#2234) Task/Issue URL: https://app.asana.com/0/0/1205948683470037/f and https://app.asana.com/0/0/1205948683470038/f - Updates BSK to support macOS pixel firing. --- Core/PixelEvent.swift | 2 ++ DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 8 ++++---- .../NetworkProtectionPacketTunnelProvider.swift | 10 +++------- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index b5c54cf168..25d9f0421d 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -313,6 +313,7 @@ extension Pixel { // MARK: Network Protection case networkProtectionActiveUser + case networkProtectionNewUser case networkProtectionRekeyCompleted case networkProtectionLatency @@ -841,6 +842,7 @@ extension Pixel.Event { // MARK: Network Protection pixels case .networkProtectionActiveUser: return "m_netp_daily_active_d" + case .networkProtectionNewUser: return "m_netp_daily_active_u" case .networkProtectionRekeyCompleted: return "m_netp_rekey_completed" case .networkProtectionLatency: return "m_netp_latency" case .networkProtectionTunnelConfigurationNoServerRegistrationInfo: return "m_netp_tunnel_config_error_no_server_registration_info" diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 63ba24736f..315315999a 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9157,7 +9157,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 92.0.4; + version = 92.1.0; }; }; C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5ed910bf01..88f08bd738 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/DuckDuckGo/BrowserServicesKit", "state": { "branch": null, - "revision": "33e55105acc9d6d69ae1326fd5c506cefb89d5cc", - "version": "92.0.4" + "revision": "6d67e41feb5d7d22fec40fcede6b82eb88673900", + "version": "92.1.0" } }, { @@ -123,8 +123,8 @@ "repositoryURL": "https://github.com/apple/swift-argument-parser", "state": { "branch": null, - "revision": "8f4d2753f0e4778c76d5f05ad16c74f707390531", - "version": "1.2.3" + "revision": "c8ed701b513cf5177118a175d85fbbbcd707ab41", + "version": "1.3.0" } }, { diff --git a/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift b/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift index 4b56523f4e..09220a415e 100644 --- a/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift +++ b/PacketTunnelProvider/NetworkProtection/NetworkProtectionPacketTunnelProvider.swift @@ -38,13 +38,9 @@ final class NetworkProtectionPacketTunnelProvider: PacketTunnelProvider { switch event { case .userBecameActive: DailyPixel.fire(pixel: .networkProtectionActiveUser) - case .reportLatency(ms: let ms, server: let server, networkType: let networkType): - let params = [ - PixelParameters.latency: String(ms), - PixelParameters.server: server, - PixelParameters.networkType: networkType.rawValue - ] - Pixel.fire(pixel: .networkProtectionLatency, withAdditionalParameters: params) + case .reportLatency, .reportTunnelFailure, .reportConnectionAttempt: + // TODO: Fire these pixels + break case .rekeyCompleted: Pixel.fire(pixel: .networkProtectionRekeyCompleted) } From b2d8f64d1535bd70a82376a817802baf4bc216bc Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Fri, 8 Dec 2023 18:14:11 -0800 Subject: [PATCH 19/19] Enable NetP in production builds (#2232) Task/Issue URL: https://app.asana.com/0/0/1206108886603214/f Tech Design URL: CC: Description: This PR enables NetP in production. I am deliberately keeping the NETWORK_PROTECTION flag in place for now in the off chance that something comes up in review that prevents this from shipping, we need to have the ability to shut it off if necessary. --- Core/FeatureFlag.swift | 8 +++++++- DuckDuckGo.xcodeproj/project.pbxproj | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Core/FeatureFlag.swift b/Core/FeatureFlag.swift index 2f0819907d..dfe79f7d48 100644 --- a/Core/FeatureFlag.swift +++ b/Core/FeatureFlag.swift @@ -39,8 +39,14 @@ public enum FeatureFlag: String { extension FeatureFlag: FeatureFlagSourceProviding { public var source: FeatureFlagSource { switch self { - case .debugMenu, .sync, .appTrackingProtection, .networkProtection, .networkProtectionWaitlistAccess, .networkProtectionWaitlistActive: + case .debugMenu, .sync, .appTrackingProtection: return .internalOnly + case .networkProtection: + return .remoteReleasable(.feature(.networkProtection)) + case .networkProtectionWaitlistAccess: + return .remoteReleasable(.subfeature(NetworkProtectionSubfeature.waitlist)) + case .networkProtectionWaitlistActive: + return .remoteReleasable(.subfeature(NetworkProtectionSubfeature.waitlistBetaActive)) case .autofillCredentialInjecting: return .remoteReleasable(.subfeature(AutofillSubfeature.credentialsAutofill)) case .autofillCredentialsSaving: diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 315315999a..4add96f138 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -6122,7 +6122,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Conditionally embeds PacketTunnelProvider extension for Debug and Alpha builds.\n\n# Conditionally embeds the PacketTunnelProvider extension for debug builds.\\n# To be moved to the Embed App Extensions phase on release.\n\nif [ \"${CONFIGURATION}\" = \"Debug\" ] || [ \"${CONFIGURATION}\" = \"Alpha\" ]; then\n# Copy the extension \n rsync -r --copy-links \"${CONFIGURATION_BUILD_DIR}/PacketTunnelProvider.appex\" \"${CONFIGURATION_BUILD_DIR}/${PLUGINS_FOLDER_PATH}\"\nfi\n"; + shellScript = "# Conditionally embeds PacketTunnelProvider extension for Debug and Alpha builds.\n\n# Conditionally embeds the PacketTunnelProvider extension for debug builds.\\n# To be moved to the Embed App Extensions phase on release.\n\nif [ \"${CONFIGURATION}\" = \"Debug\" ] || [ \"${CONFIGURATION}\" = \"Release\" ] || [ \"${CONFIGURATION}\" = \"Alpha\" ]; then\n# Copy the extension \n rsync -r --copy-links \"${CONFIGURATION_BUILD_DIR}/PacketTunnelProvider.appex\" \"${CONFIGURATION_BUILD_DIR}/${PLUGINS_FOLDER_PATH}\"\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -8102,6 +8102,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = NETWORK_PROTECTION; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2";