From e5612622c275ec67b8807e59c818a5c88f0840f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20=C5=9Apiewak?= Date: Thu, 8 Aug 2024 13:07:10 +0200 Subject: [PATCH 01/17] Show improved Dax onboarding on New Tab Page (#3203) Task/Issue URL: https://app.asana.com/0/72649045549333/1207981662892269/f Tech Design URL: CC: @alessandroboron @SabrinaTardio **Description**: Integration of the new (improved) onboarding with New Tab Page. Previous Dax onboarding is not integrated since it will be removed after the experiment. NTP will start to roll out after the onboarding experiment is concluded. **Steps to test this PR**: 1. Edit `DefaultVariantManager` so `.newOnboardingIntro` is always enabled. 2. Edit `NewTabPageManager.isNewTabPageSectionsEnabled` so it returns `true`. 3. Do a clean install and go through onboarding, verify if it looks as expected. --- .../HomeViewController+DaxDialogs.swift | 5 +- DuckDuckGo/MainViewController.swift | 7 +- DuckDuckGo/NewTabPageModel.swift | 10 +++ DuckDuckGo/NewTabPageView.swift | 10 ++- DuckDuckGo/NewTabPageViewController.swift | 70 ++++++++++++++++++- 5 files changed, 93 insertions(+), 9 deletions(-) diff --git a/DuckDuckGo/HomeViewController+DaxDialogs.swift b/DuckDuckGo/HomeViewController+DaxDialogs.swift index c9dd772944..5f22666e74 100644 --- a/DuckDuckGo/HomeViewController+DaxDialogs.swift +++ b/DuckDuckGo/HomeViewController+DaxDialogs.swift @@ -67,16 +67,17 @@ extension HomeViewController { hostingController = UIHostingController(rootView: daxDialogView) guard let hostingController else { return } hostingController.view.backgroundColor = .clear + addChild(hostingController) view.addSubview(hostingController.view) - hostingController.didMove(toParent: self) hostingController.view.translatesAutoresizingMaskIntoConstraints = false - hideLogo() NSLayoutConstraint.activate([ hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) + hostingController.didMove(toParent: self) + hideLogo() configureCollectionView() } diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index 4dc2268ffe..4dc4a48666 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -765,13 +765,17 @@ class MainViewController: UIViewController { fatalError("No tab model") } + let newTabDaxDialogFactory = NewTabDaxDialogFactory(delegate: self, contextualOnboardingLogic: DaxDialogs.shared) if homeTabManager.isNewTabPageSectionsEnabled { let controller = NewTabPageViewController(tab: tabModel, interactionModel: favoritesViewModel, syncService: syncService, syncBookmarksAdapter: syncDataProviders.bookmarksAdapter, homePageMessagesConfiguration: homePageConfiguration, - privacyProDataReporting: privacyProDataReporter) + privacyProDataReporting: privacyProDataReporter, + variantManager: variantManager, + newTabDialogFactory: newTabDaxDialogFactory, + newTabDialogTypeProvider: DaxDialogs.shared) controller.delegate = self controller.shortcutsDelegate = self @@ -782,7 +786,6 @@ class MainViewController: UIViewController { viewCoordinator.logoContainer.isHidden = true adjustNewTabPageSafeAreaInsets(for: appSettings.currentAddressBarPosition) } else { - let newTabDaxDialogFactory = NewTabDaxDialogFactory(delegate: self, contextualOnboardingLogic: DaxDialogs.shared) let homePageDependencies = HomePageDependencies(homePageConfiguration: homePageConfiguration, model: tabModel, favoritesViewModel: favoritesViewModel, diff --git a/DuckDuckGo/NewTabPageModel.swift b/DuckDuckGo/NewTabPageModel.swift index a8ff0d2e70..fc002768d5 100644 --- a/DuckDuckGo/NewTabPageModel.swift +++ b/DuckDuckGo/NewTabPageModel.swift @@ -22,6 +22,7 @@ import Foundation final class NewTabPageModel: ObservableObject { @Published private(set) var isIntroMessageVisible: Bool + @Published private(set) var isOnboarding: Bool private let appSettings: AppSettings @@ -29,6 +30,7 @@ final class NewTabPageModel: ObservableObject { self.appSettings = appSettings isIntroMessageVisible = appSettings.newTabPageIntroMessageEnabled ?? false + isOnboarding = false } func increaseIntroMessageCounter() { @@ -42,4 +44,12 @@ final class NewTabPageModel: ObservableObject { appSettings.newTabPageIntroMessageEnabled = false isIntroMessageVisible = false } + + func startOnboarding() { + isOnboarding = true + } + + func finishOnboarding() { + isOnboarding = false + } } diff --git a/DuckDuckGo/NewTabPageView.swift b/DuckDuckGo/NewTabPageView.swift index 19d80086ab..90d6ea6331 100644 --- a/DuckDuckGo/NewTabPageView.swift +++ b/DuckDuckGo/NewTabPageView.swift @@ -115,7 +115,7 @@ struct NewTabPageView: View { !shortcutsSettingsModel.enabledItems.isEmpty } - var body: some View { + private var mainView: some View { GeometryReader { proxy in ScrollView { VStack { @@ -158,10 +158,16 @@ struct NewTabPageView: View { }, content: { NavigationView { NewTabPageSettingsView(shortcutsSettingsModel: shortcutsSettingsModel, - sectionsSettingsModel: sectionsSettingsModel) + sectionsSettingsModel: sectionsSettingsModel) } }) } + + var body: some View { + if !newTabPageModel.isOnboarding { + mainView + } + } } private extension View { diff --git a/DuckDuckGo/NewTabPageViewController.swift b/DuckDuckGo/NewTabPageViewController.swift index 71f0ac7af7..a7a490ef64 100644 --- a/DuckDuckGo/NewTabPageViewController.swift +++ b/DuckDuckGo/NewTabPageViewController.swift @@ -20,12 +20,16 @@ import SwiftUI import DDGSync import Bookmarks +import BrowserServicesKit import Core final class NewTabPageViewController: UIHostingController>, NewTabPage { private let syncService: DDGSyncing private let syncBookmarksAdapter: SyncBookmarksAdapter + private let variantManager: VariantManager + private let newTabDialogFactory: any NewTabDaxDialogProvider + private let newTabDialogTypeProvider: NewTabDialogSpecProvider private(set) lazy var faviconsFetcherOnboarding = FaviconsFetcherOnboarding(syncService: syncService, syncBookmarksAdapter: syncBookmarksAdapter) @@ -37,16 +41,24 @@ final class NewTabPageViewController: UIHostingController? + init(tab: Tab, interactionModel: FavoritesListInteracting, syncService: DDGSyncing, syncBookmarksAdapter: SyncBookmarksAdapter, homePageMessagesConfiguration: HomePageMessagesConfiguration, - privacyProDataReporting: PrivacyProDataReporting? = nil) { + privacyProDataReporting: PrivacyProDataReporting? = nil, + variantManager: VariantManager, + newTabDialogFactory: any NewTabDaxDialogProvider, + newTabDialogTypeProvider: NewTabDialogSpecProvider) { self.tab = tab self.syncService = syncService self.syncBookmarksAdapter = syncBookmarksAdapter + self.variantManager = variantManager + self.newTabDialogFactory = newTabDialogFactory + self.newTabDialogTypeProvider = newTabDialogTypeProvider newTabPageModel = NewTabPageModel() shortcutsSettingsModel = NewTabPageShortcutsSettingsModel() @@ -71,6 +83,8 @@ final class NewTabPageViewController: UIHostingController Date: Thu, 8 Aug 2024 13:25:20 +0200 Subject: [PATCH 02/17] Break DuckPlayer ref cycle (#3206) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task/Issue URL: https://app.asana.com/0/414709148257752/1207998631270910/f **Description**: Breaks reference cycle between DuckPlayer and TabViewController, which can contribute to containers not being properly cleaned up **Steps to test this PR**: 1. Fire up the app, navigate away 2. Check Memory Graph, confirm the duckPlayer property in TabViewController is now a weak reference, 3. Fire button everything. 4. There should not be leftovers. --- DuckDuckGo/DuckPlayer/DuckNavigationHandling.swift | 2 +- DuckDuckGo/DuckPlayer/DuckPlayer.swift | 4 ++-- DuckDuckGo/DuckPlayer/DuckPlayerSettings.swift | 2 +- DuckDuckGo/TabViewController.swift | 10 ++++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/DuckDuckGo/DuckPlayer/DuckNavigationHandling.swift b/DuckDuckGo/DuckPlayer/DuckNavigationHandling.swift index 25365d0266..6bb9af7d13 100644 --- a/DuckDuckGo/DuckPlayer/DuckNavigationHandling.swift +++ b/DuckDuckGo/DuckPlayer/DuckNavigationHandling.swift @@ -19,7 +19,7 @@ import WebKit -protocol DuckNavigationHandling { +protocol DuckNavigationHandling: AnyObject { var referrer: DuckPlayerReferrer { get set } var duckPlayer: DuckPlayerProtocol { get } func handleNavigation(_ navigationAction: WKNavigationAction, webView: WKWebView) diff --git a/DuckDuckGo/DuckPlayer/DuckPlayer.swift b/DuckDuckGo/DuckPlayer/DuckPlayer.swift index a258d80a02..62f974265b 100644 --- a/DuckDuckGo/DuckPlayer/DuckPlayer.swift +++ b/DuckDuckGo/DuckPlayer/DuckPlayer.swift @@ -78,7 +78,7 @@ public enum DuckPlayerReferrer { case youtube, other } -protocol DuckPlayerProtocol { +protocol DuckPlayerProtocol: AnyObject { var settings: DuckPlayerSettingsProtocol { get } var hostView: UIViewController? { get } @@ -103,7 +103,7 @@ final class DuckPlayer: DuckPlayerProtocol { static let commonName = "Duck Player" private(set) var settings: DuckPlayerSettingsProtocol - private(set) var hostView: UIViewController? + private(set) weak var hostView: UIViewController? init(settings: DuckPlayerSettingsProtocol = DuckPlayerSettings()) { self.settings = settings diff --git a/DuckDuckGo/DuckPlayer/DuckPlayerSettings.swift b/DuckDuckGo/DuckPlayer/DuckPlayerSettings.swift index 5e2a43d7bb..b187b2cb1e 100644 --- a/DuckDuckGo/DuckPlayer/DuckPlayerSettings.swift +++ b/DuckDuckGo/DuckPlayer/DuckPlayerSettings.swift @@ -64,7 +64,7 @@ enum DuckPlayerMode: Equatable, Codable, CustomStringConvertible, CaseIterable { } } -protocol DuckPlayerSettingsProtocol { +protocol DuckPlayerSettingsProtocol: AnyObject { var duckPlayerSettingsPublisher: AnyPublisher { get } var mode: DuckPlayerMode { get } diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 6a326deb5e..92327ec970 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -294,7 +294,7 @@ class TabViewController: UIViewController { bookmarksDatabase: CoreDataDatabase, historyManager: HistoryManaging, syncService: DDGSyncing, - duckPlayer: DuckPlayerProtocol, + duckPlayer: DuckPlayerProtocol?, privacyProDataReporter: PrivacyProDataReporting, contextualOnboardingPresenter: ContextualOnboardingPresenting, contextualOnboardingLogic: ContextualOnboardingLogic, @@ -323,7 +323,7 @@ class TabViewController: UIViewController { let historyManager: HistoryManaging let historyCapture: HistoryCapture - var duckPlayer: DuckPlayerProtocol + weak var duckPlayer: DuckPlayerProtocol? var duckPlayerNavigationHandler: DuckNavigationHandling? let contextualOnboardingPresenter: ContextualOnboardingPresenting @@ -336,7 +336,7 @@ class TabViewController: UIViewController { bookmarksDatabase: CoreDataDatabase, historyManager: HistoryManaging, syncService: DDGSyncing, - duckPlayer: DuckPlayerProtocol, + duckPlayer: DuckPlayerProtocol?, privacyProDataReporter: PrivacyProDataReporting, contextualOnboardingPresenter: ContextualOnboardingPresenting, contextualOnboardingLogic: ContextualOnboardingLogic, @@ -348,7 +348,9 @@ class TabViewController: UIViewController { self.historyCapture = HistoryCapture(historyManager: historyManager) self.syncService = syncService self.duckPlayer = duckPlayer - self.duckPlayerNavigationHandler = DuckPlayerNavigationHandler(duckPlayer: duckPlayer) + if let duckPlayer { + self.duckPlayerNavigationHandler = DuckPlayerNavigationHandler(duckPlayer: duckPlayer) + } self.privacyProDataReporter = privacyProDataReporter self.contextualOnboardingPresenter = contextualOnboardingPresenter self.contextualOnboardingLogic = contextualOnboardingLogic From 65fd1fca2f309156cec97f3777802a6ccf8d204d Mon Sep 17 00:00:00 2001 From: Christopher Brind Date: Thu, 8 Aug 2024 14:35:49 +0100 Subject: [PATCH 03/17] Release 7.132.0-1 (#3208) Please make sure all GH checks passed before merging. It can take around 20 minutes. Briefly review this PR to see if there are no issues or red flags and then merge it. --- DuckDuckGo.xcodeproj/project.pbxproj | 56 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index baed9c07e0..659000521c 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -8692,7 +8692,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProvider.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -8729,7 +8729,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -8819,7 +8819,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -8846,7 +8846,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -8995,7 +8995,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9020,7 +9020,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; INFOPLIST_FILE = DuckDuckGo/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9089,7 +9089,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9123,7 +9123,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9156,7 +9156,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9186,7 +9186,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9496,7 +9496,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9527,7 +9527,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9555,7 +9555,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9588,7 +9588,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9618,7 +9618,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProviderAlpha.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -9651,11 +9651,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 0; + DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -9888,7 +9888,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9915,7 +9915,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9947,7 +9947,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9984,7 +9984,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -10019,7 +10019,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -10054,11 +10054,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 0; + DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10231,11 +10231,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 0; + DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10264,10 +10264,10 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 0; + DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From d2a51f868a89efbaf232180e8c275d4e259441ec Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 8 Aug 2024 22:36:31 -0700 Subject: [PATCH 04/17] Restore attribution flag (#3197) Task/Issue URL: https://app.asana.com/0/1206226850447395/1207995359277342/f Tech Design URL: CC: Description: This PR re-enabled the attribution flag, see Asana task for details. --- DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift b/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift index a33ba45efb..aa4e3660a7 100644 --- a/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift +++ b/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift @@ -22,7 +22,7 @@ import Core final actor AdAttributionPixelReporter { - static let isAdAttributionReportingEnabled = false + static let isAdAttributionReportingEnabled = true static var shared = AdAttributionPixelReporter() From 85d4f62b51c91293c747358b135e7681c733dbd8 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 8 Aug 2024 22:36:31 -0700 Subject: [PATCH 05/17] Restore attribution flag (#3197) Task/Issue URL: https://app.asana.com/0/1206226850447395/1207995359277342/f Tech Design URL: CC: Description: This PR re-enabled the attribution flag, see Asana task for details. --- DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift b/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift index a33ba45efb..aa4e3660a7 100644 --- a/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift +++ b/DuckDuckGo/AdAttribution/AdAttributionPixelReporter.swift @@ -22,7 +22,7 @@ import Core final actor AdAttributionPixelReporter { - static let isAdAttributionReportingEnabled = false + static let isAdAttributionReportingEnabled = true static var shared = AdAttributionPixelReporter() From ba1cf1c67cbb7b4baffe5438f82f2417e2e94723 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 8 Aug 2024 22:59:22 -0700 Subject: [PATCH 06/17] Release 7.132.0-2 (#3211) Please make sure all GH checks passed before merging. It can take around 20 minutes. Briefly review this PR to see if there are no issues or red flags and then merge it. --- DuckDuckGo.xcodeproj/project.pbxproj | 56 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 659000521c..0571208eb5 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -8692,7 +8692,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProvider.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -8729,7 +8729,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -8819,7 +8819,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -8846,7 +8846,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -8995,7 +8995,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9020,7 +9020,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; INFOPLIST_FILE = DuckDuckGo/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9089,7 +9089,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9123,7 +9123,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9156,7 +9156,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9186,7 +9186,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9496,7 +9496,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9527,7 +9527,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9555,7 +9555,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9588,7 +9588,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9618,7 +9618,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProviderAlpha.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -9651,11 +9651,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -9888,7 +9888,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9915,7 +9915,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9947,7 +9947,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9984,7 +9984,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -10019,7 +10019,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -10054,11 +10054,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10231,11 +10231,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10264,10 +10264,10 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From 9809e9ae8bc40b266ffd43646d96c6ef0b117c6f Mon Sep 17 00:00:00 2001 From: Fernando Bunn Date: Fri, 9 Aug 2024 09:49:36 +0100 Subject: [PATCH 07/17] Ship review feedback for contingency message (#3209) Task/Issue URL: https://app.asana.com/0/1142021229838617/1208007523482127/f **Description**: Small feedback items from ship review for the DuckPlayer contingency message --- .../WarningYoutube.pdf | Bin 1930 -> 1888 bytes DuckDuckGo/SettingsDuckPlayerView.swift | 37 +++++++++--------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/DuckDuckGo/DuckPlayer/Resources/DuckPlayer.xcassets/WarningYoutube.imageset/WarningYoutube.pdf b/DuckDuckGo/DuckPlayer/Resources/DuckPlayer.xcassets/WarningYoutube.imageset/WarningYoutube.pdf index ef64b0d8737aa0062262048643a8d5fe1a6e7bec..b98415c10867e3576999c949d99ff36de44c3702 100644 GIT binary patch delta 1319 zcmV+?1=#wE58w`vWq-YwNsb*i42Ji0in>6{BB^nk1jstc5gr^QK-)lIAm`7=8YJ2M z0H-&uO|yTA6ld~%_~qlje?LC{{_9Ws&wp$m=6{bb+drFxczk=jiI+i*GbuNvIY_Uq zmi_VR3GX1jJU(wGAwx&K;H3MfXW;8*7E;QV(*!Mr-mF5w(0`h!?UsWjh_ai@uvGWQ zW;Mi`JFKFi*6znC2bJ0ktcMm=RQH?@$*4B5$Ci8Oxoge~`nnYj(o!qy-D08pr@Nw1 zEm`Vb(k)Z%yqA#q3`OS2-{e5G<(f~KT1whY!K@c#YA8i&!2=cUTvK$J61pbSxThF$ zk%%7XUJuXg34hDASeHHH4II;KPq-AQ7~EMyl$2B6Q$psU5pi&JTKx`&ho7JV)^h4? z!3x)k75VDv6f{XR^cgy$OwH9$dzd1@tjRYvpQ(Tw-8oWpF%W0<^i4ZmGA9iGL&|PoUOJe*!(WzqUWO&)aYR zw-ysJy48$dDvEUBskIj05?+f#&Piyd6shW>rKi4kL=s@n)AO8*r2bXu3wRQ6zrI)P zS%3W|&^nUVkOym_<~oEYf9Z$TM4m&wr32AI23ms@qjT&^7Fx;FF@lb7;TX_kyBO|1 z12%~3=zpn%HKWE$7XxK8^qCwJBc}$-L?`v^bjo>mdX(W_gb4YO#T`A)-xBWV*|Kip z)5KzE^j8zwuEdmy&3JZPABel^xV~TuaU2N*|ME=%&c|QA^_k;3Ie#CG>jR-b-PZ>; zh_^>W!22EBLg6nJPE)z4?>klljlx^pC6Nqwo_~^4B`_0&iKIUoLuv%gb?K=kI=%!U zjv%LtXoN-$wQ^vuo6D%uGBUiM9w~y6`H{W zNztk~!i?nei4RCu?ZG> zhkt2cpl=C}k8cu!V%XEA3k3ZI(^_K|4~+EbMVU%&b!XZ^7@GzgNWvjm@sZEET3ceC z`1NX}`9N?q+YK=qe9W{`^D%Q69bJ?y02dX!>TQ@N&o%sT8j7DIPqV5N2!In|9pZzy z_#U1OB37dd>y}%|?yCzT?|Q9PIlDMnbbku^yA~vMwbTi({8YUch*Wr$C9Z zsi27W!`k@=SAzQbR@r(d)`AwHRZ4>m?#8a$8{zU&Xe}0I#ml)+!AHpmTWN7C2S)id zegV1W3-{u=g7~Po>uC8B*_Iq8$ruRy{P`MWb@g8X3;$y09rXVIGxfTKlTZa80x>zW zaRr3|J2N*RFfcGMFd%LUFfcGMFfcJQHZUMCFfcGMAZ`jUFfcGMFflbVGaxW9FfcG6 dZVE6kFfcGMF*YzalQ9QS2{tx13MC~)PezdndW`@8 delta 1372 zcmV-i1*7`l4vG(uWq+lXOO7Np5Qg`8id-YL$KkNUjx8Xu298jg5lB5Fp^-R0Uu0$3 z*$)8&UUWzO>3F~V;m41E{(k%T%TM3$Km59VSif#xw?8&X`8a!i5Kohu--bUZ1si#Y z?6=QbP6G_|E%EjCWz*EM)Zu$gE-nzC!McxOePK0aw^B1icYiNZAhf8}xYMkahOUi| zeN>B&*}JMhoQNjXR$E9q`AR}V(*d6(cPUn}tXlV4_h+!iwd!D)nu|hoZ(a-n;Ere& z4#dfK+X#$^_8h`o+prd~Iw48sy=&*&$yt&Z_JdHZeqw0+rr{txNYWI5x?zes0^I2Wz^(@07Zb0?oI4OI%_ z0zPk+YHvlZH~T{)kn8BuE|90@!?NPt0wt%?M)k5UabT2BC1^|U!XnNO6Bio!HdK}u zcZKA5uI0c^Jqx=Sw7_Zjk~iI3iYIjYA6WszH)`mgvwuRlwc<3?lhkBdnki|?sg10i z0tLk&%O%))@68UZ^g+|1TzV6|-#f9x=Rs5I6^$^~KB(<0Dl}p1h3J5tdJ1l+C_aLn z7DWRSAyk2qV=aOq&!FA;K`22RK6Rt6CpJ$_iJ5I>z0Jxk*gVg;DsHEH($+6QwYVx0>xLv8PJAcV@=a4R`cDv)}i^;Km40 z+GaqP7$(F*0zLSO)+aP76gQlA7hg;F%~Ew=xP_5A2~Q zynnD>SVq$#WWE!**dbVeDAp@U0L?AR3R5Llv#~%tf{1$%gl1eJf80XP1evjl5F)e0 zi9BvDy$gdI&%EK%1qFjRZZ3%vyQ-cbHk>9-dCQThctTNGpT2wD!K-m6F~3EIj-F4nz=-ML?*7mP~DUYUh2FfP>*opV9SmU?Cw zVmXUa3ptvrt;H5S?k()LF$Faa{WMXQgHbCYROdpK9%HjHb)`hT54T-;AT$)kdw*&4 z7R#EEMuWTLjv{)E0FPZ+TZ6qAk2-?S$c{is;XQSZCn2`5GR7*~-~>6bk=@zr@x0?V z=RFA4w;*{vAKr{=sal6<; z_ZSdUDDlWT6mUX?5b+=C9q7Wkz<&u5gR_FB(rc-q>$GjwBv#%XxRmb0&sF2J=8Q+3 zb+*Fx_t-VS3vE~ Date: Fri, 9 Aug 2024 11:03:01 +0100 Subject: [PATCH 08/17] fix content inset when keyboard is visible (#3207) Task/Issue URL: https://app.asana.com/0/392891325557410/1207990702991361/f Tech Design URL: CC: **Description**: Fix webview content inset when address bar is in bottom position. **Steps to test this PR**: 1. Visit https://duck.ai with address bar in bottom and top position and make sure the view adjusts accordingly. --- DuckDuckGo/MainViewController.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index 4dc4a48666..13697f4d82 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -613,6 +613,10 @@ class MainViewController: UIViewController { if self.appSettings.currentAddressBarPosition.isBottom { self.viewCoordinator.constraints.navigationBarContainerHeight.constant = max(52, keyboardHeight) + + // Temporary fix, see https://app.asana.com/0/392891325557410/1207990702991361/f + self.currentTab?.webView.scrollView.contentInset = .init(top: 0, left: 0, bottom: keyboardHeight > 0 ? 52 : 0, right: 0) + UIView.animate(withDuration: duration, delay: 0, options: animationCurve) { self.viewCoordinator.navigationBarContainer.superview?.layoutIfNeeded() } From c1566f9fe51fde4ab58bd05091877b7deee8944e Mon Sep 17 00:00:00 2001 From: Chris Brind Date: Fri, 9 Aug 2024 11:04:17 +0100 Subject: [PATCH 09/17] cherry pick temporary fix for https://app.asana.com/0/414235014887631/1207990702991361/f --- DuckDuckGo/MainViewController.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index db7ef718a7..395c5dcac6 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -613,6 +613,10 @@ class MainViewController: UIViewController { if self.appSettings.currentAddressBarPosition.isBottom { self.viewCoordinator.constraints.navigationBarContainerHeight.constant = max(52, keyboardHeight) + + // Temporary fix, see https://app.asana.com/0/392891325557410/1207990702991361/f + self.currentTab?.webView.scrollView.contentInset = .init(top: 0, left: 0, bottom: keyboardHeight > 0 ? 52 : 0, right: 0) + UIView.animate(withDuration: duration, delay: 0, options: animationCurve) { self.viewCoordinator.navigationBarContainer.superview?.layoutIfNeeded() } From 4ba00b610558ca3a4b3a001764c62bad8f0dabcc Mon Sep 17 00:00:00 2001 From: Christopher Brind Date: Fri, 9 Aug 2024 11:24:31 +0100 Subject: [PATCH 10/17] Release 7.132.0-3 (#3213) Please make sure all GH checks passed before merging. It can take around 20 minutes. Briefly review this PR to see if there are no issues or red flags and then merge it. --- DuckDuckGo.xcodeproj/project.pbxproj | 56 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 0571208eb5..0ea67f19ab 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -8692,7 +8692,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProvider.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -8729,7 +8729,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -8819,7 +8819,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -8846,7 +8846,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -8995,7 +8995,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9020,7 +9020,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; INFOPLIST_FILE = DuckDuckGo/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9089,7 +9089,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9123,7 +9123,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9156,7 +9156,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9186,7 +9186,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9496,7 +9496,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9527,7 +9527,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9555,7 +9555,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9588,7 +9588,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9618,7 +9618,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProviderAlpha.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -9651,11 +9651,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 2; + DYLIB_CURRENT_VERSION = 3; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -9888,7 +9888,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9915,7 +9915,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9947,7 +9947,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9984,7 +9984,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -10019,7 +10019,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -10054,11 +10054,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 2; + DYLIB_CURRENT_VERSION = 3; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10231,11 +10231,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 2; + DYLIB_CURRENT_VERSION = 3; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10264,10 +10264,10 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 2; + DYLIB_CURRENT_VERSION = 3; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From 2f1a30bd02cc71ce0c928c8ff041aa4d78631b5a Mon Sep 17 00:00:00 2001 From: Daniel Bernal Date: Fri, 9 Aug 2024 15:14:04 +0200 Subject: [PATCH 11/17] [DuckPlayer] 16. Localization Updates (#3200) Task/Issue URL: https://app.asana.com/0/1204099484721401/1207943158975717/f --- DuckDuckGo/bg.lproj/Bookmarks.strings | 2 +- DuckDuckGo/bg.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/cs.lproj/Bookmarks.strings | 2 +- DuckDuckGo/cs.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/da.lproj/Bookmarks.strings | 2 +- DuckDuckGo/da.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/de.lproj/Bookmarks.strings | 2 +- DuckDuckGo/de.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/el.lproj/Bookmarks.strings | 2 +- DuckDuckGo/el.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/es.lproj/Bookmarks.strings | 2 +- DuckDuckGo/es.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/et.lproj/Bookmarks.strings | 2 +- DuckDuckGo/et.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/fi.lproj/Bookmarks.strings | 2 +- DuckDuckGo/fi.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/fr.lproj/Bookmarks.strings | 2 +- DuckDuckGo/fr.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/hr.lproj/Bookmarks.strings | 2 +- DuckDuckGo/hr.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/hu.lproj/Bookmarks.strings | 2 +- DuckDuckGo/hu.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/it.lproj/Bookmarks.strings | 2 +- DuckDuckGo/it.lproj/Localizable.strings | 349 ++++++++--------- DuckDuckGo/lt.lproj/Bookmarks.strings | 2 +- DuckDuckGo/lt.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/lv.lproj/Bookmarks.strings | 2 +- DuckDuckGo/lv.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/nb.lproj/Bookmarks.strings | 2 +- DuckDuckGo/nb.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/nl.lproj/Bookmarks.strings | 2 +- DuckDuckGo/nl.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/pl.lproj/Bookmarks.strings | 2 +- DuckDuckGo/pl.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/pt.lproj/Bookmarks.strings | 2 +- DuckDuckGo/pt.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/ro.lproj/Bookmarks.strings | 2 +- DuckDuckGo/ro.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/ru.lproj/Bookmarks.strings | 2 +- DuckDuckGo/ru.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/sk.lproj/Bookmarks.strings | 2 +- DuckDuckGo/sk.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/sl.lproj/Bookmarks.strings | 2 +- DuckDuckGo/sl.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/sv.lproj/Bookmarks.strings | 2 +- DuckDuckGo/sv.lproj/Localizable.strings | 355 ++++++++---------- DuckDuckGo/tr.lproj/Bookmarks.strings | 2 +- DuckDuckGo/tr.lproj/Localizable.strings | 355 ++++++++---------- .../Resources/bg.lproj/Localizable.strings | 8 +- .../Resources/cs.lproj/Localizable.strings | 8 +- .../Resources/da.lproj/Localizable.strings | 8 +- .../Resources/de.lproj/Localizable.strings | 8 +- .../Resources/el.lproj/Localizable.strings | 8 +- .../Resources/es.lproj/Localizable.strings | 8 +- .../Resources/et.lproj/Localizable.strings | 8 +- .../Resources/fi.lproj/Localizable.strings | 8 +- .../Resources/fr.lproj/Localizable.strings | 8 +- .../Resources/hr.lproj/Localizable.strings | 8 +- .../Resources/hu.lproj/Localizable.strings | 8 +- .../Resources/it.lproj/Localizable.strings | 8 +- .../Resources/lt.lproj/Localizable.strings | 8 +- .../Resources/lv.lproj/Localizable.strings | 8 +- .../Resources/nb.lproj/Localizable.strings | 8 +- .../Resources/nl.lproj/Localizable.strings | 8 +- .../Resources/pl.lproj/Localizable.strings | 8 +- .../Resources/pt.lproj/Localizable.strings | 8 +- .../Resources/ro.lproj/Localizable.strings | 8 +- .../Resources/ru.lproj/Localizable.strings | 8 +- .../Resources/sk.lproj/Localizable.strings | 8 +- .../Resources/sl.lproj/Localizable.strings | 8 +- .../Resources/sv.lproj/Localizable.strings | 8 +- .../Resources/tr.lproj/Localizable.strings | 8 +- Widgets/bg.lproj/Localizable.strings | 12 +- Widgets/cs.lproj/Localizable.strings | 12 +- Widgets/da.lproj/Localizable.strings | 14 +- Widgets/de.lproj/Localizable.strings | 12 +- Widgets/el.lproj/Localizable.strings | 12 +- Widgets/es.lproj/Localizable.strings | 14 +- Widgets/et.lproj/Localizable.strings | 12 +- Widgets/fi.lproj/Localizable.strings | 14 +- Widgets/fr.lproj/Localizable.strings | 14 +- Widgets/hr.lproj/Localizable.strings | 12 +- Widgets/hu.lproj/Localizable.strings | 14 +- Widgets/it.lproj/Localizable.strings | 12 +- Widgets/lt.lproj/Localizable.strings | 14 +- Widgets/lv.lproj/Localizable.strings | 14 +- Widgets/nb.lproj/Localizable.strings | 12 +- Widgets/nl.lproj/Localizable.strings | 14 +- Widgets/pl.lproj/Localizable.strings | 12 +- Widgets/pt.lproj/Localizable.strings | 12 +- Widgets/ro.lproj/Localizable.strings | 12 +- Widgets/ru.lproj/Localizable.strings | 12 +- Widgets/sk.lproj/Localizable.strings | 14 +- Widgets/sl.lproj/Localizable.strings | 14 +- Widgets/sv.lproj/Localizable.strings | 14 +- Widgets/tr.lproj/Localizable.strings | 12 +- 96 files changed, 4064 insertions(+), 5000 deletions(-) diff --git a/DuckDuckGo/bg.lproj/Bookmarks.strings b/DuckDuckGo/bg.lproj/Bookmarks.strings index ce7c4610fa..76a3820e39 100644 --- a/DuckDuckGo/bg.lproj/Bookmarks.strings +++ b/DuckDuckGo/bg.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Етикет"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Изтриване"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Няма намерени съвпадения"; diff --git a/DuckDuckGo/bg.lproj/Localizable.strings b/DuckDuckGo/bg.lproj/Localizable.strings index 6d90ec0acf..05dbca5feb 100644 --- a/DuckDuckGo/bg.lproj/Localizable.strings +++ b/DuckDuckGo/bg.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL адресът е копиран"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Изтриване"; /* Disable protection action */ "action.title.disable.protection" = "Деактивиране на защита на поверителността"; @@ -119,7 +119,7 @@ "addWidget.description" = "Получете бърз достъп до поверително търсене и до любимите си сайтове."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Натиснете продължително началния екран, за да влезете в режим за пренареждане."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Натиснете бутона плюс %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Данните на сървъра не могат да бъдат изтрити."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "За да сдвоите тези устройства, изключете функцията „Синхронизиране и архивиране“ на едното устройство, а след това на другото устройство изберете „Синхронизиране с друго устройство“."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Това устройство не може да бъде премахнато от Синхронизиране и архивиране."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Това ще изтрие отметката за „%@“"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Изтриване?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Отметката е изтрита"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Винаги да се изпращат доклади за сривове"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Скрий"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Докладите за сривове помагат на DuckDuckGo да диагностицира проблеми и да подобрява продуктите си. Те не съдържат никаква лична информация."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Интернет може да бъде и доста опасно място.\n\nНе се притеснявайте! Поверителното търсене и сърфиране е много по-лесно, отколкото си мислите."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Отстраняване на грешки"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "устройство"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Запазване в Изтеглени файлове"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Отмени"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Сигурни ли сте, че искате да отмените изтеглянето на този файл?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Възобновяване"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Не"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Отмяна на изтеглянето?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Да"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Изтриване на всички"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo за iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Винаги"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Питай всеки път"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Никога"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "С Duck Player на DuckDuckGo можете да гледате YouTube без насочени реклами и да се чувствате като в киносалон, а вече гледаните видеоклипове няма да повлияят на препоръчаните."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Разбрах!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Писна ли Ви от рекламите в YouTube? Опитайте Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "В Privacy Essentials на DuckDuckGo са осигурени всички настройки за поверителност, необходими за защита при сърфиране в мрежата."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player осигурява чисто изживяване без персонализирани реклами в YouTube и предотвратява влиянието на вече гледаните видеоклипове върху препоръките на YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Научете повече"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Отваряне на видеоклипове в Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Защита на имейл"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Скрийте имейл адреса си и\nблокирайте тракерите"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Все още няма добавени отметки"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Открит е проблем с приложението"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Възникна неизвестна грешка"; /* No comment provided by engineer. */ "favorite" = "Любим"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Премахване"; +/* No comment provided by engineer. */ +"Favorites" = "Любими"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Всички любими, запазени на устройството"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Само любими на мобилни устройства"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Блокиране на реклами и изскачащи прозорци"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Вземете DuckDuckGo за Mac или Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Добавете DuckDuckGo към началния си екран!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Начален екран"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Добре дошли в\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Политика за поверителност"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Приемам и продължавам"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "VPN услугата на DuckDuckGo е безплатна в периода за ранен достъп."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Приемам и продължавам"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Активиране на известия"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Имам код за покана"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Включване в списъка с чакащи"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Първи стъпки"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Криптирайте онлайн трафика във всички браузъри и приложения, които използвате."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Покритие за цялото устройство"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Няма нужда от отделно приложение. Можете да се свържете с едно кликване и да следите състоянието на връзката с един поглед."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Бърза, надеждна и лесна функция"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Ние не регистрираме и не запазваме никакви данни, които могат да Ви свържат с Вашата онлайн дейност."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Строга политика без регистрация на данни"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Възползвайте се от допълнителен слой защита онлайн с бърза и опростена VPN функция. Криптирайте интернет връзката за всички приложения в устройството и скрийте местоположението и IP адреса си от сайтовете, които посещавате."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Каним Ви да изпробвате \nDuckDuckGo VPN чрез ранен достъп!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Сигурна връзка навсякъде и по всяко време с мрежова защита - VPN функцията на DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Включете се в списъка с чакащи и ще Ви уведомим, когато дойде Вашият ред."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Ранен достъп до VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Включени сте в списъка с чакащи!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Нови покани се изпращат на всеки няколко дни по реда на постъпването им."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Ще Ви уведомим, когато поканата Ви стане готова."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Ще Ви изпратим известие, когато поканата Ви за изпробване на DuckDuckGo VPN стане готова."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Ще получите известие, когато Вашето копие за ранен достъп до мрежовата защита стане готово."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Разберете веднага, когато получите покана"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Отворете поканата"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Приложението DuckDuckGo VPN е готово!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Вашата покана е готова!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Включени сте в списъка с чакащи!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Включване в списък с чакащи за личен адрес"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "За нас"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Обем от данни"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Можете да разрешите локалният трафик да заобикаля VPN услугата при свързване с устройства в локалната мрежа, като принтер например."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Изключване на локални мрежи"; @@ -1696,11 +1663,11 @@ /* 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" = "Нашата VPN функция използва Secure DNS, за да запази поверителността на Вашата онлайн дейност, така че вашият интернет доставчик да не може да види какви уебсайтове посещавате."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Често задавани въпроси"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Споделяне на отзив за VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Не е намерено приложението, необходимо за отваряне на тази връзка"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Повторно активиране"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Отмени"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Деактивиране"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Управление на отметки"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Отваряне в друго приложение?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Търсене или въвеждане на адрес"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Показване на пълния адрес на сайта"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Винаги включено"; /* Settings screen appearance section title */ "settings.appearance" = "Външен Вид"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Следващи стъпки"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Изключено"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Включено"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Прегледи с продължително натискане"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Вашият абонамент се активира"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "По-лесна защита на личните данни с три нови защити:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Абонирайте се отново, за да продължите да използвате Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Абонамент ви за Privacy Pro е изтекъл"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo автоматично блокира скритите тракери, докато сърфирате в мрежата.\n[Научете повече](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Изберете опцията, която най-добре описва възникналия проблем."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Отказване"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Това ни помага да подобрим браузъра."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Сайтът не работи ли? Уведомете DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Уебсайтът е повреден"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Изпращане на доклад"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Кой уебсайт е повреден?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Активиране на абонамент"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Достъп до Вашия абонамент за Privacy Pro чрез имейл адрес."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Използвайте абонамента си на други устройства"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Абонаментни планове"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Назад към Настройки"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Абонаментът ви е изтекъл на %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Изключване на синхронизирането?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Отключете устройството, за да настроите Sync & Backup."; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Съжаляваме, но функцията за синхронизиране и архивиране в момента не е достъпна. Моля, опитайте отново по-късно."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Превключване на раздели"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Изберете предпочитания размер на текста. Уебсайтът, който разглеждате в DuckDuckGo, ще се регулира спрямо него."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Светла"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Този списък съдържа съобщения, които са били показани, плюс още най-много 1 съобщение, което е планирано за показване. Може да има още съобщения в конфигурацията, които ще бъдат представени, но те все още не са обработени."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Деактивирана защита на поверителността за %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Открийте и изберете DuckDuckGo. След това плъзнете до VPN и изберете „Добавяне на уиджет“."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Добавяне на уиджет за VPN към началния екран"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Разрешаване на известия"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Имате покана!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Премахнато от любими"; diff --git a/DuckDuckGo/cs.lproj/Bookmarks.strings b/DuckDuckGo/cs.lproj/Bookmarks.strings index dff38691b6..ea83317dc6 100644 --- a/DuckDuckGo/cs.lproj/Bookmarks.strings +++ b/DuckDuckGo/cs.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Štítek"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Smazat"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nenalezeny žádné shody"; diff --git a/DuckDuckGo/cs.lproj/Localizable.strings b/DuckDuckGo/cs.lproj/Localizable.strings index 0eacaa1b7c..fdbd90e9b8 100644 --- a/DuckDuckGo/cs.lproj/Localizable.strings +++ b/DuckDuckGo/cs.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Adrese URL zkopírována"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Smazat"; /* Disable protection action */ "action.title.disable.protection" = "Zakázat ochranu soukromí"; @@ -119,7 +119,7 @@ "addWidget.description" = "Získejte rychlý přístup k soukromému vyhledávání a oblíbeným webům."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Podržením prstu na ploše aktivuj režim úprav plochy."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Klepni na tlačítko plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Data na serveru se nedají smazat."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Pokud chceš tahle zařízení spárovat, vypni na jednom z nich synchronizaci a zálohování a na druhém klepni na Synchronizovat s jiným zařízením."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Tohle zařízení nejde ze synchronizace a zálohování odebrat."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Tímto smažete svou záložku pro „%@“"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Smazat?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Záložka smazána"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Vždycky odesílat hlášení o selhání"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Skrýt"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Hlášení o selháních pomáhají DuckDuckGo diagnostikovat problémy a zlepšovat služby. Neobsahují žádné osobní údaje umožňující identifikaci."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet může být trochu strašidelný.\n\nNebojte se! Anonymní vyhledávání a procházení je jednodušší, než si myslíte."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Ladění"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "zařízení"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Uložit do Stahování"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Zrušit"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Opravdu chcete stahování zrušit?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Pokračovat"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Ne"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Zrušit stahování?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ano"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Smazat vše"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pro iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Vždy"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Vždycky se ptát"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nikdy"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player umožňuje dívat se na YouTube v prohlížeči DuckDuckGo v režimu kina a bez cílených reklam. To, co sleduješ, nebude ovlivňovat tvoje doporučení."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Mám to!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Topíš se v reklamách na YouTube? Vyzkoušej přehrávač Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo má všechno, co ti zaručí ochranu soukromí při procházení webu."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Přehrávač Duck Player nabízí sledování v minimalistickém prostředí bez personalizovaných reklam a brání tomu, aby sledovaná videa ovlivňovala tvoje doporučení na YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Více informací"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Otevírat videa v přehrávači Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Ochrana e-mailu"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Skryj svůj e-mail\na blokuj trackery"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Zatím nebyly přidány žádné záložky."; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Vyskytl se problém s aplikací"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Vyskytla se neznámá chyba"; /* No comment provided by engineer. */ "favorite" = "Oblíbené"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Odstranit"; +/* No comment provided by engineer. */ +"Favorites" = "Oblíbené"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Všechny oblíbené položky na zařízení"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Jenom oblíbené mobilní položky"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokování reklam a vyskakovacích oken"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Nainstaluj si DuckDuckGo pro Mac nebo Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Přidejte DuckDuckGo na svou domovskou obrazovku!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Domů"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Vítejte na\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "VPN DuckDuckGo"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Zásady ochrany osobních údajů"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Přijmout a pokračovat"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "VPN DuckDuckGo lze v rámci předběžného přístupu používat zdarma."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Přijmout a pokračovat"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Povolit oznámení"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Mám zvací kód"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Zapsat se na čekací listinu"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Začínáme"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Šifruj online provoz ve všech svých prohlížečích a aplikacích."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Ochrana pro všechna tvoje zařízení"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nepotřebuješ žádnou samostatnou aplikaci. Stačí se jedním kliknutím připojit a hned zjistíš stav připojení."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rychlé, spolehlivé a intuitivní"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Nezaznamenáváme ani neukládáme žádná data, která by propojila tvoji osobu a online aktivitu."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Přísné zásady ohledně zákazu protokolování"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "VPN vytvořená pro rychlost a jednoduchost ti zajistí další vrstvu ochrany na internetu. Při všech aktivitách na zařízení využívej šifrované připojení k internetu a skrývej svou polohu a IP adresu před navštěvovanými weby."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Přišla vám pozvánka – vyzkoušejte předběžný přístup k VPN DuckDuckGo!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Zabezpeč své připojení pomocí ochrany sítě – kdykoli a kdekoli s VPN od DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Zapiš se na čekací listinu a my tě upozorníme, až budeš na řadě."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Předběžný přístup k VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Jsi v pořadníku!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nové pozvánky se rozesílají každých pár dní podle pořadí na čekací listině."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Až bude tvoje pozvánka připravená, dáme ti vědět."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Jakmile bude vaše pozvánka k otestování VPN DuckDuckGo připravená, dáme vám vědět."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Nech si poslat upozornění, až pro tebe bude funkce ochrany sítě dostupná v předběžném přístupu."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Zjisti to hned, co ti dorazí pozvánka"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Otevřít pozvánku"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "VPN DuckDuckGo VPN připravená!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Tvoje pozvánka je připravená!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Jsi v pořadníku!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Připojte se k soukromému pořadníku"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "O společnosti"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Objem dat"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Místní provoz může obejít síť VPN a připojit se k zařízením v místní síti, třeba k tiskárně."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Vyloučení místních sítí"; @@ -1696,11 +1663,11 @@ /* 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" = "Naše VPN používá systém Secure DNS, aby tvoje online aktivity zůstaly soukromé a tvůj poskytovatel internetu neviděl, jaké webové stránky navštěvuješ."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Často kladené otázky"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Podělte se o zpětnou vazbu k VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Aplikaci nutnou k otevření tohoto odkazu nelze nalézt"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Znovu aktivovat"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Zrušit"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktivovat"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Spravovat záložky"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otevřít v jiné aplikaci?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Vyhledejte nebo zadejte adresu"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Zobrazovat celou adresu webu"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Vždycky zapnuté"; /* Settings screen appearance section title */ "settings.appearance" = "Vzhled"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Další kroky"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Vypnout"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Aktivní"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Náhledy dlouhého stisknutí"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Tvoje předplatné se aktivuje"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Tři nové ochranné funkce pro ještě větší soukromí:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Pokud chceš dál používat službu Privacy Pro, znovu si založ předplatné"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Tvoje předplatné Privacy Pro vypršelo"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo automaticky blokuje skryté trackery při procházení webu.\n[Více informací](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Vyber možnost, která nejlíp popisuje tvůj problém."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Odmítnout"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Pomáhá nám to vylepšovat prohlížeč."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Stránka nefunguje? Dej DuckDuckGo vědět."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Web nefunguje"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Odešlete zprávu"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Které webové stránky jsou poškozené?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktivace předplatného"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Získejte přístup k předplatnému Privacy Pro prostřednictvím e-mailové adresy."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Používání předplatného na jiných zařízeních"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Plány předplatného"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Zpět do nastavení"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Tvoje předplatné vypršelo %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Vypnout synchronizaci?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Pokud chceš nastavit funkci Sync & Backup, odemkni zařízení"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Omlouváme se, ale funkce synchronizace a zálohování teď není dostupná. Zkus to znovu později."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Přepínač karet"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Vyberte preferovanou velikost textu. Webové stránky, které zobrazíte v DuckDuckGo, se tomu přizpůsobí."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Světlo"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Tenhle seznam obsahuje zprávy, které se zobrazily, plus maximálně 1 zprávu, která má zobrazení naplánované. V konfiguraci můžou být další zprávy, které se zobrazí, ale ještě nebyly zpracované."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Ochrana deaktivována u domény %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Najdi aplikaci DuckDuckGo a vyber ji. Potom se posuň na VPN a vyber Přidat widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Přidat widget VPN na domovskou obrazovku"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Povolit oznámení"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Zveme tě!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Oblíbená položka odstraněna"; diff --git a/DuckDuckGo/da.lproj/Bookmarks.strings b/DuckDuckGo/da.lproj/Bookmarks.strings index a4d8ae52b9..5c0771c3d7 100644 --- a/DuckDuckGo/da.lproj/Bookmarks.strings +++ b/DuckDuckGo/da.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etiket"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Slet"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Ingen match fundet"; diff --git a/DuckDuckGo/da.lproj/Localizable.strings b/DuckDuckGo/da.lproj/Localizable.strings index 6840ec8bcf..9ac9c37bde 100644 --- a/DuckDuckGo/da.lproj/Localizable.strings +++ b/DuckDuckGo/da.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL kopieret"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Slet"; /* Disable protection action */ "action.title.disable.protection" = "Deaktiver Beskyttelse af privatlivet"; @@ -119,7 +119,7 @@ "addWidget.description" = "Få hurtig adgang til privat søgning og de websteder, du elsker."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Tryk længe på startskærmen for at skifte til jiggle-tilstand."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Tryk på %@-knappen."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Kan ikke slette data på serveren."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "For at parre disse enheder skal du slå synkronisering og sikkerhedskopiering fra på den ene enhed og derefter trykke på \"Synkroniser med en anden enhed\" på den anden enhed."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Denne enhed kunne ikke fjernes fra synkronisering og sikkerhedskopiering."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Dette vil slette dit bogmærke for \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Vil du slette?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Bogmærke slettet"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Send altid fejlrapporter"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Skjul"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Fejlrapporter hjælper DuckDuckGo med at diagnosticere problemer og forbedre vores produkter. De indeholder ingen personligt identificerbare oplysninger."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internettet kan være ret uhyggeligt.\n\nBare rolig! Det er lettere at søge og browse privat, end du tror."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Fejlfinding"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "enhed"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Gem i downloads"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Annullér"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Er du sikker på, at du vil annullere denne download?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Genoptag"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nej"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Annuller download?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ja"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Slet alle"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo til iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Altid"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Spørg hver gang"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Aldrig"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player giver dig mulighed for at se YouTube uden målrettede annoncer i en biograflignende oplevelse i DuckDuckGo, og det, du ser, påvirker ikke dine anbefalinger."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Forstået"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Drukner du i annoncer på YouTube? Prøv Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo giver dig de Privacy Essentials, du har brug for for at beskytte dig selv, når du surfer på nettet."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player giver en ren seeroplevelse uden målrettede annoncer og forhindrer, at visningsaktivitet påvirker dine YouTube-anbefalinger."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Mere info"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Åbn videoer i Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-mailbeskyttelse"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Skjul din e-mail og \n bloker trackere"; +/* No comment provided by engineer. */ +"empty!" = "tom!"; + /* Empty list state placholder */ "empty.bookmarks" = "Ingen bogmærker tilføjet endnu"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "App-problem opdaget"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Der er opstået en ukendt fejl."; /* No comment provided by engineer. */ "favorite" = "Favorit"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Fjern"; +/* No comment provided by engineer. */ +"Favorites" = "Favoritter"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Alle favoritter på enheden"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Kun favoritter på mobil"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokering af annoncer og pop op-vinduer"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Hent DuckDuckGo til Mac eller Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Føj DuckDuckGo til din startskærm!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Hjem"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Velkommen til\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Privatlivspolitik"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Accepter og fortsæt"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN er gratis at bruge under den tidlige adgang."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Acceptér og fortsæt"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Aktivér notifikationer"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Jeg har en invitationskode"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Skriv dig på ventelisten"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Kom igang"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Krypter onlinetrafik på tværs af dine browsere og apps."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Fuld dækning af enheder"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Der er ikke behov for en separat app. Opret forbindelse med et enkelt klik, og se nemt din forbindelsesstatus."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Hurtig, pålidelig og nem at bruge"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Vi logger eller gemmer ikke data, der kan forbinde dig til din onlineaktivitet."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Streng politik mod logning"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Få et ekstra lag af beskyttelse online med en VPN, der er bygget til hastighed og enkelhed. Kryptér din internetforbindelse på hele din enhed, og skjul din placering og IP-adresse fra websteder, du besøger."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Du er inviteret til at prøve\nDuckDuckGo VPN med tidlig adgang!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Beskyt din forbindelse når som helst og hvor som helst med Network Protection, VPN'en fra DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Tilmeld dig ventelisten – vi giver dig besked, når det er din tur."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Tidlig adgang til VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Du er på listen!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nye invitationer sendes næsten dagligt efter først-til-mølle-princippet."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Vi giver dig besked, når din invitation er klar."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Vi sender dig en besked, når din invitation til at teste DuckDuckGo VPN er klar."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Få besked, når dit eksemplar af Network Protection med tidlig adgang er klar."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Få besked i samme øjeblik, du bliver inviteret"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Åbn din invitation"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN er klar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Din invitation er klar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Du er på listen!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Slut dig til den private venteliste"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Omkring"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datamængde"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Lad lokal trafik omgå VPN'en og oprette forbindelse til enheder på dit lokale netværk, f.eks. en printer."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Ekskluder lokale netværk"; @@ -1696,11 +1663,11 @@ /* 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" = "Vores VPN bruger Secure DNS til at holde din onlineaktivitet privat, så din internetudbyder ikke kan se, hvilke hjemmesider du besøger."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Ofte stillede spørgsmål"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Giv feedback om VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Den app, der kræves for at åbne dette link, kan ikke findes"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Genaktiver"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Annullér"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktiver"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Administrer bogmærker"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Åbn i en anden app?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Søg eller indtast adresse"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Vis hele webstedsadressen"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Altid aktiv"; /* Settings screen appearance section title */ "settings.appearance" = "udseende"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Næste trin"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Fra"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Til"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Eksempler med lang tryk"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Dit abonnement er ved at blive aktiveret"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Endnu mere fortrolighed med tre nye beskyttelser:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonner igen for at fortsætte med at bruge Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Dit Privacy Pro-abonnement er udløbet"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blokerer automatisk skjulte trackere, når du surfer på nettet.\n[Læs mere](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Vælg den mulighed, der bedst beskriver det problem, du oplevede."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Afvis"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Det hjælper os med at forbedre browseren."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Virker webstedet ikke? Fortæl DuckDuckGo det."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Hvilket websted er ødelagt?"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Indsend rapport"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Hvilket websted er ødelagt?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktivér abonnement"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Få adgang til dit Privacy Pro-abonnement via en e-mailadresse."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Brug dit abonnement på andre enheder"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonnementer"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Tilbage til indstillinger"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Dit abonnement udløb den %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Slå synkronisering fra?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Lås enheden op for at konfigurere synkronisering og sikkerhedskopiering."; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Beklager, men synkronisering og sikkerhedskopiering er ikke tilgængelig i øjeblikket. Prøv igen senere."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Faneskifter"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Vælg din foretrukne tekststørrelse. Websteder, som du ser i DuckDuckGo, tilpasser sig denne."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Let"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Denne liste indeholder beskeder, der er blevet vist, plus højst én besked, der er planlagt til at blive vist. Der kan være flere beskeder i konfigurationen, som vil blive præsenteret, men de er ikke blevet behandlet endnu."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Beskyttelse af privatlivet deaktiveret for %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Find og vælg DuckDuckGo. Stryg derefter til VPN, og vælg Tilføj widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Tilføj VPN-widget til startskærmen"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Tillad meddelelser"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Du er inviteret!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favorit fjernet"; diff --git a/DuckDuckGo/de.lproj/Bookmarks.strings b/DuckDuckGo/de.lproj/Bookmarks.strings index 3006f0b66f..841c4dad90 100644 --- a/DuckDuckGo/de.lproj/Bookmarks.strings +++ b/DuckDuckGo/de.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Löschen"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Keine Treffer gefunden"; diff --git a/DuckDuckGo/de.lproj/Localizable.strings b/DuckDuckGo/de.lproj/Localizable.strings index eb6e0d9c91..a794fbf17a 100644 --- a/DuckDuckGo/de.lproj/Localizable.strings +++ b/DuckDuckGo/de.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL wurde kopiert"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Löschen"; /* Disable protection action */ "action.title.disable.protection" = "Datenschutz deaktivieren"; @@ -119,7 +119,7 @@ "addWidget.description" = "Erhalte schnellen Zugriff auf die private Suche und die Websites, die dir gefallen."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Drücke lange auf den Startbildschirm, um in den Jiggle-Modus zu wechseln."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Tippe auf die Plus-Schaltfläche %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Daten auf dem Server können nicht gelöscht werden."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Um diese Geräte zu koppeln, deaktiviere „Synchronisieren und sichern“ auf einem Gerät und tippe dann auf dem anderen Gerät auf „Mit anderem Gerät synchronisieren“."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Dieses Gerät kann nicht aus „Synchronisieren und sichern“ entfernt werden."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Dadurch wird dein Lesezeichen für „%@“ gelöscht."; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Löschen?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Lesezeichen gelöscht"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Absturzberichte immer senden"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Ausblenden"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Crash-Berichte helfen DuckDuckGo, Probleme zu diagnostizieren und unsere Produkte zu verbessern. Sie enthalten keine personenbezogenen Daten."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Das Internet kann ein bisschen gruselig sein.\n\nKeine Sorge! Privat zu suchen und zu browsen ist einfacher als du denkst."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Fehlerbehebung"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "Gerät"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "In Downloads speichern"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Abbrechen"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Möchtest du diesen Download wirklich abbrechen?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Fortsetzen"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nein"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Download abbrechen?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ja"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Alle löschen"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo für iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Immer"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Jedes Mal fragen"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nie"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Mit dem Duck Player kannst du YouTube ohne gezielte Werbung in einem kinoähnlichen Erlebnis in DuckDuckGo ansehen und was du dir ansiehst, hat keinen Einfluss auf deine Empfehlungen."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Verstanden."; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Ertrinkst du in Werbung auf YouTube? Teste Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo bietet alle wichtigen Datenschutzfunktionen, die du benötigst, um dich beim Surfen im Internet zu schützen."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Mit Duck Player kannst du dir ungestört und ohne personalisierte Werbung Inhalte ansehen. Er verhindert, dass das, was du dir ansiehst, deine YouTube-Empfehlungen beeinflussen."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Mehr erfahren"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Videos in Duck Player öffnen"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-Mail-Schutz"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "E-Mail-Adresse verbergen und Tracker blockieren"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Noch keine Lesezeichen hinzugefügt"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "App-Problem erkannt"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Ein unbekannter Fehler ist aufgetreten"; /* No comment provided by engineer. */ "favorite" = "Favorit"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Entfernen"; +/* No comment provided by engineer. */ +"Favorites" = "Favoriten"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Alle Gerätefavoriten"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Nur mobile Favoriten"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blockieren von Werbungen und Pop-ups"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Hole dir DuckDuckGo für Mac oder Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Füge DuckDuckGo zu deinem Startbildschirm hinzu."; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Startseite"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Willkommen bei\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo-VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Datenschutzrichtlinie"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Zustimmen und fortfahren"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "Die Nutzung von DuckDuckGo-VPN ist während der Early-Access-Phase kostenlos."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Zustimmen und fortfahren"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Benachrichtigungen aktivieren"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Ich habe einen Einladungscode"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Auf Warteliste setzen"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Los geht's!"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Verschlüssle den Online-Datenverkehr in deinen Browsern und Apps."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Vollständige Geräteabdeckung"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Eine separate App ist nicht nötig. Verbinde dich mit einem Klick und sieh deinen Verbindungsstatus auf einen Blick."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Schnell, zuverlässig und benutzerfreundlich"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Wir protokollieren oder speichern keine Daten, die dich mit deiner Online-Aktivität in Verbindung bringen können."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Strenge Keine-Logs-Richtlinie"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Erhalte einen zusätzlichen Schutz im Internet mit einem VPN, das auf Geschwindigkeit und Einfachheit ausgelegt ist. Verschlüssle deine Internetverbindung über dein gesamtes Gerät und verstecke deinen Standort und deine IP-Adresse vor den Websites, die du besuchst."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Du bist eingeladen, DuckDuckGo-VPN frühzeitig zu testen!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Sichere deine Verbindung jederzeit und überall mit Network Protection, dem VPN von DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Trage dich in die Warteliste ein, und wir benachrichtigen dich, wenn du an der Reihe bist."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Frühzeitiger VPN-Zugang"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Du stehst auf der Liste!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Neue Einladungen werden alle paar Tage nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ verschickt."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Wir werden dich benachrichtigen, wenn deine Einladung vorliegt."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Wir schicken dir eine Benachrichtigung, wenn deine Einladung zum Testen von DuckDuckGo-VPN bereit ist."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Erhalte eine Benachrichtigung, wenn dein Exemplar von Network Protection Early Access fertig ist."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Erfahre sofort, wenn du eingeladen wirst"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Öffne deine Einladung"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo-VPN ist da!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Deine Einladung liegt vor!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Du stehst auf der Liste!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Auf die private Warteliste setzen"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Über"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datenvolumen"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Lass den lokalen Datenverkehr das VPN umgehen und dich mit Geräten in deinem lokalen Netzwerk verbinden, beispielsweise einem Drucker."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Lokale Netzwerke ausschließen"; @@ -1696,11 +1663,11 @@ /* 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" = "Unser VPN nutzt Secure DNS, um deine Online-Aktivitäten geheim zu halten, damit dein Internetanbieter nicht sehen kann, welche Websites du besuchst."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Häufig gestellte Fragen"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "VPN-Feedback teilen"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Die zum Öffnen dieses Links erforderliche App wurde nicht gefunden"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Reaktivieren"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Abbrechen"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktivieren"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Lesezeichen verwalten"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "In einer anderen App öffnen?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Adresse suchen oder eingeben"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Vollständige Website-Adresse anzeigen"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Immer aktiviert"; /* Settings screen appearance section title */ "settings.appearance" = "Aussehen"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Nächste Schritte"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Aus"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "An"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Vorschau durch langes Tippen"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Dein Abonnement wird aktiviert"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Nahtloserer Datenschutz mit drei neuen Schutzmaßnahmen:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonniere erneut, um Privacy Pro weiter zu nutzen"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Dein Privacy Pro Abonnement ist abgelaufen"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blockiert beim Durchsuchen des Internets automatisch ausgeblendete Tracker.[Mehr erfahren](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Wähle die Option, die dein Problem am besten beschreibt."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Verwerfen"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Das hilft uns, den Browser zu verbessern."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Webseite funktioniert nicht? Sag DuckDuckGo Bescheid."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Website ist fehlerhaft"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Bericht senden"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Welche Website ist fehlerhaft?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Abonnement aktivieren"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Greife über eine E-Mail-Adresse auf dein Privacy Pro Abonnement zu."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Nutze dein Abonnement auf anderen Geräten"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonnementpläne"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Zurück zu den Einstellungen"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Dein Abonnement ist am %@ abgelaufen"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Synchronisierung deaktivieren?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Gerät entsperren, um Sync & Backup einzurichten"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Leider ist Synchronisieren und sichern derzeit nicht verfügbar. Bitte versuche es zu einem späteren Zeitpunkt erneut."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Tabwechsel-Bildschirm"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Wähle die gewünschte Textgröße aus. In DuckDuckGo angezeigte Websites werden sich daran anpassen."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Hell"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Diese Liste enthält Nachrichten, die angezeigt wurden, sowie maximal 1 Nachricht, die angezeigt werden soll. Es kann sein, dass noch weitere Nachrichten in der Konfiguration vorhanden sind, die noch nicht verarbeitet wurden."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Datenschutz für %@ deaktivieren"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Finde DuckDuckGo und wähle es aus. Wische dann zu VPN und wähle „Widget hinzufügen“."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "VPN-Widget zum Startbildschirm hinzufügen"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Benachrichtigungen zulassen"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Du bist eingeladen!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favorit wurde entfernt"; diff --git a/DuckDuckGo/el.lproj/Bookmarks.strings b/DuckDuckGo/el.lproj/Bookmarks.strings index e54f8d3504..cd6e9a8d15 100644 --- a/DuckDuckGo/el.lproj/Bookmarks.strings +++ b/DuckDuckGo/el.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Διαγραφή"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Δεν βρέθηκαν αντιστοιχίες"; diff --git a/DuckDuckGo/el.lproj/Localizable.strings b/DuckDuckGo/el.lproj/Localizable.strings index aef2372492..388faafba8 100644 --- a/DuckDuckGo/el.lproj/Localizable.strings +++ b/DuckDuckGo/el.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Η διεύθυνση URL αντιγράφτηκε"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Διαγραφή"; /* Disable protection action */ "action.title.disable.protection" = "Απενεργοποίηση Προστασίας προσωπικών δεδομένων"; @@ -119,7 +119,7 @@ "addWidget.description" = "Αποκτήστε γρήγορη πρόσβαση σε μια ιδιωτική αναζήτηση και στους ιστότοπους που αγαπάτε."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Πατήστε παρατεταμένα στην αρχική οθόνη για να εισέλθετε σε λειτουργία αναδιάταξης."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Πατήστε το κουμπί συν %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Δεν είναι δυνατή η διαγραφή δεδομένων στον διακομιστή."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Για να αντιστοιχίσετε τις συσκευές αυτές, απενεργοποιήστε τη λειτουργία Συγχρονισμός και δημιουργία αντιγράφων ασφαλείας στη μία συσκευή και έπειτα πατήστε «Συγχρονισμός με άλλη συσκευή» στην άλλη συσκευή."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Δεν είναι δυνατή η κατάργηση αυτής της συσκευής από τη λειτουργία Συγχρονισμός και δημιουργία αντιγράφων ασφαλείας."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Η ενέργεια αυτή θα διαγράψει τον σελιδοδείκτη σας για «%@»"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Διαγραφή;"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Ο σελιδοδείκτης διαγράφηκε"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Να αποστέλλονται πάντα αναφορές σφαλμάτων"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Απόκρυψη"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Οι αναφορές σφαλμάτων βοηθούν το DuckDuckGo να πραγματοποιεί διάγνωση προβλημάτων και να βελτιώνει τα προϊόντα μας. Δεν περιέχουν προσωπικά στοιχεία ταυτοποίησης."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Το Διαδίκτυο μπορεί να είναι κάπως ανατριχιαστικό.\n\nΜην ανησυχείτε! Το να πραγματοποιείτε αναζήτηση και περιήγηση ιδιωτικά είναι πιο εύκολο απ' όσο νομίζετε."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Επανόρθωση σφαλμάτων"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "συσκευή"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Αποθήκευση στις λήψεις"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Ακύρωση"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Θέλετε σίγουρα να ακυρώσετε τη λήψη αυτή;"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Συνέχιση"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Όχι"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Ακύρωση λήψης;"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ναί"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Διαγραφή όλων"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo για iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Πάντα"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Να γίνεται ερώτηση κάθε φορά"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Ποτέ"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Το Duck Player σάς επιτρέπει να παρακολουθείτε YouTube χωρίς στοχευμένες διαφημίσεις, χαρίζοντάς σας μια κινηματογραφική εμπειρία στο DuckDuckGo, ενώ το περιεχόμενο που παρακολουθείτε δεν θα επηρεάσει τις συστάσεις που θα λαμβάνετε."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Το κατάλαβα!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Πνίγεστε από τις διαφημίσεις στο YouTube; Δοκιμάστε το Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "Το DuckDuckGo παρέχει όλα τα Privacy Essentials που χρειάζεστε για να προστατευτείτε καθώς περιηγείστε στον ιστό."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Το Duck Player παρέχει μια καθαρή εμπειρία προβολής χωρίς εξατομικευμένες διαφημίσεις, ενώ εμποδίζει τη δραστηριότητα προβολής να επηρεάσει τις συστάσεις που θα λαμβάνετε στο YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Μάθετε περισσότερα"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Ανοίξτε τα βίντεο στο Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Προστασία email"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Απόκρυψη του email σας και \n αποκλεισμός εφαρμογών παρακολούθησης"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Δεν προστέθηκαν σελιδοδείκτες ακόμα"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Ανιχνεύθηκε πρόβλημα με την εφαρμογή"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Έχει προκύψει κάποιο άγνωστο σφάλμα"; /* No comment provided by engineer. */ "favorite" = "Αγαπημένο"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Αφαίρεση"; +/* No comment provided by engineer. */ +"Favorites" = "Αγαπημένα"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Αγαπημένα όλων των συσκευών"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Αγαπημένα μόνο για κινητά"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Αποκλεισμός διαφημίσεων και αναδυόμενων παραθύρων"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Αποκτήστε το DuckDuckGo για Mac ή Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Προσθήκη του DuckDuckGo στην αρχική οθόνη σας!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Αρχική σελίδα"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "Αναγνωριστικό: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Καλώς ορίσατε στο\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Πολιτική ιδιωτικού απορρήτου"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Συμφωνώ και συνεχίζω"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "Το DuckDuckGo VPN παρέχεται δωρεάν προς χρήση κατά τη διάρκεια της πρώιμης πρόσβασης."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Συμφωνώ και συνεχίζω"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Ενεργοποίηση ειδοποιήσεων"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Διαθέτω Κωδικό πρόσκλησης"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Εγγραφείτε στη λίστα αναμονής"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Ξεκινήστε"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Κρυπτογράφηση της διαδικτυακής κίνησης στα προγράμματα περιήγησης και στις εφαρμογές σας."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Πλήρης κάλυψη συσκευών"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Δεν χρειάζεται ξεχωριστή εφαρμογή. Συνδεθείτε με ένα κλικ και δείτε την κατάσταση της σύνδεσής σας με μια ματιά."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Γρήγορη, αξιόπιστη και εύκολη χρήση"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Δεν καταγράφουμε ούτε αποθηκεύουμε δεδομένα τα οποία μπορούν να σας συσχετίσουν με τη διαδικτυακή δραστηριότητά σας."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Αυστηρή πολιτική μη καταγραφής"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Αποκτήστε ένα επιπλέον επίπεδο προστασίας στο διαδίκτυο με το VPN που δημιουργήθηκε για ταχύτητα και απλότητα. Κρυπτογραφήστε τη σύνδεσή σας στο διαδίκτυο στο σύνολο της συσκευής σας και αποκρύψτε την τοποθεσία και τη διεύθυνση IP σας από τους ιστότοπους που επισκέπτεστε."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Έχετε προσκληθεί να δοκιμάσετε την \nπρώιμη πρόσβαση στο DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Ασφαλίστε τη σύνδεσή σας οποτεδήποτε και οπουδήποτε με την Προστασία δικτύου, το VPN της DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Εγγραφείτε στη λίστα αναμονής και θα σας ειδοποιήσουμε όταν έρθει η σειρά σας."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Πρώιμη πρόσβαση στο VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Βρίσκεστε στη λίστα!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Αποστέλλονται νέες προσκλήσεις κάθε λίγες ημέρες, με σειρά προτεραιότητας."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Θα σας ειδοποιήσουμε όταν είναι έτοιμη η πρόσκλησή σας."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Θα σας στείλουμε ειδοποίηση όταν θα είναι έτοιμη η πρόσκλησή σας, για να δοκιμάσετε το DuckDuckGo VPN."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Λάβετε ειδοποίηση όταν το αντίγραφο της πρώιμης πρόσβασης της Προστασίας δικτύου είναι έτοιμο."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Μάθετε ακριβώς πότε θα προσκληθείτε"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Ανοίξτε την πρόσκλησή σας"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Το DuckDuckGo VPN είναι έτοιμο!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Η πρόσκλησή σας είναι έτοιμη!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Βρίσκεστε στη λίστα!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Εγγραφείτε στην Ιδιωτική λίστα αναμονής"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Σχετικά"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Όγκος δεδομένων"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Επιτρέψτε στην τοπική κυκλοφορία να παρακάμψει το VPN και να συνδεθεί σε συσκευές του τοπικού δικτύου σας, όπως ένας εκτυπωτής."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Εξαίρεση τοπικών δικτύων"; @@ -1696,11 +1663,11 @@ /* 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" = "Το VPN μας χρησιμοποιεί Ασφαλές DNS για να κρατήσει τη διαδικτυακή δραστηριότητά σας ιδιωτική, ώστε ο πάροχος υπηρεσιών Διαδικτύου που χρησιμοποιείτε να μην μπορεί να δει ποιους ιστότοπους επισκέπτεστε."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Συχνές ερωτήσεις"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Κοινοποίηση σχολίου VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Δεν είναι δυνατή η εύρεση της εφαρμογής που απαιτείται για άνοιγμα αυτού του συνδέσμου"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Ενεργοποίηση"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Ακύρωση"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Απενεργοποίηση"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Διαχείριση σελιδοδεικτών"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Άνοιγμα σε άλλη εφαρμογή;"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Αναζήτηση ή εισαγωγή διεύθυνσης"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Εμφάνιση πλήρους διεύθυνσης ιστότοπου"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Πάντα σε λειτουργία"; /* Settings screen appearance section title */ "settings.appearance" = "Εμφάνιση"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Επόμενα βήματα"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Κλειστό"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Ενεργό"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Προεπισκοπήσεις με παρατεταμένο πάτημα"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Η συνδρομή σας ενεργοποιείται"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Πιο απρόσκοπτη προστασία του απορρήτου με τρεις νέες προστασίες:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Εγγραφείτε ξανά για να συνεχίσετε να χρησιμοποιείτε το Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Η συνδρομή σας στο Privacy Pro έληξε"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "Το DuckDuckGo αποκλείει αυτόματα κρυφές εφαρμογές παρακολούθησης καθώς περιηγείστε στο διαδίκτυο.\n[Μάθετε περισσότερα](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Επιλέξτε αυτό που περιγράφει καλύτερα το πρόβλημα που αντιμετωπίσατε."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Απόρριψη"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Αυτό μας βοηθά να βελτιώνουμε το πρόγραμμα περιήγησης."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Ο ιστότοπος δεν λειτουργεί; Ενημερώστε σχετικά το DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Ο ιστότοπος δεν λειτουργεί"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Υποβολή αναφοράς"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Ποιος ιστότοπος είναι κατεστραμμένος;"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Ενεργοποίηση συνδρομής"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Αποκτήστε πρόσβαση στη συνδρομή σας Privacy Pro μέσω διεύθυνσης email."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Χρησιμοποιήστε τη συνδρομή σας σε άλλες συσκευές"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Προγράμματα συνδρομής"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Επιστροφή στις Ρυθμίσεις"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Η συνδρομή σας έληξε %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Απενεργοποίηση συγχρονισμού;"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Ξεκλειδώστε τη συσκευή για να ρυθμίσετε τη λειτουργία Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Δυστυχώς, η λειτουργία Συγχρονισμός και δημιουργία αντιγράφων ασφαλείας δεν είναι διαθέσιμη προς το παρόν. Ξαναδοκιμάστε αργότερα."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Εναλλαγή καρτελών"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Επιλέξτε το προτιμώμενο μέγεθος κειμένου. Οι ιστότοποι που βλέπετε στο DuckDuckGo θα προσαρμοστούν σε αυτό."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Φωτεινό"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Η λίστα αυτή περιέχει μηνύματα που έχουν εμφανιστεί συν το πολύ 1 μήνυμα που έχει προγραμματιστεί προς εμφάνιση. Ενδέχεται να υπάρχουν και άλλα μηνύματα στη διαμόρφωση που θα παρουσιαστούν, ωστόσο δεν έχουν ακόμη υποβληθεί σε επεξεργασία."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Η Προστασία προσωπικών δεδομένων απενεργοποιήθηκε για το %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Εύρεση και επιλογή του DuckDuckGo. Στη συνέχεια, σύρετε προς το VPN και επιλέξτε Προσθήκη μικροεφαρμογής."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Προσθήκη μικροεφαρμογής VPN στην Αρχική οθόνη"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Επιτρέψτε ειδοποιήσεις"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Έχετε προσκληθεί!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Το Αγαπημένο αφαιρέθηκε"; diff --git a/DuckDuckGo/es.lproj/Bookmarks.strings b/DuckDuckGo/es.lproj/Bookmarks.strings index c636ae2e11..b7396dae40 100644 --- a/DuckDuckGo/es.lproj/Bookmarks.strings +++ b/DuckDuckGo/es.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etiqueta"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Eliminar"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "No se han encontrado coincidencias"; diff --git a/DuckDuckGo/es.lproj/Localizable.strings b/DuckDuckGo/es.lproj/Localizable.strings index c77df2bb95..6b207a8715 100644 --- a/DuckDuckGo/es.lproj/Localizable.strings +++ b/DuckDuckGo/es.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL copiada"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Eliminar"; /* Disable protection action */ "action.title.disable.protection" = "Desactivar la protección de privacidad"; @@ -119,7 +119,7 @@ "addWidget.description" = "Obtén acceso rápido a búsquedas privadas y a los sitios que más te gustan."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Mantén pulsada la pantalla de inicio para entrar en el modo jiggle."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Pulsa el botón más %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "No se pueden eliminar los datos en el servidor."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Para emparejar estos dispositivos, desactiva Sincronización y copia de seguridad en un dispositivo y luego toca «Sincronizar con otro dispositivo» en el otro dispositivo."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "No se puede eliminar este dispositivo de Sincronización y copia de seguridad."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Esto eliminará tu marcador de \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "¿Eliminar?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Marcador eliminado"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Enviar siempre informes de fallos"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Ocultar"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Los informes de fallos ayudan a DuckDuckGo a diagnosticar problemas y a mejorar nuestros productos. No contienen información de identificación personal."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet puede ser un lugar horrible.\n\nNo te preocupes. Buscar y navegar de forma privada es más fácil de lo que piensas."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Depurar"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "dispositivo"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Guardar en descargas"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Cancelar"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "¿Seguro que quieres cancelar esta descarga?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Reanudar"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "No"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "¿Cancelar descarga?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Sí"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Eliminar todo"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo para iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Siempre"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Preguntar cada vez"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nunca"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player te permite ver YouTube sin anuncios segmentados como si estuvieras en un cine en DuckDuckGo y lo que veas no influirá en tus recomendaciones."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Entendido"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "¿Te ahogas en anuncios en YouTube? ¡Prueba Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo te ofrece todos los elementos esenciales de privacidad que necesitas para protegerte mientras navegas por la web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player ofrece una experiencia de visualización limpia sin anuncios personalizados e impide que la actividad de visualización influya en tus recomendaciones de YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Más información"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Abre vídeos en Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Protección del correo electrónico"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Ocultar tu correo electrónico y\nbloquear rastreadores"; +/* No comment provided by engineer. */ +"empty!" = "¡vacío!"; + /* Empty list state placholder */ "empty.bookmarks" = "Aún no se han añadido marcadores"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Problema detectado en la aplicación"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Se ha producido un error desconocido"; /* No comment provided by engineer. */ "favorite" = "Favorito"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Eliminar"; +/* No comment provided by engineer. */ +"Favorites" = "Favoritos"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Todos los favoritos del dispositivo"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Solo favoritos móviles"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Bloquear anuncios y mensajes emergentes"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Consigue DuckDuckGo para Mac o Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Añade DuckDuckGo a tu pantalla de inicio."; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Inicio"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "¡Bienvenido a\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Política de privacidad"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Aceptar y continuar"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN es gratuito durante el acceso anticipado."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Aceptar y continuar"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Activar notificaciones"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Tengo un código de invitación"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Únete a la lista de espera"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Empezar"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Cifra el tráfico online en tus navegadores y aplicaciones."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Cobertura completa del dispositivo"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "No hace falta una aplicación independiente. Conéctate en un clic y consulta el estado de tu conexión de un vistazo."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rápido, fiable y fácil de usar"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "No registramos ni guardamos ningún dato que pueda conectarte a tu actividad en línea."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Estricta política sin registro"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Obtén una capa adicional de protección en línea con la VPN diseñada para ofrecer velocidad y simplicidad. Cifra tu conexión a Internet en todo tu dispositivo y oculta tu ubicación y dirección IP en los sitios que visitas."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "¡Te invitamos a probar el acceso anticipado a \n DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Protege tu conexión en cualquier momento y lugar con Network Protection, la VPN de DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Únete a la lista de espera y te avisaremos cuando sea tu turno."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Acceso anticipado a VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "¡Estás en la lista!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Se envían nuevas invitaciones cada pocos días, por orden de llegada."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Te avisaremos cuando tu invitación esté lista."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Te enviaremos una notificación cuando esté lista tu invitación para probar DuckDuckGo VPN."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Recibe una notificación cuando esté lista tu copia de acceso anticipado a Network Protection."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Entérate al instante de tu invitación"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Abrir tu invitación"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "¡DuckDuckGo VPN está listo!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "¡Tu invitación está lista!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "¡Estás en la lista!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Unirse a la lista de espera privada"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Acerca de"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Volumen de datos"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Deja que el tráfico local sortee la VPN y conéctate a dispositivos de tu red local, como una impresora."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Excluir redes locales"; @@ -1696,11 +1663,11 @@ /* 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" = "Nuestra VPN utiliza DNS seguro para mantener la privacidad de tu actividad en línea, de modo que tu proveedor de Internet no pueda ver qué sitios web visitas."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Preguntas frecuentes"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Compartir comentarios de VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "No se puede encontrar la aplicación necesaria para abrir ese enlace"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Reactivar"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Cancelar"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Desactivar"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Gestionar marcadores"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "¿Abrir en otra aplicación?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Buscar o introducir dirección"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Mostrar dirección completa del sitio"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Siempre activado"; /* Settings screen appearance section title */ "settings.appearance" = "Apariencia"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Próximos pasos"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Desactivado"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Activado"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Vistas previas con pulsación larga"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Se está activando tu suscripción"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Más privacidad sin fisuras con tres nuevas protecciones:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Suscríbete de nuevo para seguir usando Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Tu suscripción a Privacy Pro ha caducado"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo bloquea automáticamente los rastreadores ocultos mientras navegas por la web.\n[Más información](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Selecciona la opción que describa mejor el problema que has encontrado."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Descartar"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Esto nos ayuda a mejorar el navegador."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "¿El sitio no funciona? Házselo saber a DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "El sitio web no funciona"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Enviar informe"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "¿Qué sitio web no funciona?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Activar suscripción"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Accede a tu suscripción a Privacy Pro a través de una dirección de correo electrónico."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Usar la suscripción en otros dispositivos"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Planes de suscripción"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Volver a Ajustes"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Tu suscripción caducó el % @"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "¿Desactivar sincronización?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Desbloquea el dispositivo para configurar Sincronización y copia de seguridad"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Lo sentimos, pero la sincronización y la copia de seguridad no están disponibles en este momento. Inténtalo de nuevo más tarde."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Cambiar pestañas"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Elige tu tamaño de texto preferido. Los sitios web que veas en DuckDuckGo se ajustarán a él."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Claro"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Esta lista contiene mensajes que se han mostrado y, como máximo, un mensaje que está programado para mostrarse. Es posible que haya más mensajes en la configuración que se vayan a mostrar, pero aún no han sido procesados."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Protección de privacidad desactivada para %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Busca y selecciona DuckDuckGo. A continuación, desliza el dedo hasta VPN y selecciona Añadir widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Añadir widget de VPN a la pantalla de inicio"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Permitir notificaciones"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "¡Has recibido una invitación!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favorito eliminado"; diff --git a/DuckDuckGo/et.lproj/Bookmarks.strings b/DuckDuckGo/et.lproj/Bookmarks.strings index 1ca8a7ad9f..463e43edf0 100644 --- a/DuckDuckGo/et.lproj/Bookmarks.strings +++ b/DuckDuckGo/et.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Kustuta"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Ühtegi vastet ei leitud"; diff --git a/DuckDuckGo/et.lproj/Localizable.strings b/DuckDuckGo/et.lproj/Localizable.strings index c290ab4282..4db9e6ef93 100644 --- a/DuckDuckGo/et.lproj/Localizable.strings +++ b/DuckDuckGo/et.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL on kopeeritud"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Kustuta"; /* Disable protection action */ "action.title.disable.protection" = "Keela privaatsuse kaitse"; @@ -119,7 +119,7 @@ "addWidget.description" = "Kasuta kiiret juurdepääsu privaatsele otsingule ja lemmiksaitidele."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Pikk vajutus avaekraanile rakenduse ümberkorraldusrežiimi sisenemiseks."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Vajutage plussnupule %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Serveris olevaid andmeid ei saa kustutada."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Nende seadmete sidumiseks lülita sünkroonimine ja varundus ühes seadmes välja ning puuduta siis teises seadmes suvandit „Sünkrooni teise seadmega“."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Seda seadet ei saa sünkroonimisest ja varundamisest eemaldada."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "See kustutab teie järjehoidja %@"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Kas kustutada?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Järjehoidja kustutatud"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Saada krahhiaruanded alati"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Peida"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Krahhiaruanded aitavad DuckDuckGo-l probleeme diagnoosida ja oma tooteid täiustada. Need ei sisalda isikut tuvastavat teavet."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet võib olla üsna jube.\n\nÄra muretse! Privaatselt otsimine ja sirvimine on lihtsam kui arvad."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Silumine"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "seade"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Salvesta allalaadimistesse"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Tühista"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Kas soovid kindlasti selle allalaadimise tühistada?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Taasta"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Ei"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Kas tühistada allalaadimine?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Jah"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Kustuta kõik"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo iOS-ile"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Alati"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Küsi iga kord"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Mitte kunagi"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player võimaldab sul DuckDuckGo-s teaterliku kogumusega YouTube'i vaadata ilma sihitud reklaamideta ja see, mida vaatad, ei mõjuta sinu soovitusi."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Sain aru!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Kas näed Youtube'i kasutades massiliselt reklaame? Proovi Duck Playerit!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo pakub kõik privaatsuseks vajaliku, mida vajad enda kaitsmiseks veebi sirvimisel."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player pakub isikupärastatud reklaamidest vaba vaatamiskogemust ja takistab, et vaatamisaktiivsus mõjutaks sinu YouTube'i soovitusi."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Loe edasi"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Ava videod Duck Playeris"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-posti kaitse"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Peida oma e-post ja\nblokeeri jälgijad"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Järjehoidjaid pole veel lisatud"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Tuvastati rakenduse probleem"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Tekkis tundmatu tõrge"; /* No comment provided by engineer. */ "favorite" = "Lemmik"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Eemaldage"; +/* No comment provided by engineer. */ +"Favorites" = "Lemmikud"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Kõik seadme lemmikud"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Ainult mobiililemmikud"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklaami ja hüpikakende blokeerimine"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Hangi DuckDuckGo Maci või Windowsi jaoks"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Lisa DuckDuckGo oma avaekraanile!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Avaleht"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Tere tulemast\nDuckDuckGo kasutajaks!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Privaatsuspoliitika"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Nõustun ja jätkan"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN-i saab varajase juurdepääsu ajal tasuta kasutada."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Nõustun ja jätkan"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Luba teavitused"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Mul on kutse kood"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Liitu ootenimekirjaga"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Alustage"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Krüpti veebiliiklus oma brauserites ja rakendustes."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Hõlmab kogu seadet"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Eraldi rakendust pole vaja. Loo ühendus ühe klõpsuga ja vaata oma ühenduse olekut hetkega."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Kiire, usaldusväärne ja lihtne kasutada"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Me ei logi ega salvesta mingeid andmeid, mille põhjal saaks sinu tegevust võrgus sinuga seostada."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Range logimiskeelu põhimõte"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Täiendava võrguturvalisuse kaitse tagab VPN, mille loomisel on silmas peetud kiirust ja kasutushõlpsust. Krüpti oma internetiühendus kogu seadmes ning varja oma asukohta ja IP-aadressi külastatavate veebisaitide eest."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Oled kutsutud proovima\nDuckDuckGo VPN-i varajast juurdepääsu!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Kaitse oma ühendust igal pool ja igal ajal, kasutades DuckDuckGo VPN-lahendust Network Protection."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Liitu ootenimekirjaga ja me anname teada, kui on sinu kord."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN varajane juurdepääs"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Oled ootenimekirjas!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Uusi kutseid saadetakse iga paari päeva tagant põhimõttel „kes ees, see mees“."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Anname teada, kui sinu kutse on valmis."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Saadame sulle teate, kui kutse DuckDuckGo VPN-i testimiseks on valmis."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Saad teate, kui sinu Network Protectioni varajane juurdepääs on saadaval."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Saa kohe teada, kui sind kutsutakse"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Ava oma kutse"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN on valmis!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Sinu kutse on valmis!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Oled ootenimekirjas!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Liituge privaatse ootenimekirjaga"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Teave"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Andmemaht"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Suuna kohalik võrguliiklus VPN-ist mööda ja loo ühendus kohtvõrgu seadmete, nt printeriga."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Kohtvõrkude välistamine"; @@ -1696,11 +1663,11 @@ /* 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" = "Meie VPN kasutab turvalist DNS-i, et kaitsta sinu veebitegevuse privaatsust, nii et sinu internetiteenuse pakkuja ei näe, milliseid veebisaite sa külastad."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Korduma kippuvad küsimused"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Jaga VPN-i tagasisidet"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Selle lingi avamiseks vajalikku rakendust ei leitud"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Aktiveeri uuesti"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Tühista"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Inaktiveeri"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Halda järjehoidjaid"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Avada teises rakenduses?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Otsi või sisesta aadress"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Näita kogu saidi aadressi"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Alati sisse lülitatud"; /* Settings screen appearance section title */ "settings.appearance" = "Välimus"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Järgmised sammud"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Väljas"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Sees"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Pika vajutusega eelvaated"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Sinu tellimus on aktiveeritud"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Veel ladusam privaatsus kolme uue kaitsega:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Privacy Pro kasutamise jätkamiseks telli uuesti"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Sinu Privacy Pro tellimus on aegunud"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blokeerib automaatselt peidetud jälgijaid, kui sa veebis sirvid.\n[Lisateave](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Vali suvand, mis kirjeldab sinu probleemi kõige paremini."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Loobu"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "See aitab meil brauserit täiustada."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Kas sait ei tööta? Anna DuckDuckGole teada."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Veebisait ei toimi"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Saada aruanne"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Milline veebisait on katki?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktiveeri püsitellimus"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Pääse oma Privacy Pro püsitellimusele juurde e-posti aadressi kaudu."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Kasuta oma püsitellimust teistes seadmetes"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Püsitellimuse plaanid"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Tagasi seadete juurde"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Sinu tellimus lõppes %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Kas lülitada sünkroonimine välja?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Ava seade, et seadistada Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Kahjuks pole sünkroonimine ja varundamine praegu saadaval. Proovi hiljem uuesti."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Vahekaardi vahetaja"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Valige soovitud teksti suurus. Veebisaidid, mida DuckDuckGos vaatate, kohanduvad sellega."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Hele"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "See loend sisaldab kuvatud sõnumeid ja maksimaalselt ühte sõnumit, mille kuvamine on planeeritud. Konfiguratsioonis võib olla veel kuvatavaid sõnumeid, kuid neid ei ole veel töödeldud."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "%@ privaatsuse kaitse on keelatud"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Leia ja vali DuckDuckGo. Seejärel pühi VPN-ile ja vali Lisa vidin."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Lisa VPN-i vidin avakuvale"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Luba teavitused"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Oled kutsutud!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Lemmik on eemaldatud"; diff --git a/DuckDuckGo/fi.lproj/Bookmarks.strings b/DuckDuckGo/fi.lproj/Bookmarks.strings index ee76efef42..4e1bbfa308 100644 --- a/DuckDuckGo/fi.lproj/Bookmarks.strings +++ b/DuckDuckGo/fi.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Poista"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Ei hakutuloksia"; diff --git a/DuckDuckGo/fi.lproj/Localizable.strings b/DuckDuckGo/fi.lproj/Localizable.strings index 4b8e752d37..56fd5e6408 100644 --- a/DuckDuckGo/fi.lproj/Localizable.strings +++ b/DuckDuckGo/fi.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL kopioitu"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Poista"; /* Disable protection action */ "action.title.disable.protection" = "Poista yksityisyyden suoja käytöstä"; @@ -119,7 +119,7 @@ "addWidget.description" = "Nopea pääsy yksityiseen hakuun ja suosikkisivustoihin."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Paina pitkään aloitusnäyttöä siirtyäksesi heilutustilaan."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Napauta pluspainiketta %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Tietojen poisto palvelimelta epäonnistui."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Jos haluat yhdistää laitteet, poista yhdeltä laitteelta käytöstä Synkronointi ja varmuuskopiointi, ja napauta toisessa laitteessa \"Synkronoi toisen laitteen kanssa\"."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Tätä laitetta ei voida poistaa synkronoinnista ja varmuuskopioinnista."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Tämä poistaa kirjanmerkin kohteesta \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Poistetaanko?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Kirjanmerkki poistettu"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Lähetä aina virheraportit"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Piilota"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Virheraportit auttavat DuckDuckGota diagnosoimaan ongelmia ja parantamaan tuotteitamme. Ne eivät sisällä henkilön tunnistamisen mahdollistavia tietoja."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet voi olla pelottava paikka.\n\nMutta ei hätää! Yksityinen haku ja selaaminen on helpompaa kuin luulet."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Virheenkorjaus"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "laitteelle"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Tallenna latauksiin"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Peruuta"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Haluatko varmasti peruuttaa tämän latauksen?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Jatka"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Ei"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Perutaanko lataus?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Kyllä"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Poista kaikki"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo iOS:lle"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Aina"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Kysy joka kerta"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Ei koskaan"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Playerin avulla voit katsella YouTubea ilman kohdennettuja mainoksia teatterimaisessa kokemuksessa DuckDuckGossa, eivätkä katsomasi videot vaikuta suosituksiisi."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Selvä!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Hukutko mainoksiin YouTubessa? Kokeile Duck Playeria!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo tarjoaa kaikki Privacy Essentials ominaisuudet, joita tarvitset suojautuaksesi selatessasi verkkoa."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player tarjoaa puhtaan katselukokemuksen ilman kohdennettuja mainoksia ja estää katseluhistoriaa vaikuttamasta YouTube-suosituksiisi."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Lue lisää"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Avaa videot Duck Playerissa"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Sähköpostisuojaus"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Piilota sähköpostisi ja\nEstä seurantaohjelmat"; +/* No comment provided by engineer. */ +"empty!" = "tyhjä!"; + /* Empty list state placholder */ "empty.bookmarks" = "Kirjanmerkkejä ei ole vielä lisätty"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Sovellusongelma havaittu"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Tapahtui tuntematon virhe"; /* No comment provided by engineer. */ "favorite" = "Suosikki"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Poista"; +/* No comment provided by engineer. */ +"Favorites" = "Suosikit"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Kaikki laitteen suosikit"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Vain mobiilisuosikit"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Mainosten ja ponnahdusikkunoiden esto"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Hanki DuckDuckGo Macille tai Windowsille"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Lisää DuckDuckGo koti-valikkoon!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Koti"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "Tunnus: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Tervetuloa\nDuckDuckGo-sovellukseen!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Tietosuojakäytäntö"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Hyväksy ja jatka"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN on ilmainen kokeilun aikana."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Hyväksy ja jatka"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Ota ilmoitukset käyttöön"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Minulla on kutsukoodi"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Tule odotuslistalle"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Aloita"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Salaa verkkoliikenne selaimissasi ja sovelluksissasi."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Täysi laitekattavuus"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Erillistä sovellusta ei tarvita. Muodosta yhteys yhdellä klikkauksella ja tarkista yhteyden tila yhdellä silmäyksellä."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Nopea, luotettava ja helppokäyttöinen"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Emme kirjaa emmekä tallenna tietoja, jotka voivat yhdistää sinut toimintaasi verkossa."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Tiukka ei lokeja -käytäntö"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Hanki lisäsuojaa verkossa VPN:llä, joka on suunniteltu nopeutta ja yksinkertaisuutta silmällä pitäen. Salaa verkkoyhteytesi koko laitteellasi ja piilota sijaintisi ja IP-osoitteesi sivustoilta, joilla käyt."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Sinut on kutsuttu kokeilemaan\nDuckDuckGo VPN:ää varhaiskäytössä!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Suojaa yhteytesi missä ja milloin vain DuckDuckGon VPN:n, Network Protectionin avulla."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Tule odotuslistalle, niin ilmoitamme milloin on sinun vuorosi."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN:n kokeilu"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Olet odotuslistalla!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Uusia kutsuja lähetetään muutaman päivän välein pyyntöjen saapumisjärjestyksessä."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Ilmoitamme, kun sinun kutsusi on valmis."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Lähetämme sinulle ilmoituksen, kun kutsusi kokeilla DuckDuckGo VPN:ää on valmis."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Saat ilmoituksen, kun Network Protectionin ennakkokäyttö on valmis."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Saat ilmoituksen heti, kun sinut kutsutaan"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Avaa kutsusi"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN on valmis!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Kutsusi on valmis!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Olet odotuslistalla!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Liity yksityiselle odotuslistalle"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Tietoja"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datamäärä"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Anna paikallisen liikenteen ohittaa VPN ja muodosta yhteys lähiverkkosi laitteisiin, kuten tulostimeen."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Sulje lähiverkot pois"; @@ -1696,11 +1663,11 @@ /* 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" = "VPN käyttää Secure DNS:ää pitääkseen verkkotoimintasi yksityisenä, jotta internetpalveluntarjoajasi ei näe, millä sivustoilla käyt."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Usein kysytyt kysymykset"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Anna palautett VPN:stä"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Linkin avaamiseen tarvittavaa sovellusta ei löydy"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Aktivoi uudelleen"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Peruuta"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktivoi"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Hallitse kirjanmerkkejä"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Avataanko toisessa sovelluksessa?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Hae tai anna osoite"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Näytä sivuston osoite kokonaan"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Aina käytössä"; /* Settings screen appearance section title */ "settings.appearance" = "Ulkoasu"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Seuraavat vaiheet"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Pois"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Päällä"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Esikatselu pitkällä painalluksella"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Tilauksesi aktivoidaan"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Saumattomampi yksityisyys kolmen uuden suojauksen avulla:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Tilaa uudelleen jatkaaksesi Privacy Pron käyttöä"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Privacy Pro -tilauksesi on päättynyt"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo estää piilotetut seurantalaitteet automaattisesti, kun selaat verkkoa.\n[Lue lisää] (ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Valitse vaihtoehto, joka parhaiten kuvaa ongelmaa."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Hylkää"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Tämä auttaa meitä parantamaan selainta."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Eikö sivusto toimi? Kerro siitä DuckDuckGolle."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Verkkosivusto on viallinen"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Lähetä raportti"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Mikä verkkosivusto on viallinen?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktivoi tilaus"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Käytä Privacy Pro -tilaustasi sähköpostiosoitteen kautta."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Käytä tilaustasi muilla laitteilla"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Tilaussopimukset"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Takaisin asetuksiin"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Tilauksesi päättyi %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Poistetaanko synkronointi käytöstä?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Avaa laitteen lukitus ja määritä Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Sync & Backup ei valitettavasti ole tällä hetkellä käytettävissä. Yritä myöhemmin uudelleen."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Välilehtien vaihtotyökalu"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Valitse tekstin koko. DuckDuckGossa tarkastelemasi verkkosivustot käyttävät sitä."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Vaalea"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Tämä luettelo sisältää viestit, jotka on näytetty, sekä enintään 1 viestin, joka on ajoitettu näytettäväksi. Konfiguraatiossa voi olla muitakin viestejä, jotka näytetään, mutta niitä ei ole vielä käsitelty."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Yksityisyydensuoja poistettu käytöstä osoitteessa %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Etsi ja valitse DuckDuckGo. Pyyhkäise sitten kohtaan VPN ja valitse Lisää widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Lisää VPN-widget aloitusnäyttöön"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Salli ilmoitukset"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Sinut on kutsuttu!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Suosikki poistettu"; diff --git a/DuckDuckGo/fr.lproj/Bookmarks.strings b/DuckDuckGo/fr.lproj/Bookmarks.strings index 1cc3982df3..195e468501 100644 --- a/DuckDuckGo/fr.lproj/Bookmarks.strings +++ b/DuckDuckGo/fr.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Supprimer"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Aucune correspondance trouvée"; diff --git a/DuckDuckGo/fr.lproj/Localizable.strings b/DuckDuckGo/fr.lproj/Localizable.strings index 5b228c7846..0622971e33 100644 --- a/DuckDuckGo/fr.lproj/Localizable.strings +++ b/DuckDuckGo/fr.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL copiée"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Supprimer"; /* Disable protection action */ "action.title.disable.protection" = "Désactiver la protection de la confidentialité"; @@ -119,7 +119,7 @@ "addWidget.description" = "Accédez rapidement à la recherche privée et aux sites que vous aimez."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Appuyez longuement sur l'écran d'accueil pour passer en mode Jiggle."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Appuyez sur le bouton plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Impossible de supprimer les données du serveur."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Pour jumeler ces appareils, désactivez Synchronisation et sauvegarde sur un appareil, puis appuyez sur « Synchroniser avec un autre appareil » sur l'autre appareil."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Impossible de supprimer cet appareil de Synchronisation et sauvegarde."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Cela supprimera votre signet pour « %@ »"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Supprimer ?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Signet supprimé"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Toujours envoyer des rapports de plantage"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Masquer"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Les rapports de plantage aident DuckDuckGo à diagnostiquer les problèmes et à améliorer ses produits. Ils ne contiennent aucune information susceptible de vous identifier personnellement."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet peut être intrusif.\n\nMais ne vous inquiétez pas ! Rechercher et naviguer de manière confidentielle est plus facile que vous ne le pensez."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Déboguer"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "appareil"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Enregistrer dans les téléchargements"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Annuler"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Voulez-vous vraiment annuler ce téléchargement ?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Reprendre"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Non"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Annuler le téléchargement ?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Oui"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Tout supprimer"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pour iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Toujours"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Toujours demander"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Jamais"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player vous permet de regarder YouTube sans publicités ciblées, en vivant une expérience de type cinéma dans DuckDuckGo. En outre, ce que vous regardez n'influence pas vos recommandations."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "J'ai compris !"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "YouTube vous inonde de publicités ? Essayez Duck Player !"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo fournit tous les incontournables de la confidentialité dont vous avez besoin pour vous protéger lorsque vous naviguez sur le Web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player offre une expérience de visionnage épurée, sans publicités personnalisées, et empêche l'activité de visionnage d'influencer vos recommandations YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "En savoir plus"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Ouvrir des vidéos dans Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Protection des e-mails"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Masquez votre adresse e-mail et bloquez les traqueurs"; +/* No comment provided by engineer. */ +"empty!" = "vide !"; + /* Empty list state placholder */ "empty.bookmarks" = "Aucun signet ajouté pour le moment"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Problème d'application détecté"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Une erreur inconnue s'est produite"; /* No comment provided by engineer. */ "favorite" = "Favori"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Supprimer"; +/* No comment provided by engineer. */ +"Favorites" = "Favoris"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Tous les favoris de l'appareil"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Favoris sur mobile uniquement"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Bloquer les publicités et les fenêtres contextuelles"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Procurez-vous DuckDuckGo pour Mac ou Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Ajoutez DuckDuckGo à votre écran d'accueil !"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Accueil"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "Identifiant : %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Bienvenue sur\nDuckDuckGo !"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "VPN DuckDuckGo"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Politique de confidentialité"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Accepter et continuer"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN est gratuit pendant l'accès anticipé."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Accepter et continuer"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Activer les notifications"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "J'ai un code d'invitation"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "S'inscrire sur la liste d'attente"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Commencer"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Cryptez le trafic en ligne sur vos navigateurs et applications."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Couverture complète de l'appareil"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Pas besoin d'une application distincte. Connectez-vous en un clic et consultez l'état de votre connexion en un coup d'œil."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rapide, fiable et simple d'utilisation"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Nous ne consignons ni n'enregistrons aucune donnée susceptible de vous relier à votre activité en ligne."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Politique stricte en matière de non enregistrement"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Bénéficiez d'une protection supplémentaire en ligne grâce au VPN conçu pour la vitesse et la simplicité. Chiffrez votre connexion Internet sur l'ensemble de votre appareil et masquez votre emplacement et votre adresse IP sur les sites que vous consultez."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Vous êtes invité à essayer DuckDuckGo VPN pendant l'accès anticipé !"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Sécurisez votre connexion à tout moment, où que vous soyez grâce à la Network Protection, le VPN de DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Inscrivez-vous sur la liste d'attente et nous vous informerons quand viendra votre tour."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Accès anticipé au VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Vous êtes sur liste d'attente !"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Les nouvelles invitations sont envoyées tous les quelques jours, sur la base du premier arrivé, premier servi."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Nous vous informerons lorsque votre invitation sera prête."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Nous vous enverrons une notification lorsque votre invitation à tester DuckDuckGo VPN sera prête."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Recevez une notification lorsque votre copie de l'accès anticipé à la Network Protection sera prête."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Sachez instantanément que vous êtes invité(e)"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Ouvrez votre invitation"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Votre VPN DuckDuckGo est prêt !"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Votre invitation est prête !"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Vous êtes sur liste d'attente !"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Rejoindre la liste d'attente privée"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "À propos"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Volume de données"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Permettez au trafic local de contourner le VPN et connectez-vous aux appareils de votre réseau local, tels qu'une imprimante."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Exclure les réseaux locaux"; @@ -1696,11 +1663,11 @@ /* 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" = "Notre VPN utilise Secure DNS pour préserver la confidentialité de votre activité en ligne, afin que votre fournisseur d'accès Internet ne puisse pas voir les sites Web que vous consultez."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Foire aux questions"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Partagez vos commentaires sur le VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "L'application nécessaire pour ouvrir ce lien est introuvable"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Réactiver"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Annuler"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Désactiver"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Gérer les signets"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Ouvrir dans une autre application ?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Rechercher ou saisir une adresse"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Afficher l'adresse complète du site"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Toujours activé"; /* Settings screen appearance section title */ "settings.appearance" = "Apparence"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Étapes suivantes"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Désactivé"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Activé"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Aperçus obtenus en appuyant longuement"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Votre abonnement est en cours d’activation"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Plus de confidentialité en continu avec trois nouvelles protections :"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonnez-vous à nouveau pour continuer à utiliser Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Votre abonnement Privacy Pro a expiré"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo bloque automatiquement les traqueurs cachés lorsque vous naviguez sur le Web.\n[En savoir plus](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Sélectionnez l'option qui décrit le mieux le problème rencontré."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Ignorer"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Cela nous aide à améliorer le navigateur."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Le site ne fonctionne pas ? Faites-le savoir à DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Le site Web pose problème"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Envoyer le rapport"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Quel site Web pose problème ?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Activez l'abonnement"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Accédez à votre abonnement Privacy Pro via une adresse e-mail."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Utilisez votre abonnement sur d’autres appareils"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Forfaits d'abonnement"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Retour aux paramètres"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Votre abonnement a expiré le % @"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Désactiver la synchronisation ?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Déverrouiller l'appareil pour configurer Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Désolés, mais la synchronisation et la sauvegarde sont actuellement indisponibles. Veuillez réessayer ultérieurement."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Outil de changement d'onglet"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Choisissez la taille du texte par défaut. La taille des polices des sites Web que vous consultez à partir de Duckduckgo sera ajustée en conséquence."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Clair"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Cette liste contient les messages qui ont été diffusés et au maximum 1 message dont la diffusion est planifiée. Il y a peut-être d'autres messages qui seront présentés dans la configuration, mais ils n'ont pas encore été traités."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Protection de la confidentialité désactivée pour %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Trouvez et sélectionnez DuckDuckGo. Glissez ensuite vers VPN et sélectionnez Ajouter un widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Ajouter le widget VPN à l'écran d'accueil"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Autoriser les notifications"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Vous avez reçu une invitation !"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favori supprimé"; diff --git a/DuckDuckGo/hr.lproj/Bookmarks.strings b/DuckDuckGo/hr.lproj/Bookmarks.strings index 11c0c1ea92..610ee72951 100644 --- a/DuckDuckGo/hr.lproj/Bookmarks.strings +++ b/DuckDuckGo/hr.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Izbriši"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nema pronađenih rezultata"; diff --git a/DuckDuckGo/hr.lproj/Localizable.strings b/DuckDuckGo/hr.lproj/Localizable.strings index 7fc9ef490d..1085034500 100644 --- a/DuckDuckGo/hr.lproj/Localizable.strings +++ b/DuckDuckGo/hr.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL je kopiran"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Izbriši"; /* Disable protection action */ "action.title.disable.protection" = "Onemogući zaštitu privatnosti"; @@ -119,7 +119,7 @@ "addWidget.description" = "Čeka vas brzi pristup privatnom pretraživanju i omiljenim mrežnim mjestima."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Duže zadržite prst na početnom zaslonu za ulaz u način tresenja."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Dodirnite gumb plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nije moguće izbrisati podatke na poslužitelju."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Za uparivanje tih uređaja, isključi Sinkronizaciju i sigurnosno kopiranje na jednom uređaju, a zatim dodirni \"Sinkroniziraj s drugim uređajem\" na drugom uređaju."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Nije moguće ukloniti ovaj uređaj iz Sinkronizacije i sigurnosnog kopiranja."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Ovo će izbrisati tvoju oznaku za \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Izbrisati?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Knjižna oznaka je izbrisana"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Uvijek šalji izvješća o padu programa"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Sakrij"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Izvješća o padovima pomažu DuckDuckGou u dijagnosticiranju problema i poboljšanju naših proizvoda. Oni ne sadrže nikakve osobne podatke koji bi omogućilitvoju identifikaciju."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet može biti pomalo neugodan.\n\nNe brini! Privatno pretraživanje i pregledavanje lakše je nego što misliš."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Ispravi pogreške"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "uređaj"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Spremi u Preuzimanja"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Otkaži"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Jeste li sigurni da želite otkazati ovo preuzimanje?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Nastavi"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Ne"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Otkazati preuzimanje?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Da"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Izbriši sve"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo za iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Uvijek"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Pitaj svaki puta"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nikada"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player omogućuje ti gledanje YouTubea bez ciljanih oglasa, što ti pruža doživljaj nalik kinu u DuckDuckGou, a ono što gledaš neće utjecati na tvoje preporuke."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Shvaćam!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Utapaš se u oglasima na YouTubeu? Isprobaj Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo pruža sve bitne elemente Privacy Essentials koje su ti potrebne da se zaštitiš dok pregledavaš web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player pruža čisti doživljaj gledanja bez personaliziranih oglasa i sprječava da aktivnosti gledanja utječu na tvoje preporuke na YouTubeu."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Saznajte više"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Otvaraj videozapise u Duck Playeru"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Zaštita e-pošte"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Sakrij svoju e-poštu i \n blokiraj tragače"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Još nema dodanih knjižnih oznaka"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Otkriven je problem s aplikacijom"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Došlo je do nepoznate pogreške"; /* No comment provided by engineer. */ "favorite" = "Omiljeno"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Ukloni"; +/* No comment provided by engineer. */ +"Favorites" = "Omiljeno"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Svi favoriti na uređaju"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Samo favoriti na mobilnom uređaju"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokiranje oglasa i skočnih prozora"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Nabavi DuckDuckGo za Mac ili Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Dodaj DuckDuckGo na svoj početni zaslon!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Početni zaslon"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Dobro došao/la u\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Pravila o zaštiti privatnosti"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Prihvati i nastavi"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN je besplatan za korištenje tijekom ranog pristupa."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Prihvati i nastavi"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Omogući obavijesti"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Imam pozivnu šifru"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Pridruži se listi čekanja"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Započnite"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Šifriraj mrežni promet u svojim preglednicima i aplikacijama."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Pokrivenost cijelog uređaja"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nema potrebe za zasebnom aplikacijom. Poveži se jednim klikom i odmah pogledaj status veze."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Brzo, pouzdano i jednostavno za korištenje"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Ne bilježimo niti spremamo nikakve podatke koji bi te mogli povezati s tvojim mrežnim aktivnostima."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Stroga politika zabrane zapisivanja"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Za tebe smo pripremili dodatni sloj mrežne zaštite, s VPN-om dizajniranim za brzinu i jednostavnost. Šifriraj svoju internetsku vezu na cijelom uređaju i sakrij svoju lokaciju i IP adresu od stranica koje posjećuješ."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Pozivamo te da isprobaš rani pristup\nDuckDuckGo VPN-u!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Osiguraj svoju vezu bilo kada i bilo gdje uz Network Protection, VPN tvrtke DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Pridruži se listi čekanja, a mi ćemo te obavijestiti kada dođeš na red."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN - rani pristup"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Na popisu ste!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nove pozivnice šalju se svakih nekoliko dana, po principu tko prvi dođe, prvi je poslužen."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Obavijestit ćemo te kada tvoja pozivnica bude spremna."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Poslat ćemo ti obavijest kada tvoja pozivnica za testiranje DuckDuckGo VPN-a bude spremna."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Primi obavijest kada tvoj primjerak Network Protectiona uz rani pristup bude spreman."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Primi obavijest čim je tvoj poziv spreman"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Otvori svoju pozivnicu"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN je spreman!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Tvoja pozivnica je spremna!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Na popisu ste!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Pridružite se privatnoj listi čekanja"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "O nama"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Količina podataka"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Neka lokalni promet zaobiđe VPN i poveže se s uređajima na tvojoj lokalnoj mreži, poput pisača."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Izostavi lokalne mreže"; @@ -1696,11 +1663,11 @@ /* 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" = "Naš VPN koristi Secure DNS kako bi tvoje mrežne aktivnosti bile privatne, tako da tvoj davatelj internetskih usluga ne može vidjeti koje web stranice posjećuješ."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Najčešća pitanja"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Podijeli povratne informacije o VPN-u"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Nije moguće pronaći aplikaciju koja je potrebna za otvaranje te poveznice"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Reaktiviraj"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Otkaži"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Obustavi"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Upravljanje knjižnim oznakama"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otvori u drugoj aplikaciji?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Pretraži ili unesi adresu"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Pokaži cijelu adresu web-mjesta"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Uvijek uključeno"; /* Settings screen appearance section title */ "settings.appearance" = "Izgled"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Sljedeći koraci"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Isključeno"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Uključeno"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Pretpregledi na dugi pritisak"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Tvoja se pretplata aktivira"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Više besprijekorne privatnosti uz tri nove zaštite:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Pretplati se ponovno i nastavi koristiti Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Tvoja pretplata na Privacy Pro je istekla"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo automatski blokira skrivene alate za praćenje dok pregledavaš web.\n[Saznaj više](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Odaberi opciju koja najbolje opisuje nastali problem."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Odbaci"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Ovo nam pomaže da poboljšamo preglednik."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Web-mjesto ne funkcionira? Javi DuckDuckGou."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Web-mjesto nije ispravno"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Pošalji izvješće"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Koje je web-mjesto neispravno?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktiviraj pretplatu"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Pristupi svojoj pretplati na Privacy Pro putem adrese e-pošte."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Koristi svoju pretplatu na drugim uređajima"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Pretplatnički paketi"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Povratak na postavke"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Tvoja je pretplata istekla %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Želiš li isključiti sinkronizaciju?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Otključaj uređaj za postavljanje opcije Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Nažalost, Sync & Backup (sinkronizacija i sigurnosno kopiranje) trenutno nisu dostupni. Pokušaj ponovno nešto kasnije."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Mjenjač kartica"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Odaberite željenu veličinu teksta. Web stranice koje pregledavate u DuckDuckGou prilagodit će se ovoj postavci."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Svijetla"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Ovaj popis sadrži prikazane poruke plus najviše 1 poruku koja je zakazana za prikazivanje. U konfiguraciji će možda biti više poruka koje će biti prikazane, ali još nisu obrađene."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Zaštita privatnosti je onemogućena za %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Pronađi i odaberi DuckDuckGo. Zatim prijeđi prstom do VPN-a i odaberi Dodaj widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Dodaj VPN widget na početni zaslon"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Dopusti obavijesti"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Pozvani ste!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Omiljena je stavka uklonjena"; diff --git a/DuckDuckGo/hu.lproj/Bookmarks.strings b/DuckDuckGo/hu.lproj/Bookmarks.strings index 1ef59108f6..aa79056ef2 100644 --- a/DuckDuckGo/hu.lproj/Bookmarks.strings +++ b/DuckDuckGo/hu.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Címke"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Törlés"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nincs találat"; diff --git a/DuckDuckGo/hu.lproj/Localizable.strings b/DuckDuckGo/hu.lproj/Localizable.strings index 73f7e151f9..529bae8c1f 100644 --- a/DuckDuckGo/hu.lproj/Localizable.strings +++ b/DuckDuckGo/hu.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL lemásolva"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Törlés"; /* Disable protection action */ "action.title.disable.protection" = "Adatvédelem letiltása"; @@ -119,7 +119,7 @@ "addWidget.description" = "Gyors hozzáférés a privát kereséshez és kedvenc weboldalaidhoz."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Az ugráló ikonos üzemmódba lépéshez tartsd nyomva hosszan a kezdőképernyőt."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Koppints a plusz %@ gombra."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nem sikerült adatokat törölni a szerveren."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Az eszközök párosításához kapcsold ki a Szinkronizálás és biztonsági mentés funkciót az egyik eszközön, majd koppints a „Szinkronizálás másik eszközzel” lehetőségre a másik eszközön."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Az eszközt nem sikerült eltávolítani a Szinkronizálás és biztonsági mentés funkcióból."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Ez törli a(z) „%@” könyvjelződet"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Törlés?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Könyvjelző törölve"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Mindig küldjön hibajelentést"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Elrejtés"; /* Crash Report dialog message */ "crash.report.dialog.message" = "A hibajelentések segítséget nyújtanak ahhoz, hogy a DuckDuckGo diagnosztizálhassa a problémákat, és tökéletesíthesse termékeit. A jelentések nem tartalmaznak személyes azonosításra alkalmas adatokat."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Az internet meglehetősen undok hely lehet.\n\nNe aggódj! A bizalmas keresés és böngészés egyszerűbb, mint hinnéd."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Hibakeresés"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "eszközön"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Mentés a Letöltések közé"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Mégsem"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Biztos, hogy meg akarod szakítani ezt a letöltést?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Folytatás"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nem"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Megszakítod a letöltést?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Igen"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Összes törlése"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo iOS verzió"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Mindig"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Kérdezzen rá minden alkalommal"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Soha"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "A Duck Player segítségével a DuckDuckGóban célzott hirdetések nélkül, moziszerű élményben nézheted a YouTube-ot, és a megtekintett tartalmak nem befolyásolják a neked szóló ajánlásokat."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Megvan!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Elárasztanak a YouTube-hirdetések? Próbáld ki a Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "A DuckDuckGóban minden olyan alapvető adatvédelmi funkciót megtalálsz, amellyel a webes böngészés során gondoskodhatsz saját védelmedről."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "A Duck Player személyre szabott hirdetések nélküli, letisztult megtekintési élményt nyújt, és megakadályozza, hogy a megtekintési tevékenységed befolyásolja a neked szóló YouTube-ajánlásokat."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "További részletek"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Videók megnyitása a Duck Playerben"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-mail védelem"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "E-mail elrejtése és\nnyomkövetők blokkolása"; +/* No comment provided by engineer. */ +"empty!" = "üres!"; + /* Empty list state placholder */ "empty.bookmarks" = "Még nincsenek könyvjelzők hozzáadva"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Alkalmazásprobléma tapasztalható"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Ismeretlen hiba történt"; /* No comment provided by engineer. */ "favorite" = "Kedvenc"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Eltávolítás"; +/* No comment provided by engineer. */ +"Favorites" = "Kedvencek"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Eszközön lévő minden kedvenc"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Csak mobilon lévő kedvencek"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Hirdetések és felugró ablakok letiltása"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Mac vagy Windows verziójú DuckDuckGo letöltése"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Add hozzá a DuckDuckGo-t a kezdőképernyődhöz!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Kezdőlap"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Üdvözlünk a\nDuckDuckGo-ban!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Adatvédelmi szabályzat"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Elfogadás és folytatás"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "A DuckDuckGo VPN a korai hozzáférés során ingyenesen használható."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Elfogadás és folytatás"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Értesítések engedélyezése"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Van meghívókódom"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Csatlakozás a várólistához"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Első lépések"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Titkosítsd a böngészők és az alkalmazások online adatforgalmat."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Teljes eszközszintű lefedettség"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nincs szükség külön alkalmazásra. Egyetlen kattintással csatlakozhatsz, és megtekintheted a kapcsolat állapotát."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Gyors, megbízható és könnyen használható"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Nem naplózunk vagy mentünk olyan adatokat, amelyek az online tevékenységedhez kapcsolhatók."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Szigorú naplózástilalmi szabályzat"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Tegyél szert extra online védelemre a gyors és egyszerű VPN segítségével. Titkosítsd a teljes eszközöd internetkapcsolatát, és rejtsd el a tartózkodási helyed, illetve az IP-címed a meglátogatott webhelyek elől."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Meghívót kaptál a DuckDuckGo VPN korai hozzáférésének kipróbálására!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "A DuckDuckGo VPN-megoldásának, a hálózatvédelmi funkciónak a segítségével bármikor és bárhol biztonságosabbá teheted a kapcsolatod."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Iratkozz fel a várólistára, és értesítést kapsz, ha rád kerül a sor."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN korai hozzáférés"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Felkerültél a listára!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Érkezési sorrend szerint pár naponta új meghívókat küldünk szét."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Értesítünk, ha elkészült a meghívód."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Értesítést küldünk, ha a DuckDuckGo VPN tesztelésére szóló meghívód elkészült."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Értesítést kapsz, ha a hálózatvédelmi funkció korai hozzáférésű változata elérhetővé válik."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Értesülj azonnal a meghívásról"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Meghívó megnyitása"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Elkészült a DuckDuckGo VPN!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "A meghívód elkészült!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Felkerültél a listára!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Csatlakozz a privát várólistához"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Rólunk"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Adatmennyiség"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Engedd, hogy a helyi forgalom megkerülje a VPN-t, és csatlakozz a helyi hálózaton található eszközökhöz úgy, mint egy nyomtatóhoz."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Helyi hálózatok kizárása"; @@ -1696,11 +1663,11 @@ /* 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 VPN-ünk biztonságos DNS használatával tartja titokban az online tevékenységedet, így az internetszolgáltatód nem láthatja, hogy milyen webhelyeket látogatsz meg."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Gyakori kérdések"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "VPN-visszajelzés megosztása"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "A link megnyitásához szükséges alkalmazás nem található."; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Újraaktiválás"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Mégsem"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktiválás"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Könyvjelzők kezelése"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Megnyitás másik alkalmazásban?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Keresés vagy cím megadása"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Teljes webhelycím megjelenítése"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Mindig be van kapcsolva"; /* Settings screen appearance section title */ "settings.appearance" = "Megjelenés"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Következő lépések"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Ki"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Be"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Hosszú lenyomásos előnézetek"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Az előfizetésed aktiválása folyamatban van"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Zökkenőmentesebb adatvédelem három új védelmi funkcióval:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Fizess elő újra, hogy tovább használhasd a Privacy Pro szolgáltatást"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Lejárt a Privacy Pro-előfizetésed"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "A DuckDuckGo böngészés közben automatikusan blokkolja a rejtett nyomkövetőket.\n[További információ](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Válaszd ki azt a lehetőséget, amelyik a legjobban leírja a tapasztalt problémát."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Elutasítás"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Ez segít minket a böngésző tökéletesítésében."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Nem működik a webhely? Jelezd a DuckDuckGo felé."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Nem működik a webhely"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Jelentés beküldése"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Melyik weboldal nem működik?”"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Előfizetés aktiválása"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Hozzáférés a Privacy Pro előfizetéshez egy e-mail címen keresztül."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Használd az előfizetésedet más eszközökön"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Előfizetési csomagok"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Vissza a Beállításokhoz"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Az előfizetésed lejárt ekkor: %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Szinkronizálás kikapcsolása?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Oldd fel az eszközt a Szinkronizálás és biztonsági mentés funkció beállításához"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "A szinkronizálás és biztonsági mentés jelenleg sajnos nem érhető el. Próbálkozz újra később."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Lapváltó"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Válaszd ki a kívánt szövegméretet. A DuckDuckGo ennek használatával jeleníti meg a webhelyeket."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Világos"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Ez a lista a megjelenített üzeneteket és legfeljebb egy megjelenítésre ütemezett üzenetet tartalmaz. Előfordulhat, hogy a konfigurációban több üzenet is megjelenik, de ezek még nincsenek feldolgozva."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Adatvédelem letiltva a következőhöz: %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Keresd meg, és jelöld ki a DuckDuckGo elemet. Ezután csúsztasd az ujjad a VPN elemre, majd válaszd a Minialkalmazás hozzáadása lehetőséget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "VPN-minialkalmazás hozzáadása a kezdőképernyőhöz"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Értesítések engedélyezése"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Meghívót kaptál!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Kedvenc eltávolítva"; diff --git a/DuckDuckGo/it.lproj/Bookmarks.strings b/DuckDuckGo/it.lproj/Bookmarks.strings index f3185e692e..45f1f90779 100644 --- a/DuckDuckGo/it.lproj/Bookmarks.strings +++ b/DuckDuckGo/it.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etichetta"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Cancella"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nessuna corrispondenza trovata"; diff --git a/DuckDuckGo/it.lproj/Localizable.strings b/DuckDuckGo/it.lproj/Localizable.strings index ff4fcd89c7..cdf2d8d4b0 100644 --- a/DuckDuckGo/it.lproj/Localizable.strings +++ b/DuckDuckGo/it.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL copiato"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Cancella"; /* Disable protection action */ "action.title.disable.protection" = "Disattiva la tutela della privacy"; @@ -119,7 +119,7 @@ "addWidget.description" = "Accedi rapidamente alla navigazione in incognito e ai tuoi siti preferiti."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Premi a lungo sulla schermata iniziale per accedere alla modalità Jiggle."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Tocca il pulsante più %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Impossibile eliminare i dati sul server."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Per accoppiare questi dispositivi, disattiva la sincronizzazione e il backup su un dispositivo e tocca \"Sincronizza con un altro dispositivo\" sull'altro dispositivo."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Impossibile rimuovere questo dispositivo da Sincronizzazione e backup."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "L'operazione eliminerà il tuo segnalibro per \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Eliminare?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Segnalibro eliminato"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Invia sempre segnalazioni di arresto anomalo"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Nascondi"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Le segnalazioni sugli arresti anomali aiutano DuckDuckGo a diagnosticare i problemi e a migliorare i nostri prodotti. Non contengono informazioni personali identificabili."; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Salva in Download"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Annulla"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Vuoi davvero annullare questo download?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Riprendi"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "No"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Annullare il download?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Sì"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Elimina tutto"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo per iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Sempre"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Chiedi ogni volta"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Mai"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player ti consente di guardare YouTube senza annunci mirati in un'esperienza analoga a quella cinematografica in DuckDuckGo e ciò che guardi non influenzerà i tuoi consigli."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Ho capito!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "YouTube ti inonda di annunci? Prova Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo fornisce tutti gli elementi essenziali per la privacy di cui hai bisogno per proteggerti mentre navighi sul Web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player offre un'esperienza di visualizzazione pulita, senza annunci personalizzati, e impedisce che l'attività di visualizzazione incida sulle raccomandazioni di YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Ulteriori informazioni"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Apri i video in Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Protezione email"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Nascondi il tuo indirizzo e-mail e \n blocca i sistemi di tracciamento"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Non è ancora stato aggiunto nessun segnalibro"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Rilevato un problema con l'app"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Si è verificato un errore sconosciuto"; /* No comment provided by engineer. */ "favorite" = "Preferito"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Rimuovi"; +/* No comment provided by engineer. */ +"Favorites" = "Preferiti"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Tutti i preferiti sul dispositivo"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Solo preferiti sul dispositivo mobile"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blocco di annunci e popup"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Scarica DuckDuckGo per Mac o Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Aggiungi DuckDuckGo alla tua schermata iniziale!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Schermata iniziale"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "DuckDuckGo\nti dà il benvenuto!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "VPN DuckDuckGo"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Privacy policy"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Accetta e continua"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN è gratuito durante l'accesso anticipato."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Accetta e continua"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Abilita notifiche"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Ho un codice invito"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Unisciti alla lista d'attesa"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Iniziamo"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Crittografa il traffico online su browser e app."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Copertura completa del dispositivo"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Non c'è bisogno di un'app specifica. Connettiti con un clic e visualizza lo stato della connessione a colpo d'occhio."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Veloce, affidabile e facile da usare"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Non registriamo né salviamo dati che possano collegarti alla tua attività online."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Rigorosa politica di non registrazione"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Ottieni un ulteriore livello di protezione online con la VPN creata per la velocità e la semplicità. Crittografa la tua connessione internet su tutto il dispositivo e nascondi la tua posizione e il tuo indirizzo IP ai siti che visiti."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Ti invitiamo a provare\nDuckDuckGo VPN in anteprima!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Proteggi la tua connessione sempre e ovunque con Network Protection, la VPN di DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Iscriviti alla lista d'attesa e ti avviseremo quando sarà il tuo turno."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Accesso anticipato VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Sei in lista d'attesa."; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "I nuovi inviti vengono inviati con un intervallo di pochi giorni, in base all'ordine di arrivo."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Ti informeremo quando l'invito sarà pronto."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Ti invieremo una notifica quando il tuo invito a testare DuckDuckGo VPN sarà pronto."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Ricevi una notifica quando la tua copia dell'accesso anticipato a Network Protection sarà pronta."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Ricevi un avviso non appena ricevi l'invito"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Apri il tuo invito"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "VPN DuckDuckGo è adesso disponibile."; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Il tuo invito è pronto!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Sei in lista d'attesa."; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Iscriviti alla lista d'attesa privata"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Informazioni"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Volume dati"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Consenti al traffico locale di bypassare la VPN e connettersi ai dispositivi sulla tua rete locale, come una stampante."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Escludi reti locali"; @@ -1696,11 +1663,11 @@ /* 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 nostra VPN utilizza il DNS protetto per mantenere privata la tua attività online, in modo che il tuo provider internet non possa vedere quali siti web visiti."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Domande frequenti"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Condividi feedback sulla VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Impossibile trovare l'app necessaria per aprire il link"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Riattiva"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Annulla"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Disattiva"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Gestisci segnalibri"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Aprire in un'altra app?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Cerca o digita l'indirizzo"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Mostra l'indirizzo completo del sito"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Sempre attiva"; /* Settings screen appearance section title */ "settings.appearance" = "Aspetto"; @@ -2064,6 +2034,9 @@ /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Anteprime con pressione prolungata"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Il tuo abbonamento è in fase di attivazione"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Più tutela della privacy senza interruzioni con tre nuove protezioni:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Iscriviti di nuovo per continuare a utilizzare Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Il tuo abbonamento Privacy Pro è scaduto"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blocca automaticamente i sistemi di tracciamento nascosti mentre navighi sul web.\n[Scopri di più](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Seleziona l'opzione che meglio descrive il problema riscontrato."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Ignora"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Questo ci aiuta a migliorare il browser."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Il sito non funziona? Comunicalo a DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Il sito web è danneggiato"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Invia segnalazione"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Quale sito web è danneggiato?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Attiva abbonamento"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Accedi al tuo abbonamento Privacy Pro tramite un indirizzo e-mail."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Usa il tuo abbonamento su altri dispositivi"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Piani di abbonamento"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Torna a Impostazioni"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Il tuo abbonamento è scaduto il % @"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Disattivare la sincronizzazione?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Sblocca il dispositivo per configurare Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Siamo spiacenti, ma Sincronizzazione e backup non è attualmente disponibile. Riprova più tardi."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Selettore schede"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Scegli le dimensioni del testo che preferisci. I siti web che visualizzi su DuckDuckGo si adatteranno a questa impostazione."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Chiaro"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Questo elenco contiene i messaggi visualizzati, più al massimo 1 messaggio pianificato per la visualizzazione. La configurazione potrebbe contenere altri messaggi che saranno presentati, ma non sono ancora stati elaborati."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Tutela della privacy disattivata per %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Trova e seleziona DuckDuckGo. Quindi scorri fino a VPN e seleziona Aggiungi widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Aggiungi il widget VPN alla schermata iniziale"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Consenti notifiche"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Hai ricevuto un invito!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Preferito rimosso"; diff --git a/DuckDuckGo/lt.lproj/Bookmarks.strings b/DuckDuckGo/lt.lproj/Bookmarks.strings index bc91635061..4fdc73ea0a 100644 --- a/DuckDuckGo/lt.lproj/Bookmarks.strings +++ b/DuckDuckGo/lt.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etiketė"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Trinti"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Atitikmenų nerasta"; diff --git a/DuckDuckGo/lt.lproj/Localizable.strings b/DuckDuckGo/lt.lproj/Localizable.strings index 0fd12df9a9..29db393e6b 100644 --- a/DuckDuckGo/lt.lproj/Localizable.strings +++ b/DuckDuckGo/lt.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL nukopijuotas"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Trinti"; /* Disable protection action */ "action.title.disable.protection" = "Išjungti privatumo apsaugą"; @@ -119,7 +119,7 @@ "addWidget.description" = "Greitai pasiekite privačią paiešką ir mėgstamas svetaines."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Ilgai spauskite pagrindinį ekraną, kad įjungtumėte į programėlių perkėlimo ir ištrynimo režimą."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Bakstelėkite pliuso mygtuką %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nepavyko ištrinti duomenų serveryje."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Šiems įrenginiams susieti viename įrenginyje išjunk funkciją „Sinchronizuoti ir sukurti atsarginę kopiją“, tada kitame įrenginyje bakstelėk „Sinchronizuoti su kitu įrenginiu“."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Nepavyko pašalinti šio įrenginio iš sinchronizavimo ir atsarginės kopijos kūrimo."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Tai ištrins jūsų žymę „%@“"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Ištrinti?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Žymė ištrinta"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Visada siųsti strigčių ataskaitas"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Slėpti"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Strigčių ataskaitos padeda „DuckDuckGo“ diagnozuoti problemas ir tobulinti mūsų produktus. Jose nėra jokios asmenį identifikuojančios informacijos."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internetas gali būti bauginantis.\n\nNesijaudink! Ieškoti ir naršyti privačiai yra lengviau, nei manai."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Derinimas"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "įrenginys"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Išsaugoti Atsisiuntimuose"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Atšaukti"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Ar tikrai norite atšaukti šį atsisiuntimą?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Tęsti"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Ne"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Atšaukti atsisiuntimą?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Taip"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Ištrinti viską"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "„iOS“ skirta „DuckDuckGo“"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Visada"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Klausti kiekvieną kartą"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Niekada"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "„Duck Player“ leidžia sistemoje „DuckDuckGo“ tarsi kino teatre žiūrėti „YouTube“ be taikomų reklamų, o tai, ką žiūrite, neturės įtakos jūsų rekomendacijoms."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Supratau!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Matote per daug „YouTube“ skelbimų? Išbandykite „Duck Player“!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "„DuckDuckGo“ suteikia visas pagrindines privatumą užtikrinančias priemones, kurių reikia norint apsisaugoti naršant internete."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "„Duck Player“ užtikrina nepriekaištingą žiūrėjimo patirtį be suasmenintų reklamų ir neleidžia žiūrėjimo veiklai daryti įtakos „YouTube“ rekomendacijoms."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Sužinoti daugiau"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Atidarykite vaizdo įrašus „Duck Player“."; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "El. pašto apsauga"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Paslėpkite savo el. paštą ir \n blokuokite stebėjimo priemones"; +/* No comment provided by engineer. */ +"empty!" = "tuščia!"; + /* Empty list state placholder */ "empty.bookmarks" = "Žymių dar nepridėta"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Aptikta programėlės problema"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Atsirado nežinoma klaida"; /* No comment provided by engineer. */ "favorite" = "Mėgstamas"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Pašalinti"; +/* No comment provided by engineer. */ +"Favorites" = "Mėgstami"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Visi įrenginio mėgstamiausi"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Tik mobiliojo mėgstamiausi"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklamų ir iššokančiųjų langų blokavimas"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Gaukite „DuckDuckGo“, skirtą „Mac“ arba „Windows“"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Pridėti „DuckDuckGo“ prie pagrindinio ekrano!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Pagrindinis"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Sveiki atvykę į\n„DuckDuckGo“!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Privatumo Politika"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Sutikti ir tęsti"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "„DuckDuckGo“ VPN galima nemokamai naudoti ankstyvosios prieigos metu."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Sutikti ir tęsti"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Įjungti pranešimus"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Turiu kvietimo kodą"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Prisijungti prie laukiančiųjų sąrašo"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Pradėti"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Užšifruokite interneto srautą naršyklėse ir programose."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Viso įrenginio aprėptis"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nereikia atskiros programos. Prisijunkite vienu spustelėjimu ir iškart matykite ryšio būseną."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Greita, patikima ir paprasta naudoti"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Mes neregistruojame ir nesaugome jokių duomenų, kurie gali būti susiję su jūsų veikla internete."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Griežta neregistravimo politika"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Gaukite papildomą apsaugos internete lygį naudodami VPN, sukurtą greičiui ir paprastumui užtikrinti. Užšifruokite interneto ryšį visame įrenginyje ir paslėpkite savo buvimo vietą bei IP adresą lankomose svetainėse."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Kviečiame išbandyti ankstyvąją prieigą prie „DuckDuckGo“ VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Apsaugokite savo ryšį bet kada ir bet kur naudodami „DuckDuckGo“ VPN tinklo apsaugą."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Prisijunkite prie laukiančiųjų sąrašo ir mes jums pranešime, kai ateis jūsų eilė."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN ankstyvoji prieiga"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Esate sąraše!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nauji pakvietimai siunčiami kas kelias dienas, laikantis eiliškumo principo."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Pranešime jums, kai jūsų pakvietimas bus paruoštas."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Atsiųsime jums pranešimą, kai jūsų pakvietimas išbandyti „DuckDuckGo“ VPN bus paruoštas."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Gaukite pranešimą, kai bus paruošta ankstyvos prieigos prie tinklo apsaugos kopija."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Sužinokite iš karto pakvietimo akimirką"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Atidaryti pakvietimą"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "„DuckDuckGo“ VPN paruoštas!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Jūsų pakvietimas paruoštas!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Esate sąraše!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Prisijungti prie privataus laukimo sąrašo"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Apie"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Duomenų kiekis"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Leiskite vietiniam srautui apeiti VPN ir prisijungti prie vietinio tinklo įrenginių, pavyzdžiui, spausdintuvo."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Neįtraukti vietinių tinklų"; @@ -1696,11 +1663,11 @@ /* 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" = "Mūsų VPN naudoja saugų DNS siekiant apsaugoti jūsų privatumą internete, kad jūsų interneto tiekėjas negalėtų matyti, kokiose svetainėse lankotės."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Dažnai užduodami klausimai"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Pateikti atsiliepimą apie VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Negalima rasti programos, galinčios atidaryti šią nuorodą"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Iš naujo įjungti"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Atšaukti"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktyvinti"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Tvarkyti žymes"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Atidaryti kitoje programoje?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Ieškoti arba įvesti adresą"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Rodyti visą svetainės adresą"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Visada įjungta"; /* Settings screen appearance section title */ "settings.appearance" = "Išvaizda"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Tolesni veiksmai"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Išjungti"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Įjungti"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Peržiūros ilgai spaudžiant"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Jūsų prenumerata aktyvuojama"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Sklandžiau užtikrinamas privatumas su trimis naujomis apsaugomis:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Vėl užsiprenumeruokite, kad galėtumėte toliau naudoti „Privacy Pro“"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Jūsų „Privacy Pro“ prenumerata baigėsi"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "„DuckDuckGo“ automatiškai blokuoja paslėptas stebėjimo priemones naršant internete.\n[Sužinokite daugiau](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Pasirinkite parinktį, kuri geriausiai apibūdina iškilusią problemą."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Atmesti"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Tai padeda mums tobulinti naršyklę."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Svetainė neveikia? Praneškite „DuckDuckGo“."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Svetainė neveikia"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Pateikti ataskaitą"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Kuri svetainė neveikia?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktyvuoti prenumeratą"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Pasiekite „Privacy Pro“ prenumeratą naudodami el. pašto adresą."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Naudokite prenumeratą kituose įrenginiuose"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Prenumeratos planai"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Grįžti į nustatymus"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Jūsų prenumerata baigėsi %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Išjungti sinchronizavimą?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Atrakinkite įrenginį, kad galėtumėte nustatyti funkciją „Sinchronizuoti ir kurti atsarginę kopiją“."; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Atsiprašome, bet sinchronizavimas ir atsarginės kopijos kūrimas šiuo metu nepasiekiami. Pabandykite dar kartą vėliau."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Skirtukų perjungiklis"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Pasirinkite norimą teksto dydį. „DuckDuckGo“ rodomos svetainės atitiks šį nustatymą."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Šviesi"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Šiame sąraše yra pranešimų, kurie buvo rodomi, ir mažiausiai 1 pranešimas, kuris suplanuotas rodyti. Konfigūracijoje gali būti daugiau pranešimų, kurie bus pateikti, tačiau jie dar nebuvo apdoroti."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Privatumo apsauga išjungta %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Raskite ir pasirinkite „DuckDuckGo“. Tada perbraukite į VPN ir pasirinkite „Pridėti valdiklį“."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Pridėti VPN valdiklį pagrindiniame ekrane"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Leisti pranešimus"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Esate pakviesti!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Mėgstamas pašalintas"; diff --git a/DuckDuckGo/lv.lproj/Bookmarks.strings b/DuckDuckGo/lv.lproj/Bookmarks.strings index c34e0a1cf7..014dc62ef5 100644 --- a/DuckDuckGo/lv.lproj/Bookmarks.strings +++ b/DuckDuckGo/lv.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etiķete"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Dzēst"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Sakritības nav atrastas"; diff --git a/DuckDuckGo/lv.lproj/Localizable.strings b/DuckDuckGo/lv.lproj/Localizable.strings index cb0b6b4c11..27490ffd49 100644 --- a/DuckDuckGo/lv.lproj/Localizable.strings +++ b/DuckDuckGo/lv.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL ir nokopēts"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Dzēst"; /* Disable protection action */ "action.title.disable.protection" = "Atspējot privātuma aizsardzību"; @@ -119,7 +119,7 @@ "addWidget.description" = "Iegūsti ātru piekļuvi privātajai meklēšanai un savām mīļākajām vietnēm."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Ilgi nospied sākuma ekrānā, lai pārietu pārkārtošanas režīmā."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Pieskaries plus %@ pogai."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nespēj izdzēst datus serverī."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Lai šīs ierīces savienotu pārī, vienā ierīcē izslēdz sinhronizēšanu un dublēšanu un pēc tam otrā ierīcē nospied \"Sinhronizēt ar citu ierīci\"."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Nevar noņemt šo ierīci no sinhronizācijas un dublēšanas."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Tādējādi tiks izdzēsta tava \"%@\" grāmatzīme"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Vai dzēst?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Grāmatzīme izdzēsta"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Vienmēr sūtīt avārijas ziņojumus"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Paslēpt"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Ziņojumi par avārijām palīdz DuckDuckGo diagnosticēt problēmas un uzlabot mūsu produktus. Tie nesatur nekādu personu identificējošu informāciju."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internets var būt diezgan “mežonīgs”.\n\nBet neuztraucies! Meklēt un pārlūkot privātā režīmā ir vieglāk, nekā tu domā."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Atkļūdošana"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "ierīcē"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Lejupielādēt"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Atcelt"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Vai tiešām vēlies atcelt šo lejupielādi?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Turpināt"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nē"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Vai atcelt lejupielādi?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Jā"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Dzēst visus"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo operētājsistēmai iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Vienmēr"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Jautāt katru reizi"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nekad"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player ļauj skatīties YouTube bez mērķētām reklāmām, izmantojot DuckDuckGo režīmu, kas līdzinās kino skatīšanās pieredzei, un skatītais saturs neietekmē tev sniegtos ieteikumus."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Sapratu!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Vai tevi nomāc YouTube reklāmas? Izmēģini Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo nodrošina visus privātuma aizsardzības līdzekļus, kas nepieciešami, lai aizsargātu sevi, pārlūkojot tīmekli."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player nodrošina netraucētu skatīšanās pieredzi bez personalizētām reklāmām un neļauj skatīšanās darbībām ietekmēt tavus YouTube ieteikumus."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Uzzināt vairāk"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Atvērt video ar Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-pasta aizsardzība"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Paslēp savu e-pastu un\nbloķē izsekotājus"; +/* No comment provided by engineer. */ +"empty!" = "tukšs!"; + /* Empty list state placholder */ "empty.bookmarks" = "Vēl nav pievienota neviena grāmatzīme"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Konstatēta lietotnes problēma"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Radās nezināma kļūda"; /* No comment provided by engineer. */ "favorite" = "Izlase"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Noņemt"; +/* No comment provided by engineer. */ +"Favorites" = "Izlase"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Visu ierīču izlase"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Tikai mobilā izlase"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklāmu un uznirstošo logu bloķēšana"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Iegūsti DuckDuckGo Mac vai Windows datoram"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Pievieno DuckDuckGo savam sākuma ekrānam!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Sākums"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Laipni lūdzam\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Privātuma politika"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Piekrist un turpināt"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN var izmantot bez maksas agrīnās piekļuves laikā."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Piekrist un turpināt"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Iespējot paziņojumus"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Man ir uzaicinājuma kods"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Pievienoties gaidīšanas sarakstam"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Sākt darbu"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Šifrē tiešsaistes datplūsmu savās pārlūkprogrammās un lietotnēs."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Visas ierīces segums"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nav nepieciešama atsevišķa lietotne. Izveido savienojumu ar vienu klikšķi un ērti skati savienojuma statusu."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Ātri, uzticami un viegli"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Mēs nereģistrējam un nesaglabājam nekādus datus, kas varētu tevi saistīt ar tavām darbībām tiešsaistē."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Stingra nereģistrēšanās politika"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Iegūsti papildu aizsardzības līmeni tiešsaistē, izmantojot ātru un vienkāršu VPN. Šifrē interneta savienojumu visā ierīcē un paslēp savu atrašanās vietu un IP adresi no apmeklētajām vietnēm."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Aicinām tevi izmēģināt\nDuckDuckGo VPN agrīno piekļuvi!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Parūpējies par sava savienojuma drošumu jebkurā laikā un vietā, izmantojot DuckDuckGo VPN – Network Protection."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Pievienojies gaidīšanas sarakstam, un mēs paziņosim, kad pienāks tava kārta."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN agrīnā piekļuve"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Tu esi sarakstā!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Jauni ielūgumi tiek izsūtīti ik pēc dažām dienām, ievērojot rindas kārtības principu."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Mēs tev paziņosim, kad tavs ielūgums būs gatavs."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Mēs nosūtīsim tev paziņojumu, kad tavs uzaicinājums izmēģināt DuckDuckGo VPN būs gatavs."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Saņem paziņojumu, kad tava Network Protection agrīnā piekļuve būs gatava."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Uzzini uzreiz, kad esi uzaicināts"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Atver savu ielūgumu"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN ir gatavs!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Tavs ielūgums ir gatavs!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Tu esi sarakstā!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Pievienojies privātajam nogaides sarakstam"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Par"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datu apjoms"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Ļauj vietējai datplūsmai apiet VPN un izveidot savienojumu ar ierīcēm tavā vietējā tīklā, piemēram, printeri."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Neietvert vietējos tīklus"; @@ -1696,11 +1663,11 @@ /* 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" = "Mūsu VPN izmanto Secure DNS, lai saglabātu tavu privātumu tiešsaistē un lai interneta pakalpojumu sniedzējs neredzētu, kādas vietnes tu apmeklē."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Bieži uzdotie jautājumi"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Sniedziet atsauksmi par VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Nevar atrast lietotni, kas nepieciešama šīs saites atvēršanai"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Atkārtoti aktivizēt"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Atcelt"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktivizēt"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Pārvaldīt grāmatzīmes"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Vai atvērt citā lietotnē?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Meklē vai ievadi adresi"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Rādīt pilnu vietnes adresi"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Vienmēr ieslēgts"; /* Settings screen appearance section title */ "settings.appearance" = "Parādas"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Nākamie soļi"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Izslēgts"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Ieslēgts"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Ilgas nospiešanas rezultātu priekšskatījumi"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Tavs abonements tiek aktivizēts"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Vēl pilnīgāks privātums ar trīs jauniem aizsardzības līdzekļiem:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonē no jauna, lai turpinātu izmantot Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Tavs Privacy Pro abonements ir beidzies"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo automātiski bloķē slēptos izsekotājus, kad tu pārlūko tīmekli.\n[Uzzini vairāk](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Izvēlies atbilstošāko problēmas raksturojumu."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Nerādīt"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Tas mums palīdz uzlabot pārlūkprogrammu."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Vai vietne nedarbojas? Informē DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Vietne ir bojāta"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Iesniegt ziņojumu"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Kura vietne ir bojāta?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktivizēt abonementu"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Piekļūsti savam Privacy Pro abonementam, izmantojot e-pasta adresi."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Izmanto savu abonementu citās ierīcēs"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonēšanas plāni"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Atpakaļ uz iestatījumiem"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Tava abonementa termiņš beidzās %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Izslēgt sinhronizāciju?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Atbloķē ierīci, lai iestatītu funkciju Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Diemžēl sinhronizācija un dublēšana pašlaik nav pieejama. Lūdzu, mēģini vēlreiz vēlāk."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Ciļņu pārslēdzējs"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Izvēlies burtu izmēru. Vietnes tavā DuckDuckGo tam pielāgosies."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Gaišs"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Šajā sarakstā ir iekļauti parādītie ziņojumi, kā arī ne vairāk kā 1 ziņojums, ko ir plānots rādīt. Konfigurācijā var būt vēl citi ziņojumi, kas tiks parādīti, taču tie vēl nav apstrādāti."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "%@ privātuma aizsardzība ir atspējota"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Atrodi un izvēlies DuckDuckGo. Pēc tam velc uz VPN un izvēlies Pievienot logrīku."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Pievienot VPN logrīku sākuma ekrānam"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Atļaut paziņojumus"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Tu esi uzaicināts!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Izlase ir noņemta"; diff --git a/DuckDuckGo/nb.lproj/Bookmarks.strings b/DuckDuckGo/nb.lproj/Bookmarks.strings index 0e89056883..169187c28b 100644 --- a/DuckDuckGo/nb.lproj/Bookmarks.strings +++ b/DuckDuckGo/nb.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etikett"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Slett"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Ingen match ble funnet"; diff --git a/DuckDuckGo/nb.lproj/Localizable.strings b/DuckDuckGo/nb.lproj/Localizable.strings index c2d6745c05..2ae3576c79 100644 --- a/DuckDuckGo/nb.lproj/Localizable.strings +++ b/DuckDuckGo/nb.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Nettadresse kopiert"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Slett"; /* Disable protection action */ "action.title.disable.protection" = "Deaktiver personvernbeskyttelse"; @@ -119,7 +119,7 @@ "addWidget.description" = "Få rask tilgang til privat søk og nettstedene du liker best."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Trykk lenge på startskjermen for å gå inn i ristemodus."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Trykk på %@-knappen."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Kan ikke slette data på serveren."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "For å pare disse enhetene må du slå av «Synkronisering og sikkerhetskopiering» på den ene enheten og trykke på «Synkroniser med en annen enhet» på den andre."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Kan ikke fjerne denne enheten fra Synkronisering og sikkerhetskopiering."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Dette vil slette bokmerket for \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Vil du slette?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Bokmerket er slettet"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Send alltid krasjrapporter"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Skjul"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Krasjrapporter hjelper DuckDuckGo med å diagnostisere problemer og forbedre produktene våre. De inneholder ingen personlig identifiserbar informasjon."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internettet kan være ganske skummelt.\n\nMen ikke vær redd! Det er enklere enn du tror å søke og surfe privat."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Feilsøke"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "enhet"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Lagre til nedlastinger"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Avbryt"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Er du sikker på at du vil avbryte denne nedlastingen?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Gjenoppta"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nei"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Vil du avbryte nedlastingen?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ja"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Slett alt"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo for iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Alltid"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Spør hver gang"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Aldri"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Med Duck Player kan du se på YouTube uten målrettede annonser i en kinolignende opplevelse i DuckDuckGo. Det du ser på, påvirker ikke anbefalingene du får."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Skjønner!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Drukner du i annonser på YouTube? Prøv Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo gir deg alt du trenger for å beskytte personvernet ditt, når du surfer på nettet."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player tilbyr en ren seeropplevelse uten tilpassede annonser og forhindrer at seeraktiviteten din påvirker YouTube-anbefalingene dine."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Finn ut mer"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Åpne videoer i Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-postbeskyttelse"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Skjul e-postadressen din og\nblokker sporere"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Ingen bokmerker lagt til ennå"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Problem med appen er oppdaget"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Det har oppstått en ukjent feil"; /* No comment provided by engineer. */ "favorite" = "Favoritt"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Fjern"; +/* No comment provided by engineer. */ +"Favorites" = "Favoritter"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Alle favoritter på enheten"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Kun favoritter på mobil"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokkering av reklame og popups"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Skaff deg DuckDuckGo for Mac eller Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Legg til DuckDuckGo på startskjermen!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Hjem"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Velkommen til\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Personvernerklæring"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Enig og fortsett"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN er gratis under tidlig tilgang."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Godta og fortsett"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Aktiver varslinger"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Jeg har en invitasjonskode"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Sett deg på ventelisten"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Kom i gang"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Krypter netttrafikk på tvers av nettlesere og apper."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Full enhetsdekning"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Du trenger ikke en egen app. Koble til med ett klikk. Sjekk status med et øyekast."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rask, pålitelig og brukervennlig"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Vi logger ikke og lagrer ikke data som kan forbinde deg med nettaktiviteten din."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Strenge retningslinjer, ingen logging"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Få et ekstra lag med beskyttelse på nett med et raskt og lettvint VPN. Krypter internettforbindelsen på hele enheten, og hold posisjonen og IP-adressen din skjult for nettsteder du besøker."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Du er invitert til å prøve\ntidlig tilgang til DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Sikre tilkoblingen din når som helst og hvor som helst med Nettverksbeskyttelse, VPN-et fra DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Sett deg på ventelisten, så varsler vi deg når det er din tur."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Tidlig tilgang til VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Du står på listen!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nye invitasjoner sendes ut med noen dagers mellomrom, etter først-til-mølla-prinsippet."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Vi varsler deg når invitasjonen din er klar."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Vi sender deg et varsel når invitasjonen din til å teste DuckDuckGo VPN er klar."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Få en varsling når eksemplaret ditt av tidlig tilgang til Nettverksbeskyttelse er klart."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Få beskjed umiddelbart når du inviteres"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Åpne invitasjonen din"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN er klar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Invitasjonen din er klar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Du står på listen!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Sett deg på den private ventelisten"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Om"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datavolum"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "La lokal trafikk omgå VPN-et og koble til enheter på det lokale nettverket, for eksempel en skriver."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Ekskluder lokale nettverk"; @@ -1696,11 +1663,11 @@ /* 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" = "Vi holder nettaktiviteten din privat med Secure DNS, slik at internettleverandøren din ikke kan se hvilke nettsteder du besøker."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Ofte stilte spørsmål"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Del tilbakemelding om VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Appen som kreves for å åpne koblingen ble ikke funnet"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Aktiver på nytt"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Avbryt"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktiver"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Administrer bokmerker"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Åpne i en annen app?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Søk eller skriv inn adresse"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Vis fullstendig nettstedsadresse"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Alltid på"; /* Settings screen appearance section title */ "settings.appearance" = "Utseende"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Neste trinn"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Av"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "På"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Forhåndsvisning ved å trykke og holde"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Abonnementet ditt blir aktivert"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Mer sømløst personvern med tre nye beskyttelsesfunksjoner:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonner igjen for å fortsette å bruke Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Abonnementet ditt på Privacy Pro har utløpt"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blokkerer automatisk skjulte sporere når du surfer på nettet.\n[Finn ut mer](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Velg alternativet som best beskriver problemet du opplevde."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Avvis"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Dette hjelper oss med å forbedre nettleseren."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Fungerer ikke nettstedet? Gi beskjed til DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Nettstedet fungerer ikke"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Send inn rapport"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Hvilket nettsted fungerer ikke?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktiver abonnement"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Få tilgang til Privacy Pro-abonnementet ditt via en e-postadresse."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Bruk abonnementet ditt på andre enheter"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonnementer"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Tilbake til Innstillinger"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Abonnementet ditt utløp den %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Vil du slå av synkronisering?\n"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Lås opp enheten for å konfigurere Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Beklager, men synkronisering og sikkerhetskopiering er ikke tilgjengelig for øyeblikket. Prøv igjen senere."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Fanebytter"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Velg ønsket tekststørrelse. Nettsteder du ser på i DuckDuckGo tilpasser seg den."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Lyst"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Denne listen inneholder meldinger som er blitt vist, pluss maksimalt én melding som er planlagt for visning. Det kan være flere meldinger i konfigurasjonen som skal vises, men de er ikke behandlet ennå."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Personvern er deaktivert for %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Finn og velg DuckDuckGo. Sveip deretter til VPN og velg Legg til widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Legg til VPN-widgeten på startskjermen"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Tillat varsler"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Du er invitert!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favoritt er fjernet"; diff --git a/DuckDuckGo/nl.lproj/Bookmarks.strings b/DuckDuckGo/nl.lproj/Bookmarks.strings index 48e38bcec4..f3537bab8a 100644 --- a/DuckDuckGo/nl.lproj/Bookmarks.strings +++ b/DuckDuckGo/nl.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Verwijderen"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Geen overeenkomsten gevonden"; diff --git a/DuckDuckGo/nl.lproj/Localizable.strings b/DuckDuckGo/nl.lproj/Localizable.strings index 844ae095e2..c492581662 100644 --- a/DuckDuckGo/nl.lproj/Localizable.strings +++ b/DuckDuckGo/nl.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL gekopieerd"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Verwijderen"; /* Disable protection action */ "action.title.disable.protection" = "Privacybescherming uitschakelen"; @@ -119,7 +119,7 @@ "addWidget.description" = "Krijg snel toegang tot privézoekopdrachten en de sites die je leuk vindt."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Druk lang op het startscherm om de schudmodus te gebruiken."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Tik op de plus %@-knop."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Kan gegevens niet verwijderen op de server."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Schakel 'Synchronisatie en back-up' uit op één apparaat en tik op 'Synchroniseren met een ander apparaat' op het andere apparaat om de apparaten te koppelen."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Het apparaat kan niet worden verwijderd uit 'Synchronisatie en back-up'."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Hiermee wordt je bladwijzer voor \"%@\" verwijderd"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Verwijderen?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Bladwijzer verwijderd"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Crashrapporten altijd verzenden"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Verbergen"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Crashrapporten helpen DuckDuckGo om problemen vast te stellen en onze producten te verbeteren. Ze bevatten geen persoonlijk identificeerbare informatie."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet kan best eng zijn.\n\nMaak je geen zorgen! Privé zoeken en browsen is eenvoudiger dan je denkt."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Fouten opsporen"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "apparaat"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Opslaan in downloads"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Annuleren"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Weet je zeker dat je deze download wilt annuleren?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Hervatten"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nee"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Downloaden annuleren?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ja"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Alles verwijderen"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo voor iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Altijd"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Elke keer vragen"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nooit"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Met Duck Player kun je YouTube bekijken in een soort bioscoopomgeving in DuckDuckGo, zonder gerichte advertenties. Wat je bekijkt heeft geen invloed op je aanbevelingen."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Ik snap het!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Te veel advertenties op YouTube? Probeer Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo biedt alle Privacy Essentials die je nodig hebt om jezelf te beschermen terwijl je op internet surft."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player biedt puur kijkplezier zonder gepersonaliseerde advertenties en voorkomt dat de dingen die je bekijkt je YouTube-aanbevelingen beïnvloeden."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Meer informatie"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Video's openen in Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-mailbescherming"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Je e-mailadres verbergen en\n trackers blokkeren"; +/* No comment provided by engineer. */ +"empty!" = "leeg!"; + /* Empty list state placholder */ "empty.bookmarks" = "Nog geen bladwijzers toegevoegd"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Probleem met app gedetecteerd"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Er is een onbekende fout opgetreden"; /* No comment provided by engineer. */ "favorite" = "Favoriet"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Verwijderen"; +/* No comment provided by engineer. */ +"Favorites" = "Favorieten"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Alle favorieten op apparaat"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Alleen mobiele favorieten"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Advertentie- en pop-upblokkering"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "DuckDuckGo downloaden voor Mac of Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Voeg DuckDuckGo toe aan je beginscherm!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Home"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Welkom bij\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Privacybeleid"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Akkoord en doorgaan"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN is gratis te gebruiken tijdens vroege toegang."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Akkoord en doorgaan"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Meldingen inschakelen"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Ik heb een uitnodigingscode"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Inscrhijven op de wachtlijst"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Aan de slag"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Versleutel online verkeer in je browsers en apps."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Volledige bescherming"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Geen aparte app nodig. Maak met één klik verbinding en bekijk je verbindingsstatus in één oogopslag."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Snel, betrouwbaar en gebruiksvriendelijk"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "We registreren of bewaren geen gegevens die je in verband kunnen brengen met je online activiteiten."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Strikt no-log-beleid"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Krijg online extra bescherming met een snelle en eenvoudige VPN. Versleutel je internetverbinding op je hele apparaat en verberg je locatie en IP-adres voor sites die je bezoekt."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Je bent uitgenodigd om DuckDuckGo VPN als een van de eersten te proberen!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Beveilig je verbinding altijd en overal met Network Protection, de VPN van DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Schrijf je in op de wachtlijst, dan laten wij je weten wanneer je Network Protection kan testen."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN vroege toegang"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Je staat op de lijst!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Elke paar dagen versturen we nieuwe uitnodigingen en hanteren hierbij het principe ''first come, first served\"."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "We laten je weten wanneer je uitgenodigd wordt."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "We sturen je een melding wanneer je uitnodiging om DuckDuckGo VPN te testen klaar is."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Ontvang een melding wanneer je Network Protection als een van de eersten mag gebruiken."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Weet het meteen wanneer je bent uitgenodigd"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Open je uitnodiging"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN is klaar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Je uitnodiging is klaar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Je staat op de lijst!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Schrijf je in voor de privéwachtlijst"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Over"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datavolume"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Laat lokaal verkeer de VPN omzeilen en maak verbinding met apparaten in je lokale netwerk, zoals een printer."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Lokale netwerken uitsluiten"; @@ -1696,11 +1663,11 @@ /* 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" = "Onze VPN gebruikt beveiligde DNS om je online activiteiten privé te houden, zodat je internetprovider niet kan zien welke websites je bezoekt."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Veelgestelde vragen"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "VPN-feedback delen"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "De app die nodig is om die link te openen, is niet gevonden"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Opnieuw activeren"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Annuleren"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deactiveren"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Bladwijzers beheren"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Openen in een andere app?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Zoek of voer een adres in"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Volledig siteadres weergeven"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Altijd aan"; /* Settings screen appearance section title */ "settings.appearance" = "Uiterlijk"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Volgende stappen"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Uit"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Aan"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Voorbeeldweergave bij lang indrukken"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Je abonnement wordt geactiveerd"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Meer naadloze privacy met drie nieuwe beschermingen:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonneer je opnieuw om Privacy Pro te blijven gebruiken"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Je Privacy Pro-abonnement is verlopen"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blokkeert automatisch verborgen trackers terwijl je op het web surft.\n[Meer informatie](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Selecteer de optie die het beste je probleem beschrijft."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Negeren"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Hiermee kunnen we de browser verbeteren."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Werkt de site niet? Laat het DuckDuckGo weten."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "De website werkt niet"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Rapport versturen"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Welke website is defect?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Abonnement activeren"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Krijg toegang tot je Privacy Pro-abonnement via een e-mailadres."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Gebruik je abonnement op andere apparaten"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonnementsformules"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Terug naar Instellingen"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Je abonnement is verlopen op % @"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Synchronisatie uitschakelen?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Ontgrendel het apparaat om synchronisatie en back-up in te stellen"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Sorry, maar synchroniseren en back-up is momenteel niet beschikbaar. Probeer het later opnieuw."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Wisselen tussen tabbladen"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Kies de gewenste tekstgrootte. Websites die je in DuckDuckGo bekijkt, worden aan de tekstgrootte aangepast."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Licht"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Deze lijst bevat berichten die getoond zijn plus maximaal 1 bericht dat gepland staat om getoond te worden. Mogelijk bevat de configuratie meer berichten die nog worden getoond, maar deze zijn nog niet verwerkt."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Privacybescherming uitgeschakeld voor %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Zoek en selecteer DuckDuckGo. Veeg vervolgens naar VPN en selecteer Widget toevoegen."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "VPN-widget toevoegen aan startscherm"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Meldingen toestaan"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Je bent uitgenodigd!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favoriet verwijderd"; diff --git a/DuckDuckGo/pl.lproj/Bookmarks.strings b/DuckDuckGo/pl.lproj/Bookmarks.strings index 17e7ae4268..7579528372 100644 --- a/DuckDuckGo/pl.lproj/Bookmarks.strings +++ b/DuckDuckGo/pl.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etykieta"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Usuń"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Brak pasujących wyników"; diff --git a/DuckDuckGo/pl.lproj/Localizable.strings b/DuckDuckGo/pl.lproj/Localizable.strings index 111c841e6b..8b1a801d1f 100644 --- a/DuckDuckGo/pl.lproj/Localizable.strings +++ b/DuckDuckGo/pl.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Skopiowano adres URL"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Usuń"; /* Disable protection action */ "action.title.disable.protection" = "Wyłącz ochronę prywatności"; @@ -119,7 +119,7 @@ "addWidget.description" = "Uzyskaj szybki dostęp do prywatnego wyszukiwania i ulubionych witryn."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Przyciśnij i przytrzymaj na ekranie głównym, aby przejść do trybu porządkowania."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Dotknij przycisku ze znakiem plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nie można usunąć danych z serwera."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Aby sparować te urządzenia, wyłącz synchronizację i kopię zapasową na jednym urządzeniu, a następnie dotknij opcji „Synchronizuj z innym urządzeniem” na drugim urządzeniu."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Nie można usunąć tego urządzenia z synchronizacji i kopii zapasowej."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Spowoduje to usunięcie zakładki „%@”"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Usunąć?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Usunięto zakładkę"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Zawsze wysyłaj raporty o awariach"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Ukryj"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Raporty o awariach pomagają zespołowi DuckDuckGo diagnozować problemy i ulepszać produkty. Nie zawierają żadnych danych osobowych."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet może być trochę nieprzyjemny.\n\nBez obaw! Prywatne wyszukiwanie i przeglądanie jest łatwiejsze niż myślisz."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Debugowanie"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "tym urządzeniu"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Zapisz w Pobranych"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Anuluj"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Czy na pewno chcesz anulować to pobieranie?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Wznów"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nie"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Anulować pobieranie?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Tak"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Usuń wszystko"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo dla systemu iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Zawsze"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Pytaj za każdym razem"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nigdy"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player umożliwia oglądanie YouTube bez ukierunkowanych reklam w środowisku kinowym DuckDuckGo bez wpływu oglądanych treści na rekomendacje."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Rozumiem!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Za dużo reklam na YouTube? Wypróbuj Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo zapewnia wszystkie niezbędne funkcje ochrony prywatności użytkownika podczas przeglądania Internetu."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player zapewnia czyste środowisko oglądania bez spersonalizowanych reklam i sprawia, że aktywność związana z oglądaniem filmów nie wpływa na rekomendacje YouTube'a."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Dowiedz się więcej"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Otwieraj filmy w Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Ochrona poczty e-mail"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Ukryj swój adres e-mail i\nblokuj skrypty śledzące"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Nie dodano jeszcze żadnych zakładek"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Wykryto błąd aplikacji"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Wystąpił nieznany błąd"; /* No comment provided by engineer. */ "favorite" = "Ulubione"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Usuń"; +/* No comment provided by engineer. */ +"Favorites" = "Ulubione"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Ulubione na urządzeniu"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Tylko ulubione z urządzeń mobilnych"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokowanie reklam i wyskakujących okienek"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Pobierz DuckDuckGo dla komputerów Mac lub systemu Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Dodaj DuckDuckGo do ekranu głównego!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Strona główna"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Witamy\nw DuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Polityka prywatności"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Wyraź zgodę i kontynuuj"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "Usługa DuckDuckGo VPN jest bezpłatna w ramach wczesnego dostępu."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Wyraź zgodę i kontynuuj"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Włącz powiadomienia"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Mam kod zaproszenia"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Dołącz do listy oczekujących"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Rozpocznij"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Szyfrowanie ruchu internetowego w przeglądarkach i aplikacjach."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Pełna ochrona urządzenia"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Bez konieczności stosowania osobnej aplikacji. Połącz się jednym kliknięciem i szybko sprawdź status połączenia."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Szybka, niezawodna i łatwa w użyciu"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Nie rejestrujemy ani nie zapisujemy żadnych danych umożliwiających powiązanie użytkownika z jego aktywnością w Internecie."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Ścisła polityka braku logów"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Uzyskaj dodatkową warstwę ochrony w Internecie dzięki sieci VPN opracowanej z myślą o szybkości i prostocie. Zaszyfruj połączenie internetowe na urządzeniu i ukryj swoją lokalizację oraz adres IP przed odwiedzanymi witrynami."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Masz zaproszenie do wypróbowania wczesnego dostępu do DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Zabezpiecz połączenie w dowolnej lokalizacji, korzystając z usługi ochrony sieci VPN DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Dołącz do listy oczekujących, aby otrzymać powiadomienie, gdy nadejdzie Twoja kolej."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Wczesny dostęp VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Jesteś na liście!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nowe zaproszenia są wysyłane co kilka dni według kolejności zgłoszeń."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Powiadomimy Cię, gdy zaproszenie będzie gotowe."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Wyślemy Ci powiadomienie, gdy zaproszenie do przetestowania DuckDuckGo VPN będzie gotowe."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Otrzymaj powiadomienie, gdy Twoja kopia wczesnego dostępu do usługi ochrony sieci będzie gotowa."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Otrzymaj powiadomienie po otrzymaniu zaproszenia"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Otwórz zaproszenie"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Usługa DuckDuckGo VPN jest gotowa!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Twoje zaproszenie jest gotowe!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Jesteś na liście!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Dołącz do prywatnej listy oczekujących"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Informacje"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Ilość danych"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Zezwól na pomijanie sieci VPN przez ruch lokalny w celu łączenia z urządzeniami w sieci lokalnej, takimi jak drukarka."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Wyklucz sieci lokalne"; @@ -1696,11 +1663,11 @@ /* 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" = "Nasza sieć VPN korzysta z Secure DNS, aby zachować prywatność aktywności użytkowników w Internecie. Dostawca Internetu nie może zobaczyć, które witryny odwiedzasz."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Często zadawane pytania"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Podziel się opinią o funkcji VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Nie można znaleźć aplikacji wymaganej do otwarcia tego linku"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Ponownie aktywuj"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Anuluj"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Dezaktywuj"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Zarządzaj zakładkami"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otworzyć w innej aplikacji?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Wyszukaj lub wprowadź adres"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Pokaż pełny adres witryny internetowej"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Zawsze włączone"; /* Settings screen appearance section title */ "settings.appearance" = "Wygląd"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Dalsze kroki"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Wyłączone"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Włączone"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Podglądy po dłuższym przyciśnięciu"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Twoja subskrypcja jest aktywowana"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Płynniejsza ochrona prywatności dzięki trzem nowym zabezpieczeniom:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Wznów subskrypcję, aby nadal korzystać z Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Twoja subskrypcja Privacy Pro wygasła"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "Podczas przeglądania stron internetowych DuckDuckGo automatycznie blokuje ukryte mechanizmy śledzące.\n[Więcej informacji](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Wybierz opcję, która najlepiej opisuje napotkany problem."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Odrzuć"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "To pomaga nam ulepszyć przeglądarkę."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Witryna nie działa? Poinformuj DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Witryna nie działa poprawnie"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Prześlij raport"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Która witryna nie działa poprawnie?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktywuj subskrypcję"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Uzyskaj dostęp do subskrypcji Privacy Pro za pośrednictwem adresu e-mail."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Korzystaj ze subskrypcji na innych urządzeniach"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Plany subskrypcji"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Powrót do ustawień"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Twoja subskrypcja wygasła w dniu %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Wyłączyć synchronizację?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Odblokuj urządzenie, aby skonfigurować funkcję Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Niestety synchronizacja i kopia zapasowa jest obecnie niedostępna. Spróbuj ponownie później."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Przełącznik kart"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Wybierz preferowany rozmiar tekstu. Ustawienie będzie miało wpływ na witryny wyświetlane w przeglądarce DuckDuckGo."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Jasny"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Ta lista zawiera wiadomości, które zostały wyświetlone, oraz maksymalnie 1 wiadomość, która jest zaplanowana do wyświetlenia. W konfiguracji może znajdować się więcej wiadomości, które zostaną wyświetlone, ale nie zostały one jeszcze przetworzone."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Ochrona prywatności wyłączona dla %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Znajdź i zaznacz DuckDuckGo. Następnie przesuń palcem do VPN i wybierz Dodaj widżet."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Dodaj widżet VPN do ekranu głównego"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Zezwalaj na powiadomienia"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Masz zaproszenie!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Usunięto ulubione"; diff --git a/DuckDuckGo/pt.lproj/Bookmarks.strings b/DuckDuckGo/pt.lproj/Bookmarks.strings index fa978c0ea1..9b56be4b24 100644 --- a/DuckDuckGo/pt.lproj/Bookmarks.strings +++ b/DuckDuckGo/pt.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Rótulo"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Eliminar"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nenhuma correspondência encontrada"; diff --git a/DuckDuckGo/pt.lproj/Localizable.strings b/DuckDuckGo/pt.lproj/Localizable.strings index 1297eddc66..0d48183589 100644 --- a/DuckDuckGo/pt.lproj/Localizable.strings +++ b/DuckDuckGo/pt.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL copiada"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Eliminar"; /* Disable protection action */ "action.title.disable.protection" = "Desativar Proteção de Privacidade"; @@ -119,7 +119,7 @@ "addWidget.description" = "Tenha acesso rápido à pesquisa privada e aos sites que mais gosta."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Prima prolongadamente o ecrã inicial para entrar no modo jiggle."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Toque no botão de mais %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Não foi possível eliminar os dados no servidor."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Para emparelhar estes dispositivos, desative a Sincronização e cópia de segurança num dispositivo e, em seguida, toque em \"Sincronizar com outro dispositivo\" no outro dispositivo."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Não foi possível remover este dispositivo da sincronização e cópia de segurança."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Vai eliminar o seu marcador para \"%@\""; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Eliminar?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Marcador eliminado"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Enviar sempre relatórios de falhas"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Ocultar"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Os relatórios de falhas ajudam a DuckDuckGo a diagnosticar problemas e a melhorar os nossos produtos. Não contêm nenhuma informação pessoal identificável."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "A Internet pode ser um pouco assustadora.\n\nMas não se preocupe! Pesquisar e navegar em privado é mais fácil do que pensa."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Depurar"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "dispositivo"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Guardar em Transferências"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Cancelar"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Tem a certeza de que quer cancelar esta transferência?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Retomar"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Não"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Cancelar Transferência?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Sim"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Eliminar tudo"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo para iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Sempre"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Pergunte todas as vezes"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nunca"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "O Duck Player permite-te ver o YouTube sem anúncios segmentados como se estivesses no cinema no DuckDuckGo, e o que vês não vai influenciar as tuas recomendações."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Entendi!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Já não suportas ver anúncios no YouTube? Experimenta o Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "O DuckDuckGo fornece todos os Privacy Essentials de que precisas para te protegeres enquanto navegas na Web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "O Duck Player oferece uma experiência de visualização limpa sem anúncios personalizados e evita que as atividades de visualização influenciem as recomendações do YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Saiba mais"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Abrir vídeos no Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Proteção de e-mail"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Ocultar o teu e-mail e\nbloquear rastreadores"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Ainda não foram adicionados marcadores"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Detetado problema na aplicação"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Ocorreu um erro desconhecido"; /* No comment provided by engineer. */ "favorite" = "Favorito"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Remover"; +/* No comment provided by engineer. */ +"Favorites" = "Favoritos"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Todos os favoritos no dispositivo"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Apenas favoritos em dispositivos móveis"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Bloquear anúncios e pop-ups"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Obtém o DuckDuckGo para Mac ou Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Adicione o DuckDuckGo ao seu ecrã inicial!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Página inicial"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Damos-lhe as boas-vindas ao\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "VPN do DuckDuckGo"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Política de Privacidade"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Concordar e continuar"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "Podes usar gratuitamente a DuckDuckGo VPN durante o período de acesso antecipado."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Concordar e continuar"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Ativar notificações"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Tenho um Código de Convite"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Entrar na lista de espera"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Comece"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Encripta o tráfego online nos teus navegadores e aplicações."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Cobertura completa do dispositivo"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Não precisas de uma aplicação separada. Liga-te com um clique e vê rapidamente o estado da ligação."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rápida, fiável e simples"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Não registamos nem guardamos dados que possam ser associados à tua atividade online."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Política sem registos rigorosa"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Obtém uma camada extra de proteção online com a VPN criada para velocidade e simplicidade. Encripta a tua ligação à internet em todo o teu dispositivo e oculta a tua localização e endereço de IP dos sites que visitas."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Convidamos-te a experimentar\na versão de acesso antecipado da DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Protege a tua ligação em qualquer altura e em qualquer lugar com a Network Protection, a VPN do DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Entra na lista de espera. Avisamos-te quando for a tua vez."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Acesso Antecipado à VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Está na lista!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Enviamos novos convites regularmente por ordem de entrada na lista."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Notificamos-te quando o teu convite estiver pronto."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Vamos enviar-te uma notificação quando o teu convite para testar a DuckDuckGo VPN estiver pronto."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Recebe uma notificação quando a tua cópia da versão de acesso antecipado da Network Protection estiver pronta."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Sabe assim que receberes o convite"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Abra o seu convite"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "A DuckDuckGo VPN está pronta!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "O teu convite está pronto!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Está na lista!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Adira à Lista de Espera Privada"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Acerca de"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Volume de Dados"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Permitir que o tráfego local ignore a VPN e ligue a dispositivos na tua rede local, como uma impressora."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Excluir redes locais"; @@ -1696,11 +1663,11 @@ /* 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 nossa VPN utiliza DNS seguro para manter a tua atividade online privada e impedir que o teu fornecedor de internet saiba os sites que visitas."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Perguntas Frequentes"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Partilhar Feedback Sobre a VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Não encontramos a aplicação necessária para abrir esse link"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Reativar"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Cancelar"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Desativar"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Gerir marcadores"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Abrir noutra aplicação?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Pesquisar ou inserir endereço"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Mostrar endereço completo do site"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Sempre ligada"; /* Settings screen appearance section title */ "settings.appearance" = "Aparência"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Passos seguintes"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Desligado"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Ligado"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Pré-visualizações ao premir prolongadamente"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "A tua subscrição está a ser ativada"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Privacidade mais simplificada com três novas proteções:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Subscreve novamente para continuares a utilizar o Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "A tua subscrição Privacy Pro expirou"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "O DuckDuckGo bloqueia automaticamente os rastreadores ocultos enquanto navegas na Internet.\n[Sabe Mais](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Seleciona a opção que melhor descreve o problema que enfrentaste."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Ignorar"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Isto ajuda-nos a melhorar o navegador."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "O site não funciona? Informa o DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "O site não funciona"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Submeter relatório"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Que site está com falhas?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Ativar Subscrição"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Acede à tua subscrição Privacy Pro com um endereço de e-mail."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Utiliza a tua subscrição noutros dispositivos"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Planos de Subscrição"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Voltar às Definições"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "A tua subscrição expirou a %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Desativar a sincronização?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Desbloquear dispositivo para configurar a Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Lamentamos, mas a sincronização e cópia de segurança não estão disponíveis de momento. Tenta novamente mais tarde."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Alternar de separador"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Escolha o tamanho de texto da sua preferência. Os sites que vê no DuckDuckGo ajustar-se-ão."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Claro"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Proteção de privacidade desativada para %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Encontra e seleciona DuckDuckGo. Em seguida, desliza para VPN e seleciona Adicionar widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Adicionar widget de VPN ao ecrã inicial"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Permitir notificações"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Está convidado!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favorito removido"; diff --git a/DuckDuckGo/ro.lproj/Bookmarks.strings b/DuckDuckGo/ro.lproj/Bookmarks.strings index 36557e9e44..6e4fe854c0 100644 --- a/DuckDuckGo/ro.lproj/Bookmarks.strings +++ b/DuckDuckGo/ro.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Ștergere"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nu s-au găsit potriviri"; diff --git a/DuckDuckGo/ro.lproj/Localizable.strings b/DuckDuckGo/ro.lproj/Localizable.strings index ac7d1d4ccb..876a047a6d 100644 --- a/DuckDuckGo/ro.lproj/Localizable.strings +++ b/DuckDuckGo/ro.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL copiat"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Ștergere"; /* Disable protection action */ "action.title.disable.protection" = "Dezactivează protecția confidențialității"; @@ -119,7 +119,7 @@ "addWidget.description" = "Obține acces rapid la căutarea privată și la site-urile care îți plac."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Ține apăsat pe ecranul de întâmpinare pentru a intra în modul în care elementele „tremură”."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Atinge butonul plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nu se pot șterge datele de pe server."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Pentru a asocia aceste dispozitive, dezactivează Sincronizare și backup pe un dispozitiv, apoi atinge „Sincronizează cu un alt dispozitiv” pe celălalt dispozitiv."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Nu se poate elimina acest dispozitiv din Sincronizare și backup."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Aceasta va șterge marcajul tău pentru „%@”"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Dorești să ștergi?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Marcaj șters"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Trimite întotdeauna rapoarte de cădere"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Ascunde"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Rapoartele de cădere ajută DuckDuckGo să diagnosticheze problemele și să îmbunătățească produsele noastre. Acestea nu conțin informații de identificare personală."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internetul poate fi cam terifiant.\n\nNu te îngrijora! Căutarea și navigarea în mod confidențial sunt mai ușoare decât crezi."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Depanează"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "dispozitiv"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Salvează în Descărcări"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Renunță"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Sigur dorești să anulezi această descărcare?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Reia"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nu"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Anulezi descărcarea?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Da"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Șterge toate"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pentru iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Întotdeauna"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Întreabă de fiecare dată"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Niciodată"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player îți permite să vizionezi videoclipuri pe YouTube fără reclame țintite, într-o experiență asemănătoare unui cinematograf, în DuckDuckGo, iar ceea ce vizionezi nu îți va influența recomandările."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Am înțeles!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Te copleșesc reclamele pe YouTube? Încearcă Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo oferă toate elementele de confidențialitate esențiale de care ai nevoie pentru a te proteja în timp ce navighezi pe web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player oferă o experiență de vizionare fără perturbări, fără reclame personalizate și împiedică activitatea de vizionare să îți influențeze recomandările YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Află mai multe"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Deschide videoclipuri în Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Protecția comunicațiilor prin e-mail"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Ascunde-ți e-mailul și blochează tehnologiile de urmărire"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Nu s-a adăugat niciun semn de carte"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "A fost detectată o problemă cu aplicația"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "S-a produs o eroare necunoscută."; /* No comment provided by engineer. */ "favorite" = "Preferință"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Elimină"; +/* No comment provided by engineer. */ +"Favorites" = "Preferințe"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Toate favoritele de pe dispozitiv"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Doar favoritele pentru mobil"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blocarea anunțurilor și ferestrelor pop-up"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Obține DuckDuckGo pentru Mac sau Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Adaugă DuckDuckGo pe ecranul de start!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Pagina de pornire"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "Identificator: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Bine ai venit la\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Politica de confidențialitate"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "De acord și continuă"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN se poate utiliza gratuit în perioada de acces anticipat."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "De acord și continuă"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Activează notificările"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Am un cod de invitație"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Înscrie-te pe lista de așteptare"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Să începem"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Criptează traficul online în browserele și aplicațiile utilizate."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Acoperire totală a dispozitivului"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nu este nevoie de o aplicație separată. Conectează-te cu un singur clic și vezi starea conexiunii dintr-o singură privire."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rapid, sigur și ușor de utilizat"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Nu înregistrăm și nu salvăm date care pot face legătura cu activitatea ta online."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Politică strictă de interzicere a jurnalelor"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Obține un nivel suplimentar de protecție online cu VPN-ul creat pentru viteză și simplitate. Criptează conexiunea la internet pe întregul dispozitiv și ascunde-ți locația și adresa IP de pe site-urile pe care le accesezi."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Te invităm să încerci\naccesul anticipat la DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Obține o conexiune sigură oricând și oriunde cu Network Protection, VPN-ul de la DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Alătură-te listei de așteptare și te vom anunța când îți vine rândul."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Acces anticipat VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Ești pe listă!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Noile invitații sunt trimise la fiecare câteva zile pe baza principiului „primul venit, primul servit”."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Te vom anunța când invitația ta este gata."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Îți vom trimite o notificare când invitația ta de a testa DuckDuckGo VPN este gata."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Primești o notificare atunci când copia ta pentru acces timpuriu la Network Protection este gata."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Află momentul exact în care ești invitat(ă)"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Deschide invitația ta"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN este gata!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Invitația ta este gata!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Ești pe listă!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Alătură-te listei de așteptare private"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Despre"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Volum de date"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Lasă traficul local să ocolească VPN-ul și să se conecteze la dispozitivele din rețeaua locală, cum ar fi o imprimantă."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Exclude rețelele locale"; @@ -1696,11 +1663,11 @@ /* 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" = "VPN-ul nostru utilizează DNS securizat pentru a-ți păstra activitatea online privată, astfel încât furnizorul tău de internet să nu poată vedea ce site-uri web accesezi."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Întrebări frecvente"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Oferă feedback despre VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Aplicația necesară pentru a deschide acel link nu poate fi găsită"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Reactivează"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Renunță"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Dezactivează"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Gestionează marcajele"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Deschizi în altă aplicație?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Caută sau introdu adresa"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Afișați adresa completă a site-ului"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Întotdeauna activat"; /* Settings screen appearance section title */ "settings.appearance" = "Aspect"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Pașii următori"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Dezactivat"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Activat"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Previzualizări prin apăsare lungă"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Abonamentul tău este în curs de activare"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Confidențialitate optimizată, cu trei noi mecanisme de protecție:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Abonează-te din nou pentru a continua să utilizezi Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Abonamentul tău Privacy Pro a expirat"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blochează automat tehnologiile de urmărire ascunse în timp ce navighezi pe web.\n[Află mai multe](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Selectează opțiunea care descrie cel mai bine problema cu care te-ai confruntat."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Renunță"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Acest lucru ne ajută să îmbunătățim browserul."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Site-ul nu funcționează? Anunță DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Site-ul este nefuncțional"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Trimite raportul"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Ce site este defect?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Activează abonamentul"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Accesează-ți abonamentul Privacy Pro dintr-o adresă de e-mail."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Utilizează-ți abonamentul pe alte dispozitive"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Tipuri de abonament"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Înapoi la Setări"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Abonamentul tău a expirat la data de %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Oprești sincronizarea?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Deblochează dispozitivul pentru a configura Sync & Backup"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Ne pare rău, dar Sincronizarea și copierea de rezervă nu este disponibilă momentan. Încearcă din nou mai târziu."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Comutator între file"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Alege dimensiunea preferată a textului. Site-urile pe care le vizitezi în DuckDuckGo se vor adapta la aceasta."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Lumină"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Această listă conține mesaje care au fost afișate plus cel mult 1 mesaj programat pentru afișare. Este posibil să existe mai multe mesaje în configurare care vor fi prezentate, dar acestea nu au fost încă prelucrate."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Protecția confidențialității este dezactivată pentru %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Găsește și selectează DuckDuckGo. Apoi glisează la VPN și selectează Adaugă widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Adaugă un widget VPN la ecranul de întâmpinare"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Permite notificările"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Ești invitat(ă)!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favorit eliminat"; diff --git a/DuckDuckGo/ru.lproj/Bookmarks.strings b/DuckDuckGo/ru.lproj/Bookmarks.strings index 7bb4cb82b1..961b2bbe62 100644 --- a/DuckDuckGo/ru.lproj/Bookmarks.strings +++ b/DuckDuckGo/ru.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Метка"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Удалить"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Ничего не найдено"; diff --git a/DuckDuckGo/ru.lproj/Localizable.strings b/DuckDuckGo/ru.lproj/Localizable.strings index 721f3774c5..c151958926 100644 --- a/DuckDuckGo/ru.lproj/Localizable.strings +++ b/DuckDuckGo/ru.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Адрес скопирован"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Удалить"; /* Disable protection action */ "action.title.disable.protection" = "Отключить защиту конфиденциальности"; @@ -119,7 +119,7 @@ "addWidget.description" = "Быстрый доступ к конфиденциальному поиску и любимым сайтам."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Удерживайте нажатие на домашнем экране, чтобы запустить режим настройки."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Нажмите кнопку «плюс» %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Не удалось удалить данные с сервера."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Чтобы выполнить сопряжение этих устройств, отключите функцию «Синхронизация и резервное копирование» на одном из них и нажмите кнопку «Синхронизировать с другим устройством» на другом."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Не удалось удалить устройство из списка синхронизации и резервного копирования."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Это приведет к удалению закладки для «%@»"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Удалить?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Закладка удалена"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Всегда отправлять отчеты о сбоях"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Скрыть"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Отчеты о сбоях помогают нам диагностировать проблемы и совершенствовать продукты. Они не содержат информации, по которой можно установить вашу личность."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Интернет набит трекерами.\n\nНо выход есть! Пользоваться сетью без слежки проще, чем вы думали."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Отладка"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "устройстве"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Сохранить в «Загрузки»"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Отменить"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Вы точно хотите отменить эту загрузку?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Продолжить"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Нет"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Отменить загрузку?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Да"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Удалить все"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo для iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Всегда"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Спрашивать каждый раз"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Никогда"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Проигрыватель Duck Player позволяет смотреть видео из YouTube в браузере DuckDuckGo в режиме кинотеатра без целевой рекламы. Просмотренные ролики не влияют на рекомендации."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Понятно"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Шквал рекламы на YouTube? Попробуйте Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo обеспечивает все основные функции для защиты конфиденциальности в интернете."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Проигрыватель Duck Player обеспечивает беспрепятственный просмотр без персонализированной рекламы и влияния просмотренных роликов на рекомендации в YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Узнать больше"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Открывать видео в Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Проигрыватель Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Защита электронной почты"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Скрытие адреса почты\nи блокировка трекеров"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Закладок пока нет"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Ошибка в приложении"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Произошла неизвестная ошибка"; /* No comment provided by engineer. */ "favorite" = "Избранное"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Удалить"; +/* No comment provided by engineer. */ +"Favorites" = "Избранное"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Избранное со всех устройств"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Только избранное с телефона"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Блокировка рекламы и всплывающих окон"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "DuckDuckGo для Mac и Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Добавьте DuckDuckGo на домашний экран!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Домашняя"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "Код: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Добро пожаловать в\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Политика конфиденциальности"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Принять и продолжить"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "В период раннего доступа сервис DuckDuckGo VPN предоставляется бесплатно."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Принять и продолжить"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Включить уведомления"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "У меня есть пригласительный код"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Встать в очередь"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Приступим!"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Шифрование онлайн-трафика в браузерах и приложениях."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "В масштабе всего устройства"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Отдельное приложение не требуется. Подключение выполняется в один клик, а его состояние отображается моментально."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Быстро, надежно, просто"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Мы не регистрируем и не храним данные, по которым вашу онлайн-активность можно связать с вами."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Никаких логов"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Быстрый и простой VPN — дополнительный уровень защиты онлайн. Позволяет зашифровать все подключения к интернету на устройстве и скрывает ваше местоположение и IP-адрес от посещаемых сайтов."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Ранний доступ\nк DuckDuckGo VPN"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Функция Network Protection — VPN от DuckDuckGo — защитит ваше соединение независимо от места и времени."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Записывайтесь в очередь, и мы будем держать вас в курсе."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN по раннему доступу"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Вы в списке!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Новые приглашения отправляются каждые несколько дней в порядке живой очереди."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Мы сообщим вам, когда придет ваш черед."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Когда подойдет ваша очередь протестировать DuckDuckGo VPN, мы отправим вам уведомление."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Когда вам откроется ранний доступ к функции Network Protection, вы получите уведомление."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Моментальное уведомление"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Откройте приглашение"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Сервис DuckDuckGo VPN готов!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Ваше приглашение готово!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Вы в списке!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Приглашаем встать в очередь"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "О нас"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Объем трафика"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Настройте локальный трафик так, чтобы он поступал в обход VPN на устройства локальной сети, например, на принтер."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Исключить локальные сети"; @@ -1696,11 +1663,11 @@ /* 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" = "Для скрытия вашей активности онлайн VPN использует безопасный DNS. Так ваш провайдер не узнает, какие сайты вы посещаете."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Часто задаваемые вопросы"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Отзыв о VPN-сервисе"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Приложение для открытия этой ссылки не найдено"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Активировать"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Отменить"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Деактивировать"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Управление закладками"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Открыть в другом приложении?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Введите поисковый запрос или адрес сайта"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Показывать полный адрес сайта"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Всегда включено"; /* Settings screen appearance section title */ "settings.appearance" = "Внешний вид"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Дальнейшие шаги"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Выключено"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Включено"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Предпросмотр долгим нажатием"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Ваша подписка активируется"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Три новых рычага для более органичной защиты конфиденциальности:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Чтобы использовать Privacy Pro, подпишитесь заново"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Срок действия вашей подписки Privacy Pro истек"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo автоматически блокирует скрытые трекеры, пока вы посещаете сайты.\n[Подробнее...](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Выберите наиболее точное описание проблемы, с которой вы столкнулись."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Отклонить"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Ваш ответ поможет нам улучшить работу браузера."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Сайт не работает? Сообщите в DuckDuckGo!"; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Проблема на сайте"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Отправить жалобу"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "На каком сайте возникает проблема?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Активация подписки"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Подписку на услуги Privacy Pro можно активировать по электронной почте."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Использование подписки на других устройствах"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Тарифные планы"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Назад к настройкам"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Срок действия вашей подписки истек %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Отключить синхронизацию?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Для настройки синхронизации и резервного копирования нужно разблокировать устройство."; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Синхронизация и резервное копирование сейчас недоступны. Повторите попытку позже."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Переключатель вкладок"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Выберите удобный для вас размер шрифта. DuckDuckGo настроит вид сайтов автоматически."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Светлая"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "В этом списке содержатся уже показанные сообщения, а также максимум одно сообщение, показ которого запланирован. В конфигурации могут находиться и другие сообщения, которые будут показаны после обработки."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Защита конфиденциальности на %@ отключена"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Найдите и выберите DuckDuckGo. Затем с помощью свайпа перейдите к VPN и выберите опцию «Добавить виджет»."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Добавить виджет VPN на главный экран"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Разрешить уведомления"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Вас пригласили!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Страница удалена из избранного"; diff --git a/DuckDuckGo/sk.lproj/Bookmarks.strings b/DuckDuckGo/sk.lproj/Bookmarks.strings index e3e3466779..2fb43cb910 100644 --- a/DuckDuckGo/sk.lproj/Bookmarks.strings +++ b/DuckDuckGo/sk.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Označenie"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Vymazať"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Nenašli sa žiadne zhody"; diff --git a/DuckDuckGo/sk.lproj/Localizable.strings b/DuckDuckGo/sk.lproj/Localizable.strings index 5d78d958fa..1fa269911c 100644 --- a/DuckDuckGo/sk.lproj/Localizable.strings +++ b/DuckDuckGo/sk.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Adresa URL bola skopírovaná"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Vymazať"; /* Disable protection action */ "action.title.disable.protection" = "Vypnúť ochranu súkromia"; @@ -119,7 +119,7 @@ "addWidget.description" = "Získajte prístup k súkromnému vyhľadávaniu a svojim obľúbeným webovým lokalitám."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Dlhým stlačením na domovskej obrazovke spustíte režim zatrasenia."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Klepnite na tlačidlo plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Nie je možné odstrániť údaje na serveri."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Ak chcete tieto zariadenia spárovať, vypnite funkciu Synchronizácia a zálohovanie v jednom zariadení a potom ťuknite na „Synchronizovať s iným zariadením“ v druhom zariadení."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Toto zariadenie nie je možné odstrániť zo Synchronizácie a zálohovania."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Týmto sa zmaže vaša záložka pre „%@“"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Odstrániť?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Záložka bola zmazaná"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Vždy odosielať správy o zlyhaní"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Skryť"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Hlásenia o zlyhaniach pomáhajú spoločnosti DuckDuckGo diagnostikovať problémy a zlepšovať naše produkty. Neobsahujú žiadne osobné identifikačné údaje."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet môže byť dosť nevyspytateľný.\n\nNemajte žiadne obavy! Súkromné vyhľadávanie a prehliadanie je jednoduchšie, ako si myslíte."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Ladenie (debug)"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "zariadenie"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Uložiť do stiahnutých"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Zrušiť"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Naozaj chcete zrušiť toto sťahovanie?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Obnoviť"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nie"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Zrušiť sťahovanie?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Áno"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Odstrániť všetko"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pre iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Vždy"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Vždy sa opýtať"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nikdy"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player vám umožňuje v DuckDuckGo sledovať YouTube bez cielených reklám ako v kine a to, čo sledujete, nebude mať vplyv na vaše odporúčania."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Rozumiem!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Utápať sa v reklamách na YouTube? Vyskúšajte Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo poskytuje všetky Privacy Essentials, ktoré potrebujete na ochranu pri prehliadaní webu."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player poskytuje čisté zobrazenie bez personalizovaných reklám a zabraňuje tomu, aby aktivita pri sledovaní ovplyvňovala vaše odporúčania v službe YouTube."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Zistite viac"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Otvorenie videí v programe Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Ochrana e-mailu"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Skryte svoj e-mail\na blokujte sledovače"; +/* No comment provided by engineer. */ +"empty!" = "prázdne!"; + /* Empty list state placholder */ "empty.bookmarks" = "Zatiaľ neboli pridané žiadne záložky"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Zistený problém s aplikáciou"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Vyskytla sa neznáma chyba."; /* No comment provided by engineer. */ "favorite" = "Obľúbené položky"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Odstrániť"; +/* No comment provided by engineer. */ +"Favorites" = "Obľúbené položky"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Obľúbené položky zo všetkých zariadení"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Iba obľúbené mobilné položky"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokovanie reklám a automaticky otváraných okien"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Získajte DuckDuckGo pre Mac alebo Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Pridajte DuckDuckGo na svoju domovskú obrazovku!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Domov"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Vitajte v\nprehliadači DuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Zásady ochrany súkromia"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Súhlasiť a pokračovať"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "Používanie DuckDuckGo VPN je počas skorého prístupu bezplatné."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Súhlasiť a pokračovať"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Povoliť oznámenia"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Mám pozývací kód"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Pridajte sa na zoznam čakateľov"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Začnite"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Šifrujte online prenos vo svojich prehliadačoch a aplikáciách."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Pokrytie celého zariadenia"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Nie je potrebná samostatná aplikácia. Pripojte sa jedným kliknutím a s prehľadom sledujte stav svojho pripojenia."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Rýchle, spoľahlivé a jednoduché na používanie"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Nezaznamenávame ani neukladáme žiadne údaje, ktoré by vás mohli spojiť s vašou online aktivitou."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Prísna politika zákazu protokolovania"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Získajte ďalšiu úroveň ochrany online vďaka sieti VPN vytvorenej pre rýchlosť a jednoduchosť. Šifrujte svoje internetové pripojenie v celom zariadení a skryte svoju polohu a IP adresu pred navštívenými stránkami."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Pozývame vás, aby ste vyskúšali prednostný prístup k DuckDuckGo VPN!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Zabezpečte si pripojenie kedykoľvek a kdekoľvek pomocou Ochrany siete, VPN od DuckDuckGo."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Pridajte sa na zoznam čakateľov a my vás upozorníme, keď na vás príde rad."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Prednostný prístup VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Ste na zozname čakateľov!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nové pozvánky sa posielajú podľa poradia každých niekoľko dní."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Keď bude vaša pozvánka pripravená, upozorníme vás."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Keď bude vaša pozvánka na testovanie DuckDuckGo VPN pripravená, pošleme vám upozornenie."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Získajte upozornenie, keď bude pripravená vaša kópia aplikácie prednostného prístupu k Ochrane siete."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Zistite, kedy ste boli pozvaný/-á"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Otvorte svoju pozvánku"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN je pripravená!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Vaša pozvánka je pripravená!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Ste na zozname čakateľov!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Pridajte sa do súkromného zoznamu čakateľov"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "O nás"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Dátový objem"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Umožnite miestnej prevádzke obísť sieť VPN sieť a pripojiť sa k zariadeniam v miestnej sieti, napríklad k tlačiarni."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Vylúčiť miestne siete"; @@ -1696,11 +1663,11 @@ /* 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" = "Naša sieť VPN používa zabezpečený DNS na zachovanie súkromia vašej online aktivity, aby váš poskytovateľ internetu nemohol vidieť, aké webové lokality navštevujete."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Často kladené otázky"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Zdieľať spätnú väzbu k VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Aplikácia potrebná na otvorenie odkazu sa nenašla"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Reaktivovať"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Zrušiť"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Reaktivovať"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Správa záložiek"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Otvoriť v inej aplikácii?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Vyhľadajte alebo zadajte adresu"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Zobraziť úplnú adresu lokality"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Vždy zapnuté"; /* Settings screen appearance section title */ "settings.appearance" = "Vzhľad"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Ďalšie kroky"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Vypnuté"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Zapnuté"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Náhľady po dlhodobom stlačení"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Vaše predplatné sa aktivuje"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Bezproblémové súkromie s tromi novými ochranami:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Znova sa prihláste na odber, aby ste mohli naďalej používať Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Vaše predplatné Privacy Pro vypršalo"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo automaticky blokuje skryté sledovacie zariadenia pri prehliadaní webu.\n[Viac informácií](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Vyberte možnosť, ktorá najlepšie opisuje problém, ktorý ste zaznamenali."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Odmietnuť"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Toto nám pomáha vylepšiť prehliadač."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Stránka nefunguje? Oznámte to DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Webová stránka je nefunkčná"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Odoslať správu"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Ktorá webová stránka je nefunkčná?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktivovať predplatné"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Získajte prístup k odberu Privacy Pro prostredníctvom e-mailovej adresy."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Použite svoje predplatné na iných zariadeniach"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Plány predplatného"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Späť na nastavenia"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Platnosť vášho predplatného vypršala dňa %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Chcete vypnúť synchronizáciu?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Ak chcete nastaviť službu Sync & Backup, odomknite zariadenie."; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Ľutujeme, ale synchronizácia a zálohovanie momentálne nie sú k dispozícii. Prosím, skúste to neskôr znova."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Prepínač kariet"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Vyberte si preferovanú veľkosť textu. Webové stránky zobrazené v DuckDuckGo sa tomu prispôsobia."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Svetlá"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Tento zoznam obsahuje zobrazené správy a maximálne 1 správu, ktorá je naplánovaná na zobrazenie. V konfigurácii môžu byť ďalšie správy, ktoré sa zobrazia, ale ešte neboli spracované."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Ochrana súkromia na doméne %@ bola vypnutá"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Nájdite a vyberte DuckDuckGo. Potom potiahnite prstom na položku VPN a vyberte položku Pridať widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Pridať miniaplikáciu VPN na domovskú obrazovku"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Povoliť oznámenia"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Ste pozvaný/-á!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Obľúbená položka bola odstránená"; diff --git a/DuckDuckGo/sl.lproj/Bookmarks.strings b/DuckDuckGo/sl.lproj/Bookmarks.strings index 73d2c5c51b..fe79b69610 100644 --- a/DuckDuckGo/sl.lproj/Bookmarks.strings +++ b/DuckDuckGo/sl.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Oznaka"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Izbriši"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Ni zadetkov"; diff --git a/DuckDuckGo/sl.lproj/Localizable.strings b/DuckDuckGo/sl.lproj/Localizable.strings index 7547d9a1bd..fded568770 100644 --- a/DuckDuckGo/sl.lproj/Localizable.strings +++ b/DuckDuckGo/sl.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL naslov kopiran"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Izbriši"; /* Disable protection action */ "action.title.disable.protection" = "Onemogoči zaščito zasebnosti"; @@ -119,7 +119,7 @@ "addWidget.description" = "Zagotovite si hiter dostop do zasebnega iskanja in spletnih mest, ki so vam všeč."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Pritisnite in pridržite točko na začetnem zaslonu, da vstopite v način premikanja."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Tapnite gumb plus %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Podatkov na strežniku ni bilo mogoče izbrisati."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Če želite seznaniti ti napravi, izklopite možnost »Sinhronizacija in varnostno kopiranje« v eni napravi in nato v drugi napravi tapnite »Sinhronizacija z drugo napravo«."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Te naprave ni bilo mogoče odstraniti iz sinhronizacije in varnostnega kopiranja."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "S tem boste izbrisali svoj zaznamek za »%@«"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Želite izbrisati?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Zaznamek je bil izbrisan"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Vedno pošlji poročila o zrušitvah"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Skrij se"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Poročila o zrušitvah pomagajo DuckDuckGo pri diagnosticiranju težav in izboljševanju naših izdelkov. Ne vsebujejo nobenih osebnih podatkov."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet je lahko grozljiv.\n\nNe skrbi! Iskanje in brskanje na zaseben način je lažje, kot si misliš."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Odpravljanje napak"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "naprava"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Shrani med prenose"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Prekliči"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Ste prepričani, da želite preklicati ta prenos?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Nadaljuj"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Ne"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Želite preklicati prenos?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Da"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Izbriši vse"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo za iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Vedno"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Vprašaj vsakič"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Nikoli"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Predvajalnik Duck Player vam s pomočjo DuckDuckGo omogoča kinematografsko izkušnjo gledanja YouTuba brez ciljanih oglasov, kar gledate pa ne bo vplivalo na vaša priporočila."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Razumem!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Se utapljate v oglasih na YouTubu? Preizkusite Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo zagotavlja vse bistvene elemente zasebnosti, ki jih potrebujete, da se zaščitite med brskanjem po spletu."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Predvajalnik Duck Player zagotavlja čisto izkušnjo gledanja brez prilagojenih oglasov in preprečuje, da bi dejavnost gledanja vplivala na vaša priporočila v YouTubu."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Več"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Odpri videoposnetke s predvajalnikom Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "Zaščita e-pošte"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Skrijte svojo e-pošto in \nblokirajte sledilnike"; +/* No comment provided by engineer. */ +"empty!" = "prazno!"; + /* Empty list state placholder */ "empty.bookmarks" = "Zaznamki še niso dodani"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Odkrita težava z aplikacijo"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Prišlo je do neznane napake."; /* No comment provided by engineer. */ "favorite" = "Priljubljeni"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Odstrani"; +/* No comment provided by engineer. */ +"Favorites" = "Priljubljeni"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Priljubljene iz vseh naprav"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Priljubljene samo iz mobilne naprave"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blokiranje oglasov in pojavnih oken"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Prenesite DuckDuckGo za računalnike Mac ali Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Dodaj DuckDuckGo na domači zaslon!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Domov"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Dobrodošli v aplikaciji\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "VPN DuckDuckGo"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Pravilnik o zasebnosti"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Strinjam se in želim nadaljevati"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "Uporaba omrežja VPN DuckDuckGo je med zgodnjim dostopom brezplačna."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Strinjam se in želim nadaljevati"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Omogoči obvestila"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Imam kodo povabila"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Pridruži se čakalni listi"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Začni"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Šifrirajte spletni promet v svojih brskalnikih in aplikacijah."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Pokritost celotne naprave"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Ne potrebujete ločene aplikacije. Povežite se z enim klikom in si na hitro oglejte stanje povezave."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Hitra, zanesljiva in preprosta za uporabo"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Ne beležimo in ne shranjujemo nobenih podatkov, ki bi vas lahko povezali z vašo spletno dejavnostjo."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Stroga politika, ki prepoveduje beleženje"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Pridobite dodatno raven zaščite na spletu z VPN-jem, ustvarjenim za hitrost in preprostost. Šifrirajte internetno povezavo v celotni napravi ter skrijte svojo lokacijo in naslov IP pred spletnimi mesti, ki jih obiščete."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Vabimo vas, da preizkusite\nzgodnji dostop do omrežja VPN DuckDuckGo!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Z zaščito omrežja Network Protection, VPN-jem podjetja DuckDuckGo, zaščitite povezavo kjer koli in kadar koli."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Pridružite se čakalni listi in obvestili vas bomo, ko boste na vrsti."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Zgodnji dostop do omrežja VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Na seznamu ste!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nova povabila pošljemo vsakih nekaj dni, in sicer po načelu kdor prej pride, prej melje."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Ko bo vaše povabilo pripravljeno, vas bomo obvestili."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Ko bo vaše povabilo za preizkus omrežja VPN DuckDuckGo pripravljeno, vam bomo poslali obvestilo."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Prejmite obvestilo, ko bo vaš zgodnji dostop do zaščite omrežja Network Protection pripravljen."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Bodite obveščeni, takoj ko ste povabljeni"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Odprite svoje povabilo"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "Omrežje VPN DuckDuckGo je pripravljeno!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Vaše povabilo je pripravljeno!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Na seznamu ste!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Pridruži se zasebnemu čakalnemu seznamu"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Več o"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Podatkovni nosilec"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Omogočite, da lahko lokalni promet zaobide omrežje VPN in se poveže z napravami v lokalnem omrežju, na primer s tiskalnikom."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Izključitev lokalnih omrežij"; @@ -1696,11 +1663,11 @@ /* 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" = "Naš VPN za ohranjanje zasebnosti vaših spletnih dejavnosti uporablja varni DNS, zato da ponudnik interneta ne more videti, katera spletna mesta obiskujete."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Pogosta vprašanja"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Deljenje povratnih informacij o omrežju VPN"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Aplikacije, ki je potrebna za odpiranje te povezave, ni mogoče najti"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Znova aktiviraj"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Prekliči"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Deaktiviraj"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Upravljanje zaznamkov"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Odpri v drugi aplikaciji?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Poišči ali vnesi naslov"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Prikaži polni naslov spletnega mesta"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Vedno vklopljeno"; /* Settings screen appearance section title */ "settings.appearance" = "Izgled"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Naslednji koraki"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Izklopljeno"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Vključeno"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Pregledi z dolgim pritiskom"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Vaša naročnina je v postopku aktivacije"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Več brezhibne zasebnosti s tremi novimi zaščitami:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Znova se naročite, če želite še naprej uporabljati Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Vaša naročnina na Privacy Pro je potekla"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo samodejno blokira skrite sledilnike med brskanjem po spletu.\n[Več o tem](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Izberite možnost, ki najbolje opisuje težavo, na katero ste naleteli."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Opusti"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "To nam pomaga izboljšati brskalnik."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Stran ne deluje? Sporočite DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Spletna stran je nedelujoča"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Pošlji poročilo"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Katera spletna stran je poškodovana?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktiviranje naročnine"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Dostopajte do svoje naročnine na Privacy Pro prek e-poštnega naslova."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Uporaba naročnine v drugih napravah"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Naročniški paketi"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Nazaj na nastavitve"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Vaša naročnina se je iztekla dne %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Želite izklopiti sinhronizacijo?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Odklenite napravo, da nastavite funkcijo Sync & Backup (Sinhronizacija in varnostno kopiranje)"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Sinhronizacija in varnostno kopiranje žal trenutno nista na voljo. Poskusite znova pozneje."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Preklopi med zavihki"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Izberite želeno velikost besedila. Spletna mesta, ki se prikazujejo v iskalniku DuckDuckGo, se temu prilagodijo."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Luč"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Ta seznam vsebuje sporočila, ki so bila prikazana, in največ 1 sporočilo, ki je načrtovano za prikaz. V konfiguraciji je morda več sporočil, ki bodo predstavljena, vendar še niso bila obdelana."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Zaščita zasebnosti je onemogočena za %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Poiščite in izberite DuckDuckGo. Nato povlecite do VPN in izberite Dodaj pripomoček."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Dodajte pripomoček VPN na začetni zaslon"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Dovoli obvestila"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Povabljeni ste!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Priljubljeni odstranjeni"; diff --git a/DuckDuckGo/sv.lproj/Bookmarks.strings b/DuckDuckGo/sv.lproj/Bookmarks.strings index d47a507cf5..ed726f561f 100644 --- a/DuckDuckGo/sv.lproj/Bookmarks.strings +++ b/DuckDuckGo/sv.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Etikett"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Ta bort"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Inga träffar hittades"; diff --git a/DuckDuckGo/sv.lproj/Localizable.strings b/DuckDuckGo/sv.lproj/Localizable.strings index 6a720c0bb5..3e8686101a 100644 --- a/DuckDuckGo/sv.lproj/Localizable.strings +++ b/DuckDuckGo/sv.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "Webbadress kopierad"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Ta bort"; /* Disable protection action */ "action.title.disable.protection" = "Inaktivera integritetsskydd"; @@ -119,7 +119,7 @@ "addWidget.description" = "Få snabb tillgång till privat sökning och dina favoritwebbplatser."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Tryck länge på startskärmen tills apparna börjar vicka."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Tryck på plusknappen för %@."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Det gick inte att radera data på servern."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "För att parkoppla dessa enheter stänger du av synkronisering och säkerhetskopiering på en enhet och trycker därefter på ”Synkronisera med en annan enhet” på den andra enheten."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Det gick inte att ta bort denna enhet från synkronisering och säkerhetskopiering."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Ditt bokmärke för %@ kommer att raderas"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Ta bort?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Bokmärke raderat"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Skicka alltid kraschrapporter"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Dölj"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Kraschrapporter hjälper DuckDuckGo att diagnostisera problem och förbättra sina produkter. De innehåller ingen personligt identifierbar information."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "Internet kan vara lite läskigt.\n\nOroa dig inte! Att söka och surfa privat är lättare än du tror."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Felsökning"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "enhet"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "Spara till Nerladdningar"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "Avbryt"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Är du säker på att du vill avbryta denna nerladdning?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Återuppta"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Nej"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "Vill du avbryta nerladdningen?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Ja"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Radera allt"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo för iOS"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Alltid"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Fråga varje gång"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Aldrig"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Med Duck Player kan du titta på YouTube utan riktade annonser i en teaterliknande upplevelse i DuckDuckGo, och dina rekommendationer påverkas inte av vad du tittar på."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Jag förstår!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Drunknar du i annonser på YouTube? Prova Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo tillhandahåller allt du behöver för att skydda dig själv när du surfar på webben."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player ger en störningsfri visningsupplevelse utan personliga annonser och förhindrar att din tittaraktivitet påverkar YouTube-rekommendationer."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Läs mer"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Öppna videor i Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-postskydd"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "Dölj din e-postadress och\nblockera spårare"; +/* No comment provided by engineer. */ +"empty!" = "tom!"; + /* Empty list state placholder */ "empty.bookmarks" = "Inga bokmärken har lagts till ännu"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Problem med appen har upptäckts"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Ett okänt fel har inträffat"; /* No comment provided by engineer. */ "favorite" = "Favorit"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Ta bort"; +/* No comment provided by engineer. */ +"Favorites" = "Favoriter"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Alla enhetsfavoriter"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Endast mobila favoriter"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Blockering av annonser och poppuppfönster"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Hämta DuckDuckGo för Mac eller Windows"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "Lägg till DuckDuckGo på din hemskärm!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Hem"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "Välkommen till\nDuckDuckGo!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Integritetspolicy"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Acceptera och fortsätt"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN är gratis att använda under perioden med tidig tillgång."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Godkänn och fortsätt"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Aktivera aviseringar"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Jag har en inbjudningskod"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Skriv upp dig på väntelistan"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Kom igång"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Kryptera onlinetrafik i alla dina webbläsare och appar."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Fullständig täckning av enheter"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Ingen separat app behövs. Anslut med ett klick för en snabböversikt av din anslutningsstatus."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Snabb, pålitlig och enkel att använda"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Vi loggar och sparar ingen data som kan koppla dig till din aktivitet online."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Strikt policy mot loggning"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Få ett extra skyddslager online med ett VPN som är byggt för att fungera snabbt och enkelt. Kryptera din internetanslutning i hela enheten. Dölj din plats och IP-adress från webbplatser du besöker."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "Du är inbjuden att prova DuckDuckGo VPN med tidig tillgång!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "Gör din anslutning säker när och var som helst med DuckDuckGos VPN, Network Protection."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Skriv upp dig på väntelistan så meddelar vi dig när det är din tur."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "Tidig tillgång till VPN"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Du står på listan!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Nya inbjudningar skickas ut med några dagars mellanrum enligt principen först till kvarn."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Vi meddelar dig när din inbjudan är klar."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "Vi skickar ett meddelande till dig när din inbjudan att prova DuckDuckGo VPN är klar."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Få ett meddelande när ditt exemplar av tidigare tillgång till Network Protection är klart."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Få reda på det genast när du bjuds in"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Öppna din inbjudan"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN är klart!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Din inbjudan är klar!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Du står på listan!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Ställ dig i den privata väntelistan"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Om"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Datavolym"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Låt lokal trafik kringgå VPN och ansluta till enheter i ditt lokala nätverk, t.ex. skrivare."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Uteslut lokala nätverk"; @@ -1696,11 +1663,11 @@ /* 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" = "Vårt VPN använder Secure DNS för att hålla din onlineaktivitet privat. Det betyder att din internetleverantör inte kan se vilka webbplatser du besöker."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Vanliga frågor"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "Dela VPN-feedback"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Kan inte hitta appen som krävs för att öppna den här länken"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Återaktivera"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "Avbryt"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Inaktivera"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Hantera bokmärken"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Öppna i annan app?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Sök eller ange adress"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Visa hela webbplatsadressen"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Alltid på"; /* Settings screen appearance section title */ "settings.appearance" = "Utseende"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Nästa steg"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Av"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "På"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Förhandsvisning vid nedhållning"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Din prenumeration håller på att aktiveras"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Mer sömlös integritet med tre nya skydd:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Prenumerera igen för att fortsätta använda Privacy Pro"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Din prenumeration på Privacy Pro har gått ut"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo blockerar automatiskt dolda spårare när du surfar på webben.\n[Läs mer](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Välj det alternativ som bäst beskriver det problem som du har stött på."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Avvisa"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Det hjälper oss att förbättra webbläsaren."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Fungerar inte webbplatsen? Informera DuckDuckGo."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Webbplatsen fungerar inte"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Skicka in rapport"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Vilken webbplats är skadad?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aktivera abonnemang"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Kom åt ditt Privacy Pro-abonnemang genom en e-postadress."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Använd ditt abonnemang på andra enheter"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonnemangstyper"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Tillbaka till Inställningar"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Din prenumeration gick ut den %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Vill du inaktivera synkronisering?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Lås upp enheten för att konfigurera Sync & Backup."; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Tyvärr är synkronisering och säkerhetskopiering inte tillgängliga för närvarande. Försök igen senare."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Flikväxlare"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Välj önskad textstorlek. Webbplatser som du visar i DuckDuckGo anpassas efter din inställning."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Ljus"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Integritetsskydd inaktiverat för %@"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "Hitta och välj DuckDuckGo. Svep sedan till VPN och välj Lägg till widget."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "Lägg till VPN-widget på startsidan"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Tillåt aviseringar"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Du är inbjuden!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favorit borttagen"; diff --git a/DuckDuckGo/tr.lproj/Bookmarks.strings b/DuckDuckGo/tr.lproj/Bookmarks.strings index 98170bd993..8e92180905 100644 --- a/DuckDuckGo/tr.lproj/Bookmarks.strings +++ b/DuckDuckGo/tr.lproj/Bookmarks.strings @@ -11,7 +11,7 @@ "cV4-pj-JNb.text" = "Label"; /* Class = "UILabel"; text = "Delete"; ObjectID = "hEJ-T8-Tdl"; */ -"hEJ-T8-Tdl.text" = "Delete"; +"hEJ-T8-Tdl.text" = "Sil"; /* Class = "UILabel"; text = "No matches found"; ObjectID = "hqG-b3-Fq3"; */ "hqG-b3-Fq3.text" = "Eşleşme bulunamadı"; diff --git a/DuckDuckGo/tr.lproj/Localizable.strings b/DuckDuckGo/tr.lproj/Localizable.strings index e271dc0cd5..cbc3576827 100644 --- a/DuckDuckGo/tr.lproj/Localizable.strings +++ b/DuckDuckGo/tr.lproj/Localizable.strings @@ -38,7 +38,7 @@ "action.title.copy.message" = "URL kopyalandı"; /* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; +"action.title.delete" = "Sil"; /* Disable protection action */ "action.title.disable.protection" = "Gizlilik Korumasını Devre Dışı Bırak"; @@ -119,7 +119,7 @@ "addWidget.description" = "Özel aramaya ve sevdiğiniz sitelere hızlı erişim elde edin."; /* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; +"addWidget.settings.firstParagraph" = "Sallama moduna girmek için ana ekranda uzun basın."; /* Replacement string is a plus button icon. */ "addWidget.settings.secondParagraph.%@" = "Artı %@ düğmesine dokunun."; @@ -200,7 +200,7 @@ "alert.unable-to-delete-data-description" = "Sunucudaki veriler silinemiyor."; /* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; +"alert.unable-to-merge-two-accounts-description" = "Bu cihazları eşleştirmek için bir cihazda Senkronizasyon ve Yedeklemeyi kapattıktan sonra diğer cihazda \"Başka bir Cihazla Senkronizasyon\" ögesine dokunun."; /* Description for unable to remove device error */ "alert.unable-to-remove-device-description" = "Bu cihaz Senkronizasyon ve Yedekleme'den kaldırılamıyor."; @@ -629,7 +629,7 @@ "bookmark.delete.alert.message" = "Bu, \"%@\" için yer işaretinizi silecektir"; /* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; +"bookmark.delete.alert.title" = "Silinsin mi?"; /* The message shown after a bookmark has been deleted */ "bookmark.deleted.toast" = "Yer işareti silindi"; @@ -791,7 +791,7 @@ "crash.report.dialog.always.send" = "Kilitlenme Raporlarını Her Zaman Gönder"; /* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; +"crash.report.dialog.hide.details" = "Gizle"; /* Crash Report dialog message */ "crash.report.dialog.message" = "Kilitlenme raporları DuckDuckGo'nun sorunları teşhis etmesine ve ürünlerimizi geliştirmesine yardımcı olur. Kişisel olarak tanımlanabilir hiçbir bilgi içermezler."; @@ -890,7 +890,7 @@ "dax.onboarding.message" = "İnternet bazen ürkütücü olabilir.\n\nEndişelenmeyin! İnternette kimsenin göremeyeceği şekilde arama yapmak ve gezinmek sandığınızdan çok daha kolay."; /* No comment provided by engineer. */ -"Debug" = "Debug"; +"Debug" = "Hata Ayıklama"; /* Default string used if users device is not iPhone or iPad */ "device.type.default" = "cihaz"; @@ -916,18 +916,21 @@ /* Alert action for starting a file dowload */ "downloads.alert.action.save-to-downloads" = "İndirilenlere Kaydet"; -/* Cancel download action for alert when trying to cancel the file download */ +/* Cancel download action for downloads */ "downloads.cancel-download.alert.cancel" = "İptal"; /* Message for alert when trying to cancel the file download */ "downloads.cancel-download.alert.message" = "Bu indirmeyi iptal etmek istediğinizden emin misiniz?"; -/* Resume download action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.resume" = "Devam et"; +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "Hayır"; /* Title for alert when trying to cancel the file download */ "downloads.cancel-download.alert.title" = "İndirme iptal edilsin mi?"; +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Evet"; + /* Button for deleting all items on downloads list */ "downloads.downloads-list.delete-all" = "Tümünü Sil"; @@ -967,6 +970,39 @@ /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "iOS için DuckDuckGo"; +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Her zaman"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Her seferinde sor"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Hiçbir zaman"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player, DuckDuckGo'da sinema benzeri bir deneyimde hedefli reklamlar olmadan YouTube'u izlemenizi sağlar ve izlediğiniz şeyler önerilerinizi etkilemez."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Anladım!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "YouTube'da reklama mı boğuluyorsunuz? Duck Player'ı deneyin!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo, web'de gezinirken kendinizi korumak için ihtiyacınız olan tüm Privacy Essentials özelliklerini sağlar."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player, kişiselleştirilmiş reklamlar olmadan temiz bir görüntüleme deneyimi sağlar ve görüntüleme etkinliğinin YouTube önerilerinizi etkilemesini önler."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Daha Fazla Bilgi"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Videoları Duck Player'da Aç"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + /* Email protection service offered by DuckDuckGo */ "email-protection" = "E-posta Koruması"; @@ -1033,6 +1069,9 @@ /* Title for prompt to sign up for email protection */ "email.signup-prompt.title" = "E-postanızı Gizleyin ve \n İzleyicileri Engelleyin"; +/* No comment provided by engineer. */ +"empty!" = "empty!"; + /* Empty list state placholder */ "empty.bookmarks" = "Henüz yer imi eklenmedi"; @@ -1067,7 +1106,7 @@ "error.preemptive-crash.title" = "Uygulama sorunu tespit edildi"; /* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; +"error.unknown.try.again" = "Bilinmeyen bir hata oluştu"; /* No comment provided by engineer. */ "favorite" = "Favori"; @@ -1078,6 +1117,9 @@ /* No comment provided by engineer. */ "favorite.menu.remove" = "Kaldır"; +/* No comment provided by engineer. */ +"Favorites" = "Favoriler"; + /* Display Mode for favorites */ "favorites.settings.all-devices" = "Tüm Cihaz Sık Kullanılanları"; @@ -1090,6 +1132,9 @@ /* Display Mode for favorites */ "favorites.settings.mobile-only" = "Yalnızca Mobil Favoriler"; +/* No comment provided by engineer. */ +"Feature flag enabled" = "Feature flag enabled"; + /* No comment provided by engineer. */ "feedback.browserFeatures.ads" = "Reklam ve pop-up engelleme"; @@ -1300,9 +1345,6 @@ /* Title for the get desktop browser feature */ "get.browser.title" = "Mac veya Windows için DuckDuckGo'yu edinin"; -/* No comment provided by engineer. */ -"Help us improve!" = "Help us improve!"; - /* No comment provided by engineer. */ "home.row.onboarding.header" = "DuckDuckGo'yu ana ekranınıza ekleyin!"; @@ -1318,6 +1360,9 @@ /* Home tab title */ "homeTab.title" = "Ana Sayfa"; +/* No comment provided by engineer. */ +"ID: %@ | %@ | %@" = "ID: %1$@ | %2$@ | %3$@"; + /* OK title for invite screen alert dismissal button */ "invite.alert.ok.button" = "OK"; @@ -1393,6 +1438,9 @@ /* Please preserve newline character */ "launchscreenWelcomeMessage" = "DuckDuckGo'ya\nHoş Geldiniz!"; +/* No comment provided by engineer. */ +"Local setting enabled" = "Local setting enabled"; + /* No comment provided by engineer. */ "LOREM IPSUM" = "LOREM IPSUM"; @@ -1459,96 +1507,6 @@ /* Title for the DuckDuckGo VPN feature */ "netP.title" = "DuckDuckGo VPN"; -/* Privacy Policy title for Network Protection */ -"network-protection.privacy-policy.title" = "Gizlilik Politikası"; - -/* Title text for the Network Protection terms and conditions accept button */ -"network-protection.waitlist.agree-and-continue" = "Kabul Et ve Devam Et"; - -/* Availability disclaimer for Network Protection join waitlist screen */ -"network-protection.waitlist.availability-disclaimer" = "DuckDuckGo VPN, erken erişim sırasında ücretsiz olarak kullanılabilir."; - -/* Agree and Continue button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.agree-and-continue" = "Kabul Et ve Devam Et"; - -/* Enable Notifications button for Network Protection joined waitlist screen */ -"network-protection.waitlist.button.enable-notifications" = "Bildirimleri Etkinleştir"; - -/* Button title for users who already have an invite code */ -"network-protection.waitlist.button.existing-invite-code" = "Davet Kodum var"; - -/* Join Waitlist button for Network Protection join waitlist screen */ -"network-protection.waitlist.button.join-waitlist" = "Bekleme Listesine Katıl"; - -/* Button title text for the Network Protection waitlist confirmation prompt */ -"network-protection.waitlist.get-started" = "Başlayın"; - -/* Subtitle for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.subtitle" = "Tarayıcılarınız ve uygulamalarınız arasındaki çevrimiçi trafiği şifreleyin."; - -/* Title for section 1 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-1.title" = "Tam cihaz kapsamı"; - -/* Subtitle for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.subtitle" = "Ayrı bir uygulamaya gerek yok. Tek tıklamayla bağlanın ve bağlantı durumunuzu bir bakışta görün."; - -/* Title for section 2 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-2.title" = "Hızlı, güvenilir ve kullanımı kolay"; - -/* Subtitle for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.subtitle" = "Sizi çevrimiçi etkinliğinizle ilişkilendirebilecek hiçbir veriyi izlemiyor ve kaydetmiyoruz."; - -/* Title for section 3 of the Network Protection invited screen */ -"network-protection.waitlist.invited.section-3.title" = "Veri kaydetmeye ilişkin katı politika"; - -/* Subtitle for Network Protection invited screen */ -"network-protection.waitlist.invited.subtitle" = "Hız ve basitlik için tasarlanmış VPN ile internette ekstra bir koruma katmanı edinin. İnternet bağlantınızı cihazınız genelinde şifreleyerek konumunuzu ve IP adresinizi ziyaret ettiğiniz sitelerden gizleyin."; - -/* Title for Network Protection invited screen */ -"network-protection.waitlist.invited.title" = "DuckDuckGo VPN erken erişimini denemeye davetlisiniz!"; - -/* First subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.1" = "DuckDuckGo'nun sunduğu VPN hizmeti Ağ Koruması ile bağlantınızı her zaman, her yerde güvence altına alın."; - -/* Second subtitle for Network Protection join waitlist screen */ -"network-protection.waitlist.join.subtitle.2" = "Bekleme listesine katılın. Sıra size geldiğinde sizi bilgilendireceğiz."; - -/* Title for Network Protection join waitlist screen */ -"network-protection.waitlist.join.title" = "VPN Erken Erişim"; - -/* Title for Network Protection joined waitlist screen */ -"network-protection.waitlist.joined.title" = "Listedesiniz!"; - -/* Subtitle 1 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.1" = "Yeni davetiyeler birkaç günde bir, ilk gelen alır esasına göre gönderilir."; - -/* Subtitle 2 for Network Protection joined waitlist screen when notifications are enabled */ -"network-protection.waitlist.joined.with-notifications.subtitle.2" = "Davetiyeniz hazır olduğunda sizi bilgilendireceğiz."; - -/* Body text for the alert to enable notifications */ -"network-protection.waitlist.notification-alert.description" = "DuckDuckGo VPN deneme davetiniz hazır olduğunda size bildirim göndereceğiz."; - -/* Subtitle for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-description" = "Ağ Koruması için erken erişiminiz hazır olduğunda bildirim alın."; - -/* Title for the alert to confirm enabling notifications */ -"network-protection.waitlist.notification-prompt-title" = "Davet edildiğiniz anda haberdar olun"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.text" = "Davetiyenizi açın"; - -/* Title for Network Protection waitlist notification */ -"network-protection.waitlist.notification.title" = "DuckDuckGo VPN hazır!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-and-invited" = "Davetiyeniz hazır!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.joined-but-not-invited" = "Listedesiniz!"; - -/* Subtitle text for the Network Protection settings row */ -"network-protection.waitlist.settings-subtitle.waitlist-not-joined" = "Özel Bekleme Listesine Katılın"; - /* The body of the notification when Privacy Pro subscription expired */ "network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; @@ -1612,6 +1570,9 @@ /* Connection details label shown in NetworkProtection's status view. */ "network.protection.status.view.connection.details" = "Connection Details"; +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + /* Generic connection failed error message shown in NetworkProtection's status view. */ "network.protection.status.view.error.connection.failed.message" = "Please try again later."; @@ -1645,11 +1606,14 @@ /* Title of the About section in the VPN status screen */ "network.protection.vpn.about" = "Hakkında"; +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + /* 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ı"; +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; /* Title for the data volume section in the VPN status screen */ "network.protection.vpn.data-volume" = "Veri Hacmi"; @@ -1657,6 +1621,9 @@ /* Footer text for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.footer" = "Yerel trafiğin VPN'i atlamasını ve yerel ağınızdaki yazıcı gibi cihazlara bağlanmasını sağlayın."; +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + /* Title for the Exclude Local Networks setting item. */ "network.protection.vpn.exclude.local.networks.setting.title" = "Yerel Ağları Hariç Tut"; @@ -1696,11 +1663,11 @@ /* 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" = "VPN'imiz çevrim içi etkinliğinizi gizli tutmak için Güvenli DNS kullanır. Böylece internet sağlayıcınız hangi web sitelerini ziyaret ettiğinizi göremez."; +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; /* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "Sıkça Sorulan Sorular"; +"network.protection.vpn.settings.faq" = "FAQs and Support"; /* Title for the feedback row in the VPN status screen. */ "network.protection.vpn.settings.share-feedback" = "VPN Geri Bildirimini Paylaş"; @@ -1815,13 +1782,13 @@ "open.externally.failed" = "Bu bağlantıyı açmak için gereken uygulama bulunamıyor"; /* Activate button */ -"pm.activate" = "Reactivate"; +"pm.activate" = "Yeniden etkinleştir"; /* Cancel button */ -"pm.cancel" = "Cancel"; +"pm.cancel" = "İptal"; /* Deactivate button */ -"pm.deactivate" = "Deactivate"; +"pm.deactivate" = "Devre dışı bırak"; /* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ "prefrences.sync.bookmarks-limit-exceeded-action" = "Yer İmlerini Yönet"; @@ -1903,6 +1870,9 @@ /* Alert title */ "prompt.custom.url.scheme.title" = "Başka Bir Uygulamada Açılsın mı?"; +/* No comment provided by engineer. */ +"Requires internal user" = "Requires internal user"; + /* No comment provided by engineer. */ "search.hint.duckduckgo" = "Adres ara veya gir"; @@ -1938,7 +1908,7 @@ "settings.address.full.url" = "Tam Site Adresini Göster"; /* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; +"settings.always.on" = "Her Zaman Açık"; /* Settings screen appearance section title */ "settings.appearance" = "Görünüm"; @@ -2056,14 +2026,17 @@ "settings.next.steps" = "Sonraki Adımlar"; /* Label describing a feature which is turned off */ -"settings.off" = "Off"; +"settings.off" = "Kapalı"; /* Label describing a feature which is turned on */ -"settings.on" = "On"; +"settings.on" = "Açık"; /* Product name for the subscription bundle */ "settings.ppro" = "Privacy Pro"; +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + /* Settings screen cell for long press previews */ "settings.previews" = "Uzun Basma Önizlemeleri"; @@ -2092,7 +2065,7 @@ "settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; /* Subscription activation pending title */ -"settings.subscription.activation.pending.title" = "Your Subscription is Being Activated"; +"settings.subscription.activation.pending.title" = "Aboneliğiniz etkinleştiriliyor"; /* Data Broker protection cell subtitle for privacy pro */ "settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; @@ -2101,16 +2074,16 @@ "settings.subscription.DBP.title" = "Personal Information Removal"; /* Privacy pro description subtext */ -"settings.subscription.description" = "More seamless privacy with three new protections, including:"; +"settings.subscription.description" = "Üç yeni koruma ile daha sorunsuz gizlilik:"; /* I have a Subscription button text for privacy pro */ "settings.subscription.existing.subscription" = "I Have a Subscription"; /* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; +"settings.subscription.expired.comment" = "Privacy Pro'yu kullanmaya devam etmek için tekrar abone olun"; /* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; +"settings.subscription.expired.title" = "Privacy Pro aboneliğiniz sona erdi"; /* Privacy pro features list */ "settings.subscription.features" = " • VPN\n • Personal Information Removal\n • Identity Theft Restoration"; @@ -2163,21 +2136,6 @@ /* Explanation in Settings how the web tracking protection feature works */ "settings.web.tracking.protection.explanation" = "DuckDuckGo, web'de gezinirken gizli izleyicileri otomatik olarak engeller.\n[Daha Fazla Bilgi](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; -/* Description on a report broken site page. */ -"site.not.working.description" = "Karşılaştığınız sorunu en iyi tanımlayan seçeneği seçin."; - -/* Dismiss button */ -"site.not.working.dismiss" = "Reddet"; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.subtitle" = "Bu gibi bildirimler tarayıcıyı geliştirmemize yardımcı olur."; - -/* Prompt asking user to send report to us if we suspect site may be broken */ -"site.not.working.title" = "Site çalışmıyor mu? DuckDuckGo'ya bildirin."; - -/* Button that triggers flow to report broken site */ -"site.not.working.website.is.broken" = "Web Sitesi Bozuk"; - /* Report a Broken Site screen confirmation button */ "siteFeedback.buttonText" = "Rapor Gönder"; @@ -2196,13 +2154,10 @@ /* No comment provided by engineer. */ "siteFeedback.urlPlaceholder" = "Hangi web sitesi hatalı?"; -/* Subscription Activation Window Title */ -"subscription.activate" = "Activate Subscription"; - /* Subscription Activation Info */ "subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; -/* Restore button title for Email */ +/* Button for adding email address to subscription */ "subscription.activate.add.email.button" = "Add Email"; /* Apple ID option for activation */ @@ -2217,6 +2172,12 @@ /* Subscription Activation Info */ "subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + /* Email option for activation */ "subscription.activate.email" = "Email"; @@ -2229,57 +2190,30 @@ /* Activate subscription title */ "subscription.activate.email.title" = "Aboneliği Etkinleştir"; -/* Restore button title for Managing Email */ -"subscription.activate.manage.email.button" = "Manage"; - /* Button title for cancelling email deletion */ "subscription.activate.manage.email.cancel" = "Cancel"; /* Button title for confirming email deletion */ "subscription.activate.manage.email.OK" = "OK"; -/* View Title for managing your email account */ -"subscription.activate.manage.email.title" = "Manage Email"; - /* Restore button title for AppleID */ "subscription.activate.restore.apple" = "Restore Purchase"; /* Subscription Activation Title */ "subscription.activate.title" = "Activate your subscription on this device"; -/* Add to another device button */ -"subscription.add.device.button" = "Add to Another Device"; - -/* Subscription Add device Info */ -"subscription.add.device.description" = "Privacy Pro aboneliğinize bir e-posta adresi aracılığıyla erişin."; - -/* Add subscription to other device title */ -"subscription.add.device.header.title" = "Aboneliğinizi diğer cihazlarda kullanın"; - /* Resend activation instructions button */ "subscription.add.device.resend.instructions" = "Resend Instructions"; -/* Add to another device view title */ -"subscription.add.device.title" = "Add Device"; - /* Add email to an existing subscription */ "subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; -/* Button title for adding email to subscription */ -"subscription.add.email.button" = "Add Email"; - /* View title for adding email to subscription */ "subscription.add.email.title" = "Add Email"; -/* Description for Email adding */ -"subscription.addDevice.email.description" = "Add an email address to access your subscription in DuckDuckGo on other devices. We’ll only use this address to verify your subscription."; - /* Title for Alert messages */ "subscription.alert.title" = "subscription.alert.title"; -/* Subscription type */ -"subscription.annual" = "Annual Subscription"; - /* Subscription availability message on Apple devices */ "subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; @@ -2289,11 +2223,17 @@ /* Title for the manage billing page */ "subscription.billing.google.title" = "Abonelik Planları"; +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + /* Subscription Removal confirmation message */ "subscription.cancel.message" = "Your subscription has been removed from this device."; -/* Change plan or billing title */ -"subscription.change.plan" = "Change Plan or Billing"; +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; /* Navigation Button for closing subscription view */ "subscription.close" = "Close"; @@ -2301,6 +2241,15 @@ /* Title for Confirm messages */ "subscription.confirm.title" = "Are you sure?"; +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription or use your Apple ID to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + /* Alert content for not found subscription */ "subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; @@ -2310,14 +2259,11 @@ /* Alert content for not found subscription */ "subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; -/* text for expiration string */ -"subscription.expires" = "expires"; - /* FAQ Button */ -"subscription.faq" = "Privacy Pro FAQ"; +"subscription.faq" = "FAQs and Support"; /* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions about Privacy Pro in our help pages."; +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; /* Cancel action for the existing subscription dialog */ "subscription.found.cancel" = "Cancel"; @@ -2334,21 +2280,12 @@ /* Help and support Section header */ "subscription.help" = "Help and support"; -/* Header for the device management section */ -"subscription.manage.devices" = "Manage Devices"; - -/* Description for Email Management options */ -"subscription.manage.email.description" = "You can use this email to activate your subscription from browser settings in the DuckDuckGo app on your other devices."; - /* Manage Plan header */ "subscription.manage.plan" = "Manage Plan"; /* Header for the subscription section */ "subscription.manage.title" = "Subscription"; -/* Subscription type */ -"subscription.monthly" = "Monthly Subscription"; - /* Alert content for not found subscription */ "subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; @@ -2371,7 +2308,7 @@ "subscription.pir.heroTextMenyEntry" = "I have a subscription"; /* Text for the 'macOS' button */ -"subscription.pir.macos" = "macOS"; +"subscription.pir.macos" = "Mac"; /* Text for the 'Windows' button */ "subscription.pir.windows" = "Windows"; @@ -2400,9 +2337,6 @@ /* Remove subscription cancel button text */ "subscription.remove.subscription.cancel" = "Cancel"; -/* text for renewal string */ -"subscription.renews" = "renews"; - /* Button text for general error message */ "subscription.restore.backend.error.button" = "Ayarlara Geri Dön"; @@ -2427,11 +2361,14 @@ /* Alert title for restored purchase */ "subscription.restore.success.alert.title" = "You’re all set."; -/* Subscription Expiration Data. This reads as 'Your subscription (renews or expires) on (date)' */ -"subscription.subscription.active.caption" = "Your subscription %1$@ on %2$@"; - /* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; +"subscription.subscription.expired.caption" = "Aboneliğinizin süresi %@ tarihinde doldu"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; /* Navigation bar Title for subscriptions */ "subscription.title" = "Privacy Pro"; @@ -2467,7 +2404,7 @@ "sync.turn.off.confirm.title" = "Senkronizasyon kapatılsın mı?"; /* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; +"sync.user.auth.reason" = "Sync & Backup kurulumu için cihazın kilidini açın"; /* Data syncing unavailable warning message */ "sync.warning.data.syncing.disabled" = "Üzgünüz, ancak Senkronizasyon ve Yedekleme şu anda kullanılamıyor. Lütfen daha sonra tekrar deneyin."; @@ -2490,9 +2427,6 @@ /* Tab Switcher Accessibility Label */ "tab.switcher.accessibility.label" = "Sekme Değiştirici"; -/* No comment provided by engineer. */ -"Take Survey" = "Take Survey"; - /* Description text for the text size adjustment setting */ "textSize.description" = "Tercih ettiğiniz metin boyutunu seçin. DuckDuckGo'da görüntülediğiniz web siteleri bu boyuta ayarlanır."; @@ -2517,6 +2451,9 @@ /* Light Theme entry */ "theme.name.light" = "Açık"; +/* No comment provided by engineer. */ +"This list contains messages that have been shown plus at most 1 message that is scheduled for showing. There may be more messages in the config that will be presented, but they haven't been processed yet." = "Bu liste, gösterilmiş mesajların yanı sıra gösterilmesi planlanan en fazla 1 mesajı içerir. Yapılandırmada sunulacak daha fazla mesaj olabilir, ancak bunlar henüz işlenmemiştir."; + /* Confirmation of an action - populated with a domain name */ "toast.protection.disabled" = "Gizlilik Koruması %@ için devre dışı"; @@ -2572,7 +2509,7 @@ "vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; /* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; +"vpn.addWidget.settings.title" = "DuckDuckGo'yu bulun ve seçin. Ardından VPN'e kaydırın ve Widget Ekle'yi seçin."; /* Title for the Cancel button of the VPN feedback form */ "vpn.feedback-form.button.cancel" = "Cancel"; @@ -2644,7 +2581,34 @@ "vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; /* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; +"vpn.settings.add.widget" = "VPN Widget'ını Ana Ekrana Ekleyin"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; /* Title for the button to enable push notifications in system settings */ "waitlist.allow-notifications" = "Bildirimlere İzin Ver"; @@ -2697,9 +2661,6 @@ /* Title for the share sheet entry */ "waitlist.share-sheet.title" = "Davetlisiniz!"; -/* No comment provided by engineer. */ -"We want to make using passwords in DuckDuckGo better." = "We want to make using passwords in DuckDuckGo better."; - /* Confirmation message */ "web.url.remove.favorite.done" = "Favori kaldırıldı"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/bg.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/bg.lproj/Localizable.strings index 8689e3bbd5..c2b5b711d3 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/bg.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/bg.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Не можете да сканирате?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Влезте в Настройки › Синхронизиране и архивиране в браузъра DuckDuckGo на друго устройство и изберете „Синхронизиране с друго устройство“."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Влезте в %@ в браузъра DuckDuckGo на друго устройство и изберете „Синхронизиране с друго устройство“."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ръчно въвеждане на код"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "От мобилно към мобилно устройство?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Споделяне на текстов код"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Сканиране на QR код"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Синхронизирани устройства"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Синхронизиране с друго устройство"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Това устройство"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/cs.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/cs.lproj/Localizable.strings index 64d03ab5bd..bdade69f51 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/cs.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/cs.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Nemůžeš skenovat?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Přejdi na jiném zařízení v prohlížeči DuckDuckGo do Nastavení › Synchronizace a zálohování a vyber možnost Synchronizace s jiným zařízením."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Přejdi na jiném zařízení v prohlížeči DuckDuckGo do %@ a vyber možnost Synchronizace s jiným zařízením."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ruční zadání kódu"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Z mobilu na mobil?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Sdílet textový kód?"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skenování QR kódu"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synchronizovaná zařízení"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synchronizovat s jiným zařízením"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Tohle zařízení"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/da.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/da.lproj/Localizable.strings index 232d52f4ea..e0ac0b08ab 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/da.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/da.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Kan du ikke scanne?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Gå til Indstillinger › Synkronisering og sikkerhedskopiering i DuckDuckGo-browseren på en anden enhed, og vælg \"Synkroniser med en anden enhed.\""; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Gå til %@ i DuckDuckGo-browseren på en anden enhed, og vælg \"Synkroniser med en anden enhed\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Indtast kode manuelt"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobil-til-mobil?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Del tekstkode"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Scan QR-kode"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synkroniserede enheder"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synkroniser med en anden enhed"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Denne enhed"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/de.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/de.lproj/Localizable.strings index f25d92b9d1..21be541220 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/de.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/de.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Du kannst nicht scannen?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Gehe im DuckDuckGo-Browser auf einem anderen Gerät zu Einstellungen › Synchronisieren und sichern und wähle „Mit anderem Gerät synchronisieren“."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Gehe im DuckDuckGo-Browser auf einem anderen Gerät zu %@ und wähle „Mit einem anderen Gerät synchronisieren“."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Code manuell eingeben"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Von Handy zu Handy?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Textcode teilen"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "QR-Code scannen"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synchronisierte Geräte"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Mit anderem Gerät synchronisieren"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Dieses Gerät"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/el.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/el.lproj/Localizable.strings index c9d8440c8d..021bca3463 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/el.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/el.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Δεν μπορείτε να πραγματοποιήσετε σάρωση;"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Μεταβείτε στην ενότητα Ρυθμίσεις › Συγχρονισμός και δημιουργία αντιγράφων ασφάλειας στο πρόγραμμα περιήγησης DuckDuckGo σε άλλη συσκευή και επιλέξτε «Συγχρονισμός με άλλη συσκευή»."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Μεταβείτε στη %@ στο πρόγραμμα περιήγησης DuckDuckGo σε μια άλλη συσκευή και επιλέξτε «Συγχρονισμός με άλλη συσκευή»."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Μη αυτόματη εισαγωγή κωδικού"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Από κινητό σε κινητό;"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Κοινοποίηση κωδικού κειμένου"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Σάρωση κώδικα QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Συγχρονισμένες συσκευές"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Συγχρονισμός με άλλη συσκευή"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Αυτή η συσκευή"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/es.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/es.lproj/Localizable.strings index c427c7aa25..8262a22263 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/es.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/es.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "¿No puedes escanear?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Ve a Ajustes › Sincronización y copia de seguridad en el navegador DuckDuckGo en otro dispositivo y selecciona «Sincronizar con otro dispositivo»."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Ve a %@ en el navegador DuckDuckGo en otro dispositivo y selecciona «Sincronizar con otro dispositivo»."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Introducir código manualmente"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "¿De móvil a móvil?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Compartir código de texto"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Escanear código QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Dispositivos sincronizados"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sincronizar con otro dispositivo"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Este dispositivo"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/et.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/et.lproj/Localizable.strings index 36381edb54..1f4a026eb2 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/et.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/et.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Kas sa ei saa skannida?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Ava teises seadmes DuckDuckGo brauseris Seaded > Sünkroonimine ja varundus ning vali käsk „Sünkrooni teise seadmega“."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Ava teises seadmes DuckDuckGo brauseris %@. Vali käsk Sünkrooni teise seadmega."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Sisesta kood käsitsi"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobiililt mobiilile?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Jaga tekstikoodi"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "QR-koodi skannimine"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Sünkroonitud seadmed"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sünkrooni teise seadmega"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "See seade"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/fi.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/fi.lproj/Localizable.strings index a6d8238d61..ba3ef03cc0 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/fi.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/fi.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Etkö voi skannata?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Siirry kohtaan Asetukset › Synkronointi ja varmuuskopiointi DuckDuckGo-selaimessa muulla laitteella ja valitse ”Synkronoi toisen laitteen kanssa.”"; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Siirry kohtaan %@ DuckDuckGo-selaimessa muulla laitteella ja valitse ”Synkronoi toisen laitteen kanssa.”"; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Syötä koodi manuaalisesti"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobile-to-Mobile?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Jaa tekstikoodi"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skannaa QR-koodi"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synkronoidut laitteet"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synkronoi toisen laitteen kanssa"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Tämä laite"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/fr.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/fr.lproj/Localizable.strings index f676aede48..79f674851f 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/fr.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/fr.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Vous ne parvenez pas à scanner ?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Accédez à Réglages › Synchronisation et sauvegarde dans le navigateur DuckDuckGo d'un autre appareil, puis sélectionnez « Synchroniser avec un autre appareil »."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Accédez à %@ dans le navigateur DuckDuckGo d'un autre appareil, puis sélectionnez « Synchroniser avec un autre appareil »."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Saisir manuellement le code"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "De mobile à mobile ?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Partager le code texte"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Scanner le code QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Appareils synchronisés"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synchroniser avec un autre appareil"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Cet appareil"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/hr.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/hr.lproj/Localizable.strings index cb5d548d6f..f9c6c1900c 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/hr.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/hr.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Ne možeš skenirati?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Idi na Postavke › Sinkronizacija i sigurnosno kopiranje u pregledniku DuckDuckGo na drugom uređaju i odaberite \"Sinkroniziraj s drugim uređajem\"."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Idi na %@ u pregledniku DuckDuckGo na drugom uređaju i odaberite ”Sinkroniziraj s drugim uređajem”."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ručno unesi šifru"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "S mobilnog uređaja na mobilni uređaj?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Dijeli tekstnu šifru"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skeniraj QR kôd"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Sinkronizirani uređaji"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sinkronizacija s drugim uređajem"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Ovaj uređaj"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/hu.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/hu.lproj/Localizable.strings index f7ae0d1eae..b82cd2d231 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/hu.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/hu.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Nem lehet beolvasni?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Lépj a másik eszköz DuckDuckGo böngészőjében található Beállítások > Szinkronizálás és biztonsági mentés lehetőségre, és válaszd ki a „Szinkronizálás másik eszközzel” elemet."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Lépj a másik eszköz DuckDuckGo böngészőjében található %@ lehetőségre, és válaszd ki a „Szinkronizálás és biztonsági mentés” elemet."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Kód manuális megadása"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobilról mobilra?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Szöveges kód megosztása"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "QR-kód beolvasása"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Szinkronizált eszközök"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Szinkronizálás másik eszközzel"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Ez az eszköz"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/it.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/it.lproj/Localizable.strings index cc438206a2..65f898d6c2 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/it.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/it.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Non riesci a eseguire la scansione?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Vai su Impostazioni › Sincronizzazione e backup nel browser DuckDuckGo presente su un altro dispositivo e seleziona \"Sincronizza con un altro dispositivo\"."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Apri %@ nel browser DuckDuckGo di un altro dispositivo e seleziona \"Sincronizza con un altro dispositivo\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Inserisci manualmente il codice"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Da mobile a mobile?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Condividi il codice di testo"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Scansiona il codice QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Dispositivi sincronizzati"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sincronizza con un altro dispositivo"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Questo dispositivo"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/lt.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/lt.lproj/Localizable.strings index a12cde3d6b..309eaf82f4 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/lt.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/lt.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Negalite nuskaityti?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Eikite į Nustatymai › Sinchronizavimas ir atsarginės kopijos kūrimas „DuckDuckGo“ naršyklėje kitame įrenginyje ir pasirinkite „Sinchronizuoti su kitu įrenginiu“."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Eikite į %@ „DuckDuckGo“ naršyklėje kitame įrenginyje ir pasirinkite „Sinchronizuoti su kitu įrenginiu“."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Įveskite kodą ranka"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Iš mobiliojo įrenginio į mobilųjį įrenginį?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Bendrinti teksto kodą?"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Nuskaityti QR kodą"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Sinchronizuoti įrenginiai"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sinchronizuoti su kitu įrenginiu"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Šis įrenginys"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/lv.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/lv.lproj/Localizable.strings index 11cb0acaec..d3305cb767 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/lv.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/lv.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Nevari skenēt?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Dodies uz Iestatījumi › Sinhronizācija un dublēšana DuckDuckGo pārlūkprogrammā citā ierīcē un izvēlies \"Sinhronizēt ar citu ierīci\"."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Dodies uz %@ DuckDuckGo pārlūkā citā ierīcē un izvēlies \"Sinhronizēt ar citu ierīci.\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ievadīt kodu manuāli"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "No mobilā uz mobilo?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Kopīgot teksta kodu"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Kvadrātkoda skenēšana"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Sinhronizētās ierīces"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sinhronizēt ar citu ierīci"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Šī ierīce"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/nb.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/nb.lproj/Localizable.strings index 1b907b9c8f..21d3dc6a23 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/nb.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/nb.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Kan du ikke skanne?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Gå til Innstillinger › Synkroniser og sikkerhetskopier i DuckDuckGo-nettleseren på en annen enhet og velg «Synkroniser med en annen enhet»."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Gå til %@ i DuckDuckGo-nettleseren på en annen enhet og velg «Synkroniser med en annen enhet.»"; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Skriv inn koden manuelt"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobil til mobil?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Del tekstkode"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skann QR-kode"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synkroniserte enheter"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synkroniser med en annen enhet"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Denne enheten"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/nl.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/nl.lproj/Localizable.strings index 7504ec4590..fbf875345a 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/nl.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/nl.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Kun je niet scannen?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Ga naar 'Instellingen' › 'Synchronisatie en back-up' in de DuckDuckGo-browser op een ander apparaat en selecteer 'Synchroniseren met een ander apparaat'."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Ga naar %@ in de DuckDuckGo-browser op een ander apparaat en selecteer 'Synchroniseren met een ander apparaat'."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Code handmatig invoeren"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobiel-naar-mobiel?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Tekstcode delen?"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "QR-code scannen"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Gesynchroniseerde apparaten"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synchroniseren met een ander apparaat"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Dit apparaat"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/pl.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/pl.lproj/Localizable.strings index fd04e463e1..c8105c5aad 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/pl.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/pl.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Nie możesz skanować?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Wybierz kolejno Ustawienia › Synchronizacja i kopia zapasowa w przeglądarce DuckDuckGo na innym urządzeniu i wybierz opcję „Synchronizuj z innym urządzeniem”."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Przejdź do %@ w przeglądarce DuckDuckGo na innym urządzeniu i wybierz opcję „Synchronizuj z innym urządzeniem”."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Wprowadź kod ręcznie"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Z telefonu komórkowego na telefon komórkowy?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Udostępnij kod tekstowy"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Zeskanuj kod QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Zsynchronizowane urządzenia"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synchronizuj z innym urządzeniem"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "To urządzenie"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/pt.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/pt.lproj/Localizable.strings index 1a6dd65717..79b79666e7 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/pt.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/pt.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Não consegues ler?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Acede a Definições › Sincronização e cópia de segurança no navegador DuckDuckGo noutro dispositivo e seleciona \"Sincronizar com outro dispositivo\"."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Acede a %@ no navegador DuckDuckGo noutro dispositivo e seleciona \"Sincronizar com outro dispositivo\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Introduzir manualmente o código"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Entre dispositivos móveis?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Partilhar código de texto"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Ler código QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Dispositivos sincronizados"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sincronizar com outro dispositivo"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Este dispositivo"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/ro.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/ro.lproj/Localizable.strings index 830815bd7c..f45fb7a838 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/ro.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/ro.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Nu poți scana?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Accesează Setări > Sincronizare și backup din browserul DuckDuckGo de pe un alt dispozitiv și selectează „Sincronizează cu un alt dispozitiv”."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Accesează %@ în browserul DuckDuckGo pe un alt dispozitiv și selectează „Sincronizează cu un alt dispozitiv”."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Introdu manual codul"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "De la mobil la mobil?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Distribuie codul textului"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Scanează codul QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Dispozitive sincronizate"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sincronizează cu un alt dispozitiv"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Acest dispozitiv"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/ru.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/ru.lproj/Localizable.strings index 7b8afe27e6..454476ee51 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/ru.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/ru.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Нет возможности отсканировать код?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Откройте раздел «Настройки» > Синхронизация и резервное копирование» в браузере DuckDuckGo на другом устройстве и выберите опцию «Синхронизировать с другим устройством»."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Откройте раздел «%@» в браузере DuckDuckGo на другом устройстве и выберите вариант «Синхронизировать с другим устройством»."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ввести код вручную"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Мобильный с мобильным?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Поделиться текстовым кодом"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Сканирование QR-кода"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Синхронизированные устройства"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Синхронизировать с другим устройством"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Это устройство"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/sk.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/sk.lproj/Localizable.strings index 0da07e129a..3ea9edd4cb 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/sk.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/sk.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Nemôžete skenovať?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Prejdite do časti Nastavenia > Synchronizácia a zálohovanie v prehliadači DuckDuckGo v inom zariadení a vyberte možnosť „Synchronizovať s iným zariadením“."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Prejdite na %@ v prehliadači DuckDuckGo v inom zariadení a vyberte možnosť \"Synchronizovať s iným zariadením\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Manuálne zadajte kód"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Z mobilného telefónu na mobilný telefón?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Zdieľať textový kód"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skenovanie kódu QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synchronizované zariadenia"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synchronizácia s iným zariadením"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Toto zariadenie"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/sl.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/sl.lproj/Localizable.strings index cad7b3d0c9..57c2cb8101 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/sl.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/sl.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Skeniranje ni mogoče?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "V brskalniku DuckDuckGo v drugi napravi pojdite v Nastavitve › Sinhronizacija in varnostno kopiranje in izberite »Sinhroniziraj z drugo napravo«."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "V brskalniku DuckDuckGo v drugi napravi pojdite v %@ in izberite \"Sinhroniziraj z drugo napravo\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ročno vnesite kodo"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Sinhronizirate mobilni telefon z mobilnim telefonom?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Delite besedilno kodo"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skeniranje kode QR"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Sinhronizirane naprave"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Sinhronizacija z drugo napravo"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Ta naprava"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/sv.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/sv.lproj/Localizable.strings index 1746342b90..bc1c8e7bb2 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/sv.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/sv.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Kan du inte skanna?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Gå till Inställningar > Synkronisering och säkerhetskopiering i DuckDuckGo-webbläsaren på en annan enhet. Välj Synkronisera med en annan enhet."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Gå till %@ i DuckDuckGo-webbläsaren på en annan enhet och välj Synkronisera med en annan enhet\"."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Ange kod manuellt"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobil-till-mobil?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Dela textkod"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "Skanna QR-kod"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Synkroniserade enheter"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Synkronisera med en annan enhet"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Denna enhet"; diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Resources/tr.lproj/Localizable.strings b/LocalPackages/SyncUI/Sources/SyncUI/Resources/tr.lproj/Localizable.strings index b6e0981599..6793235555 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Resources/tr.lproj/Localizable.strings +++ b/LocalPackages/SyncUI/Sources/SyncUI/Resources/tr.lproj/Localizable.strings @@ -194,10 +194,10 @@ "scan.or.see.code.footer" = "Tarama yapamıyor musunuz?"; /* Scan or See Code View - Instruction */ -"scan.or.see.code.instruction" = "Go to Settings › Sync & Backup in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”"; +"scan.or.see.code.instruction" = "Başka bir cihazdaki DuckDuckGo Tarayıcısında Ayarlar › Senkronizasyon ve Yedekleme bölümüne gidin ve \"Başka Bir Cihazla Senkronize Et\" seçeneğini seçin."; /* Scan or See Code View - Instruction with syncMenuPath */ -"scan.or.see.code.instruction.attributed" = "Go to %@ in the DuckDuckGo Browser on another device and select ”Sync With Another Device.”."; +"scan.or.see.code.instruction.attributed" = "Başka bir cihazdaki DuckDuckGo Tarayıcısında %@ bölümüne gidin ve \"Başka Bir Cihazla Senkronize Et\" seçeneğini seçin."; /* Scan or See Code View - Manually Enter Code Link */ "scan.or.see.code.manually.enter.code.link" = "Kodu Manuel Olarak Yaz"; @@ -209,7 +209,7 @@ "scan.or.see.code.scan.code.instructions.title" = "Mobilden Mobile mi?"; /* Scan or See Code View - Share Code Link */ -"scan.or.see.code.share.code.link" = "Share Text Code"; +"scan.or.see.code.share.code.link" = "Metin Kodu Paylaşılsın mı?"; /* Scan or See Code View - Title */ "scan.or.see.code.title" = "QR Kodunu Tara"; @@ -254,7 +254,7 @@ "synced.devices.section.header" = "Senkronize Edilmiş Cihazlar"; /* Synced Devices - Sync with Another Device Label */ -"synced.devices.sync.with.another.device.label" = "Sync With Another Device"; +"synced.devices.sync.with.another.device.label" = "Başka Bir Cihazla Senkronize Et"; /* Synced Devices - This Device Label */ "synced.devices.this.device.label" = "Bu Cihaz"; diff --git a/Widgets/bg.lproj/Localizable.strings b/Widgets/bg.lproj/Localizable.strings index db0f40e562..9d9a8519cf 100644 --- a/Widgets/bg.lproj/Localizable.strings +++ b/Widgets/bg.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Търсене"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Преглеждайте и управлявайте своята VPN връзка. Изисква абонамент за Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Търси с DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Свързване"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Прекъсване на връзката"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN е включена"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN е изключена"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Няма връзка"; diff --git a/Widgets/cs.lproj/Localizable.strings b/Widgets/cs.lproj/Localizable.strings index 128520e2fc..74b8bd02b5 100644 --- a/Widgets/cs.lproj/Localizable.strings +++ b/Widgets/cs.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Hledat"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Zobrazení a správa připojení VPN. Vyžaduje předplatné Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Vyhledat prostřednictvím DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Připojit"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Odpojit"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN je zapnutá"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN je vypnutá"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nepřipojeno"; diff --git a/Widgets/da.lproj/Localizable.strings b/Widgets/da.lproj/Localizable.strings index 95017c162a..629616ba8a 100644 --- a/Widgets/da.lproj/Localizable.strings +++ b/Widgets/da.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "iOS 17 påkrævet"; /* No comment provided by engineer. */ "Label" = "Etiket"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Søg"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Se og administrer din VPN-forbindelse. Kræver Privacy Pro-abonnement."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Søg med DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Opret forbindelse"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Afbryd forbindelse"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN er slået til"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN er slået fra"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Ikke forbundet"; diff --git a/Widgets/de.lproj/Localizable.strings b/Widgets/de.lproj/Localizable.strings index dcd7e5b6dd..33de6c3a82 100644 --- a/Widgets/de.lproj/Localizable.strings +++ b/Widgets/de.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Suche"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Betrachte und verwalte deine VPN-Verbindung. Erfordert ein Privacy Pro Abonnement."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Mit DuckDuckGo suchen"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Verbinden"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Trennen"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN ist An"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN ist Aus"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nicht verbunden"; diff --git a/Widgets/el.lproj/Localizable.strings b/Widgets/el.lproj/Localizable.strings index 7b83237741..4d82898813 100644 --- a/Widgets/el.lproj/Localizable.strings +++ b/Widgets/el.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Αναζήτηση"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Προβολή και διαχείριση της σύνδεσής σας VPN. Απαιτείται συνδρομή στο Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Αναζήτηση DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Σύνδεση"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Αποσύνδεση"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "Το VPN είναι ενεργοποιημένο"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "Το VPN είναι απενεργοποιημένο"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Δεν έχει συνδεθεί"; diff --git a/Widgets/es.lproj/Localizable.strings b/Widgets/es.lproj/Localizable.strings index 7aea0909c5..305d0007c0 100644 --- a/Widgets/es.lproj/Localizable.strings +++ b/Widgets/es.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "Se necesita iOS 17"; /* No comment provided by engineer. */ "Label" = "Etiqueta"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Buscar"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Visualiza y gestiona tu conexión VPN. Requiere una suscripción a Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Buscar en DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Conectar"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Desconectar"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "La VPN está activada"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "La VPN está desactivada"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "No conectado"; diff --git a/Widgets/et.lproj/Localizable.strings b/Widgets/et.lproj/Localizable.strings index 5e8943a3fc..c87230ba66 100644 --- a/Widgets/et.lproj/Localizable.strings +++ b/Widgets/et.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Otsi"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Vaata ja halda oma VPN-ühendust. Nõuab Privacy Pro tellimust."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Otsi DuckDuckGo'st"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Ühenda"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Katkesta ühendus"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN on Sees"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN on Väljas"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Ei ole ühendatud"; diff --git a/Widgets/fi.lproj/Localizable.strings b/Widgets/fi.lproj/Localizable.strings index 4f6c5d8f69..6f78497eb2 100644 --- a/Widgets/fi.lproj/Localizable.strings +++ b/Widgets/fi.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "iOS 17 vaaditaan"; /* No comment provided by engineer. */ "Label" = "Label"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Etsi"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Tarkastele ja hallinnoi VPN-yhteyttäsi. Edellyttää Privacy Pro -tilauksen."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Hae DuckDuckGo:sta"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Yhdistä"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Katkaise yhteys"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN on päällä"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN on pois päältä"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Ei yhteyttä"; diff --git a/Widgets/fr.lproj/Localizable.strings b/Widgets/fr.lproj/Localizable.strings index 77c760d1ff..758fc32185 100644 --- a/Widgets/fr.lproj/Localizable.strings +++ b/Widgets/fr.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "iOS 17 est requis"; /* No comment provided by engineer. */ "Label" = "Label"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Rechercher"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Affichez et gérez votre connexion VPN. Nécessite un abonnement Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Rechercher avec DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Connecte"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Déconnecter"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "Le VPN est activé"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "Le VPN est désactivé"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Non connecté"; diff --git a/Widgets/hr.lproj/Localizable.strings b/Widgets/hr.lproj/Localizable.strings index 42832a9f00..9256aeb08c 100644 --- a/Widgets/hr.lproj/Localizable.strings +++ b/Widgets/hr.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Traži"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Provjeri i upravljaj svojom VPN vezom. Potrebna je pretplata na Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Pretraži DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Poveži se"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Prekini vezu"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN je uključen"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN je isključen"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nije povezano"; diff --git a/Widgets/hu.lproj/Localizable.strings b/Widgets/hu.lproj/Localizable.strings index bd3eac0b01..70325f9159 100644 --- a/Widgets/hu.lproj/Localizable.strings +++ b/Widgets/hu.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "iOS 17 szükséges"; /* No comment provided by engineer. */ "Label" = "Címke"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Keresés"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Tekintsd meg, és kezeld a VPN-kapcsolatod. Privacy Pro-előfizetés szükséges."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "DuckDuckGo keresés"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Csatlakozás"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Leválasztás"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN csatlakoztatva"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN kikapcsolva"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nincs csatlakoztatva"; diff --git a/Widgets/it.lproj/Localizable.strings b/Widgets/it.lproj/Localizable.strings index b062d5f3a8..d10e40bb4c 100644 --- a/Widgets/it.lproj/Localizable.strings +++ b/Widgets/it.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Ricerca"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Visualizza e gestisci la tua connessione VPN. Richiede un abbonamento a Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Cerca DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Connettiti"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Disconnettiti"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "La VPN è attiva"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "La VPN è disattivata"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Non collegata"; diff --git a/Widgets/lt.lproj/Localizable.strings b/Widgets/lt.lproj/Localizable.strings index 5dbcbabd17..63d921f75f 100644 --- a/Widgets/lt.lproj/Localizable.strings +++ b/Widgets/lt.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "Reikalinga „iOS 17“"; /* No comment provided by engineer. */ "Label" = "Etiketė"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Paieška"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Peržiūrėkite ir valdykite savo VPN ryšį. Reikalinga „Privacy Pro“ prenumerata."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Ieškoti DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Prijungti"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Atjungti"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN įjungtas"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN išjungtas"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Neprijungta"; diff --git a/Widgets/lv.lproj/Localizable.strings b/Widgets/lv.lproj/Localizable.strings index 865a3ef3e1..9ab34f39a0 100644 --- a/Widgets/lv.lproj/Localizable.strings +++ b/Widgets/lv.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "Nepieciešams iOS 17"; /* No comment provided by engineer. */ "Label" = "Etiķete"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Meklēt"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Skati un pārvaldi savu VPN savienojumu. Nepieciešams Privacy Pro abonements."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Meklēt DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Savienot"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Atvienot"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN ir ieslēgts"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN ir izslēgts"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nav savienots"; diff --git a/Widgets/nb.lproj/Localizable.strings b/Widgets/nb.lproj/Localizable.strings index 35c13fb043..cd0ca864d5 100644 --- a/Widgets/nb.lproj/Localizable.strings +++ b/Widgets/nb.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Søk"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Se og administrer VPN-tilkoblingen din. Krever et Privacy Pro-abonnement."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Søk i DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Koble til"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Koble fra"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN er på"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN er av"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Ikke tilkoblet"; diff --git a/Widgets/nl.lproj/Localizable.strings b/Widgets/nl.lproj/Localizable.strings index fd5d8a6696..f6ea7210c6 100644 --- a/Widgets/nl.lproj/Localizable.strings +++ b/Widgets/nl.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "iOS 17 vereist"; /* No comment provided by engineer. */ "Label" = "Label"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Zoeken"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Bekijk en beheer je VPN-verbinding. Vereist een Privacy Pro abonnement."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Zoek in DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Verbinden"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Verbinding verbreken"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN is ingeschakeld"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN is uitgeschakeld"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Niet verbonden"; diff --git a/Widgets/pl.lproj/Localizable.strings b/Widgets/pl.lproj/Localizable.strings index 8db989bd95..6be2d64e2e 100644 --- a/Widgets/pl.lproj/Localizable.strings +++ b/Widgets/pl.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Szukaj"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Przeglądaj połączenie VPN i nim zarządzaj. Wymaga subskrypcji Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Przeszukaj DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Połącz"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Odłącz"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "Włączono VPN"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "Wyłączono VPN"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nie połączono"; diff --git a/Widgets/pt.lproj/Localizable.strings b/Widgets/pt.lproj/Localizable.strings index d5ab7f3399..2d9e895eb8 100644 --- a/Widgets/pt.lproj/Localizable.strings +++ b/Widgets/pt.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Pesquisar"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Consulta e faz a gestão da tua ligação VPN. Requer uma subscrição Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Pesquisar no DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Ligar"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Desligar"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "A VPN está ativada"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "A VPN está desativada"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Não ligada"; diff --git a/Widgets/ro.lproj/Localizable.strings b/Widgets/ro.lproj/Localizable.strings index 19f95667c2..e268927bb4 100644 --- a/Widgets/ro.lproj/Localizable.strings +++ b/Widgets/ro.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Caută"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Vizualizează și gestionează conexiunea VPN. Necesită un abonament Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Căutare DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Conectează-te"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Deconectează-te"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN este activat"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN este dezactivat"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nu este conectat"; diff --git a/Widgets/ru.lproj/Localizable.strings b/Widgets/ru.lproj/Localizable.strings index e26bf632e3..98fd5367a7 100644 --- a/Widgets/ru.lproj/Localizable.strings +++ b/Widgets/ru.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Поиск"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Просмотр и управление подключением по VPN. Требуется подписка на тариф Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Поиск в DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Подключиться"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Отключиться"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN включен"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN отключен"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Не подключен"; diff --git a/Widgets/sk.lproj/Localizable.strings b/Widgets/sk.lproj/Localizable.strings index 3364e8e245..290b7e4c6a 100644 --- a/Widgets/sk.lproj/Localizable.strings +++ b/Widgets/sk.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "Vyžaduje sa iOS 17"; /* No comment provided by engineer. */ "Label" = "Označenie"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Vyhľadávať"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Zobrazenie a správa pripojenia VPN. Vyžaduje predplatné služby Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Vyhľadávajte cez DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Pripojiť"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Odpojenie"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN je zapnutá"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN je vypnutá"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Nie je pripojený"; diff --git a/Widgets/sl.lproj/Localizable.strings b/Widgets/sl.lproj/Localizable.strings index c5849a0715..16c5c4761c 100644 --- a/Widgets/sl.lproj/Localizable.strings +++ b/Widgets/sl.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "Zahtevan je iOS 17"; /* No comment provided by engineer. */ "Label" = "Oznaka"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Iskanje"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Ogled in upravljanje vaše povezave VPN. Potrebna je naročnina na storitev Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Iščite po DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Poveži"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Prekini"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN je vklopljen"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN je izklopljen"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Brez povezave"; diff --git a/Widgets/sv.lproj/Localizable.strings b/Widgets/sv.lproj/Localizable.strings index 820ebc437e..6ae579bc27 100644 --- a/Widgets/sv.lproj/Localizable.strings +++ b/Widgets/sv.lproj/Localizable.strings @@ -1,5 +1,5 @@ /* No comment provided by engineer. */ -"iOS 17 required" = "iOS 17 required"; +"iOS 17 required" = "iOS 17 krävs"; /* No comment provided by engineer. */ "Label" = "Etikett"; @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Sök"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "Visa och hantera din VPN-anslutning. Kräver en prenumeration på Privacy Pro."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "Sök med DuckDuckGo"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Anslut"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Koppla från"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN är på"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN är av"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Ej ansluten"; diff --git a/Widgets/tr.lproj/Localizable.strings b/Widgets/tr.lproj/Localizable.strings index 09573c75bb..e00756b552 100644 --- a/Widgets/tr.lproj/Localizable.strings +++ b/Widgets/tr.lproj/Localizable.strings @@ -59,7 +59,7 @@ "widget.gallery.search.display.name" = "Ara"; /* Description of VPN widget in widget gallery */ -"widget.gallery.vpn.description" = "View and manage your VPN connection. Requires a Privacy Pro subscription."; +"widget.gallery.vpn.description" = "VPN bağlantınızı görüntüleyin ve yönetin. Privacy Pro aboneliği gerektirir."; /* Display name for VPN widget in widget gallery */ "widget.gallery.vpn.display.name" = "VPN"; @@ -77,17 +77,17 @@ "widget.search.duckduckgo" = "DuckDuckGo'da Ara"; /* VPN connect button text */ -"widget.vpn.button.connect" = "Connect"; +"widget.vpn.button.connect" = "Bağlan"; /* VPN disconnect button text */ -"widget.vpn.button.disconnect" = "Disconnect"; +"widget.vpn.button.disconnect" = "Bağlantıyı Kes"; /* Message describing VPN connected status */ -"widget.vpn.status.connected" = "VPN is On"; +"widget.vpn.status.connected" = "VPN Açık"; /* Message describing VPN disconnected status */ -"widget.vpn.status.disconnected" = "VPN is Off"; +"widget.vpn.status.disconnected" = "VPN Kapalı"; /* Subtitle describing VPN disconnected status */ -"widget.vpn.subtitle.disconnected" = "Not connected"; +"widget.vpn.subtitle.disconnected" = "Bağlı değil"; From 5d6bb9e5f35603511a0b572a1113d44469dea24a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:47:55 +0200 Subject: [PATCH 12/17] Bump submodules/privacy-reference-tests from `a603ff9` to `afb4f61` (#3165) Bumps [submodules/privacy-reference-tests](https://github.com/duckduckgo/privacy-reference-tests) from `a603ff9` to `afb4f61`.
Commits

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- submodules/privacy-reference-tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/privacy-reference-tests b/submodules/privacy-reference-tests index a603ff9af2..afb4f6128a 160000 --- a/submodules/privacy-reference-tests +++ b/submodules/privacy-reference-tests @@ -1 +1 @@ -Subproject commit a603ff9af22ca3ff7ce2e7ffbfe18c447d9f23e8 +Subproject commit afb4f6128a3b50d53ddcb1897ea1fb4df6858aa1 From 8e9a6e047c5c499b34747b03d4e93911d32474ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:48:19 +0200 Subject: [PATCH 13/17] Bump rexml from 3.2.9 to 3.3.3 (#3175) Bumps [rexml](https://github.com/ruby/rexml) from 3.2.9 to 3.3.3.
Release notes

Sourced from rexml's releases.

REXML 3.3.3 - 2024-08-01

Improvements

  • Added support for detecting invalid XML that has unsupported content before root element

  • Added support for REXML::Security.entity_expansion_limit= and REXML::Security.entity_expansion_text_limit= in SAX2 and pull parsers

  • Added more tests for invalid XMLs.

  • Added more performance tests.

    • Patch by Watson.
  • Improved parse performance.

    • GH-186
    • Patch by tomoya ishida.

Thanks

  • NAITOH Jun

  • Watson

  • tomoya ishida

REXML 3.3.2 - 2024-07-16

Improvements

... (truncated)

Changelog

Sourced from rexml's changelog.

3.3.3 - 2024-08-01 {#version-3-3-3}

Improvements

  • Added support for detecting invalid XML that has unsupported content before root element

  • Added support for REXML::Security.entity_expansion_limit= and REXML::Security.entity_expansion_text_limit= in SAX2 and pull parsers

  • Added more tests for invalid XMLs.

  • Added more performance tests.

    • Patch by Watson.
  • Improved parse performance.

    • GH-186
    • Patch by tomoya ishida.

Thanks

  • NAITOH Jun

  • Watson

  • tomoya ishida

3.3.2 - 2024-07-16 {#version-3-3-2}

Improvements

... (truncated)

Commits
  • e4a067e Add 3.3.3 entry
  • 17ff3e7 test: add a performance test for attribute list declaration
  • be86b3d test: fix wrong test name
  • b93d790 test: use double quote for string literal
  • 0fbe7d5 test: don't use abbreviated name
  • 1599e87 test: add a performance test for PI with many tabs
  • e2546e6 parse pi: improve invalid case detection
  • 73661ef test: fix a typo
  • 850488a test: use double quote for string literal
  • 46c6397 test: add performance tests for entity declaration
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rexml&package-manager=bundler&previous-version=3.2.9&new-version=3.3.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/duckduckgo/iOS/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 267fb9118c..76fd4a9ef8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -171,7 +171,7 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.9) + rexml (3.3.3) strscan rouge (2.0.7) ruby2_keywords (0.0.5) @@ -197,13 +197,12 @@ GEM uber (0.1.0) unicode-display_width (2.5.0) word_wrap (1.0.0) - xcodeproj (1.24.0) + xcodeproj (1.19.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (~> 3.2.4) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) From 31b85395d71205a00660a2f07528c5c05924f6e4 Mon Sep 17 00:00:00 2001 From: Anh Do <18567+quanganhdo@users.noreply.github.com> Date: Fri, 9 Aug 2024 11:10:06 -0400 Subject: [PATCH 14/17] Fix PrivacyProDataReporter crash due to premature secure vault use (#3217) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task/Issue URL: https://app.asana.com/0/414709148257752/1207998804540584/f Tech Design URL: CC: **Description**: This updates the reporter to mimic `FireproofFaviconUpdater` behaviour, so that the secure vault is only initialized when used. **Steps to test this PR**: 1. Go to Debug > Subscription > Show randomized params 2. The count next to autofill should correspond to the number of saved passwords in your vault 3. If the count > 10, the associated bool should be true, and false otherwise **Definition of Done (Internal Only)**: * [ ] Does this PR satisfy our [Definition of Done](https://app.asana.com/0/1202500774821704/1207634633537039/f)? **Copy Testing**: * [ ] Use of correct apostrophes in new copy, ie `’` rather than `'` **Orientation Testing**: * [ ] Portrait * [ ] Landscape **Device Testing**: * [ ] iPhone SE (1st Gen) * [ ] iPhone 8 * [ ] iPhone X * [ ] iPhone 14 Pro * [ ] iPad **OS Testing**: * [ ] iOS 15 * [ ] iOS 16 * [ ] iOS 17 **Theme Testing**: * [ ] Light theme * [ ] Dark theme --- ###### Internal references: [Software Engineering Expectations](https://app.asana.com/0/59792373528535/199064865822552) [Technical Design Template](https://app.asana.com/0/59792373528535/184709971311943) --- .../PrivacyProDataReporting.swift | 22 +++++++++++++++---- .../PrivacyProDataReporterTests.swift | 14 ++++++++++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/DuckDuckGo/Subscription/PrivacyProDataReporting.swift b/DuckDuckGo/Subscription/PrivacyProDataReporting.swift index 710b4cf8e9..a873629777 100644 --- a/DuckDuckGo/Subscription/PrivacyProDataReporting.swift +++ b/DuckDuckGo/Subscription/PrivacyProDataReporting.swift @@ -105,11 +105,15 @@ final class PrivacyProDataReporter: PrivacyProDataReporting { private let tutorialSettings: TutorialSettings private let appSettings: AppSettings private let statisticsStore: StatisticsStore - private let secureVault: (any AutofillSecureVault)? + private let featureFlagger: FeatureFlagger + private let autofillCheck: () -> Bool + private let secureVaultMaker: () -> (any AutofillSecureVault)? private var syncService: DDGSyncing? private var tabsModel: TabsModel? private let dateGenerator: () -> Date + private var secureVault: (any AutofillSecureVault)? + init(configurationManager: PrivacyConfigurationManaging = ContentBlocking.shared.privacyConfigurationManager, variantManager: VariantManager = DefaultVariantManager(), userDefaults: UserDefaults = .app, @@ -117,7 +121,9 @@ final class PrivacyProDataReporter: PrivacyProDataReporting { tutorialSettings: TutorialSettings = DefaultTutorialSettings(), appSettings: AppSettings = AppDependencyProvider.shared.appSettings, statisticsStore: StatisticsStore = StatisticsUserDefaults(), - secureVault: (any AutofillSecureVault)? = try? AutofillSecureVaultFactory.makeVault(reporter: SecureVaultReporter()), + featureFlagger: FeatureFlagger = AppDependencyProvider.shared.featureFlagger, + autofillCheck: @escaping () -> Bool = { AutofillSettingStatus.isAutofillEnabledInSettings }, + secureVaultMaker: @escaping () -> (any AutofillSecureVault)? = { try? AutofillSecureVaultFactory.makeVault(reporter: SecureVaultReporter()) }, syncService: DDGSyncing? = nil, tabsModel: TabsModel? = nil, dateGenerator: @escaping () -> Date = Date.init) { @@ -128,7 +134,9 @@ final class PrivacyProDataReporter: PrivacyProDataReporting { self.tutorialSettings = tutorialSettings self.appSettings = appSettings self.statisticsStore = statisticsStore - self.secureVault = secureVault + self.featureFlagger = featureFlagger + self.autofillCheck = autofillCheck + self.secureVaultMaker = secureVaultMaker self.syncService = syncService self.tabsModel = tabsModel self.dateGenerator = dateGenerator @@ -297,7 +305,13 @@ final class PrivacyProDataReporter: PrivacyProDataReporting { } var _accountsCount: Int { - (try? secureVault?.accountsCount()) ?? 0 + if featureFlagger.isFeatureOn(.autofillCredentialInjecting) && autofillCheck() { + if secureVault == nil { + secureVault = secureVaultMaker() + } + return (try? secureVault?.accountsCount()) ?? 0 + } + return 0 } var _tabsCount: Int { diff --git a/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift b/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift index 845d68fe1a..e9458fe215 100644 --- a/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift +++ b/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift @@ -69,7 +69,9 @@ final class PrivacyProDataReporterTests: XCTestCase { tutorialSettings: MockTutorialSettings(hasSeenOnboarding: false), appSettings: AppSettingsMock(), statisticsStore: statisticsStore, - secureVault: nil, + featureFlagger: MockFeatureFlagger(), + autofillCheck: { true }, + secureVaultMaker: { nil }, tabsModel: TabsModel(tabs: [], desktop: false), dateGenerator: mockCalendar.now ) @@ -80,7 +82,9 @@ final class PrivacyProDataReporterTests: XCTestCase { emailManager: EmailManager(storage: MockEmailStorage.anotherMock), tutorialSettings: MockTutorialSettings(hasSeenOnboarding: true), appSettings: AppSettingsMock.mockWithWidget, - secureVault: nil, + featureFlagger: MockFeatureFlagger(), + autofillCheck: { true }, + secureVaultMaker: { nil }, tabsModel: TabsModel(tabs: [Tab(), Tab(), Tab(), Tab()], desktop: false) ) } @@ -221,3 +225,9 @@ class MockCalendar { date } } + +struct MockFeatureFlagger: FeatureFlagger { + func isFeatureOn(forProvider: F) -> Bool where F: FeatureFlagSourceProviding { + false + } +} From a43aec98cff03746dd339fbdfbcab2c71d571b1d Mon Sep 17 00:00:00 2001 From: Fernando Bunn Date: Fri, 9 Aug 2024 17:49:58 +0100 Subject: [PATCH 15/17] Add translations for DuckPlayer contingency messge (#3215) Task/Issue URL: https://app.asana.com/0/72649045549333/1207991865387511/f **Description**: Add translations for DuckPlayer contingency messge --- DuckDuckGo/bg.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/cs.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/da.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/de.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/el.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/es.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/et.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/fi.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/fr.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/hr.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/hu.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/it.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/lt.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/lv.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/nb.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/nl.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/pl.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/pt.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/ro.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/ru.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/sk.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/sl.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/sv.lproj/Localizable.strings | 9 +++++++++ DuckDuckGo/tr.lproj/Localizable.strings | 9 +++++++++ 24 files changed, 216 insertions(+) diff --git a/DuckDuckGo/bg.lproj/Localizable.strings b/DuckDuckGo/bg.lproj/Localizable.strings index 05dbca5feb..fe738ad1f6 100644 --- a/DuckDuckGo/bg.lproj/Localizable.strings +++ b/DuckDuckGo/bg.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player не е достъпен"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Научете повече"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Функционалността на Duck Player е засегната от последните промени в YouTube. Работим за отстраняване на тези проблеми и оценяваме вашето разбиране."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo за iOS"; diff --git a/DuckDuckGo/cs.lproj/Localizable.strings b/DuckDuckGo/cs.lproj/Localizable.strings index fdbd90e9b8..0d4f68578a 100644 --- a/DuckDuckGo/cs.lproj/Localizable.strings +++ b/DuckDuckGo/cs.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player není dostupný"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Více informací"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Funkčnost přehrávače Duck Player ovlivnily nedávné změny na YouTube. Problémy se snažíme opravit. Děkujeme za pochopení."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pro iOS"; diff --git a/DuckDuckGo/da.lproj/Localizable.strings b/DuckDuckGo/da.lproj/Localizable.strings index 9ac9c37bde..62a5417475 100644 --- a/DuckDuckGo/da.lproj/Localizable.strings +++ b/DuckDuckGo/da.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player ikke tilgængelig"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Mere info"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Duck Players funktionalitet er påvirket af de seneste ændringer på YouTube. Vi arbejder på at løse disse problemer og sætter pris på din forståelse."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo til iOS"; diff --git a/DuckDuckGo/de.lproj/Localizable.strings b/DuckDuckGo/de.lproj/Localizable.strings index a794fbf17a..76a99b3dcd 100644 --- a/DuckDuckGo/de.lproj/Localizable.strings +++ b/DuckDuckGo/de.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player nicht verfügbar"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Mehr erfahren"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Die Funktionalität des Duck Players wird durch die jüngsten Änderungen bei YouTube beeinträchtigt. Vielen Dank für dein Verständnis, während wir daran arbeiten, diese Probleme zu beheben."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo für iOS"; diff --git a/DuckDuckGo/el.lproj/Localizable.strings b/DuckDuckGo/el.lproj/Localizable.strings index 388faafba8..71d7f1ce6b 100644 --- a/DuckDuckGo/el.lproj/Localizable.strings +++ b/DuckDuckGo/el.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Το Duck Player δεν είναι διαθέσιμο"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Μάθετε περισσότερα"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Η λειτουργία του Duck Player έχει επηρεαστεί από τις πρόσφατες αλλαγές στο YouTube. Προσπαθούμε να διορθώσουμε αυτά τα προβλήματα και εκτιμούμε την κατανόησή σας."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo για iOS"; diff --git a/DuckDuckGo/es.lproj/Localizable.strings b/DuckDuckGo/es.lproj/Localizable.strings index 6b207a8715..55c69e38c1 100644 --- a/DuckDuckGo/es.lproj/Localizable.strings +++ b/DuckDuckGo/es.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player no disponible"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Más información"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "La funcionalidad de Duck Player se ha visto afectada por los cambios recientes en YouTube. Estamos trabajando para solucionar estos problemas y agradecemos tu comprensión."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo para iOS"; diff --git a/DuckDuckGo/et.lproj/Localizable.strings b/DuckDuckGo/et.lproj/Localizable.strings index 4db9e6ef93..dead61a271 100644 --- a/DuckDuckGo/et.lproj/Localizable.strings +++ b/DuckDuckGo/et.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player ei ole saadaval"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Loe edasi"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Duck Playeri funktsionaalsust on mõjutanud hiljutised YouTube'i muudatused. Töötame nende probleemide lahendamise nimel ja täname sind mõistva suhtumise eest."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo iOS-ile"; diff --git a/DuckDuckGo/fi.lproj/Localizable.strings b/DuckDuckGo/fi.lproj/Localizable.strings index 56fd5e6408..d4b02ffa9a 100644 --- a/DuckDuckGo/fi.lproj/Localizable.strings +++ b/DuckDuckGo/fi.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player ei ole käytettävissä"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Lue lisää"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "YouTuben viimeaikaiset muutokset ovat vaikuttaneet Duck Playerin toimintaan. Pyrimme korjaamaan nämä ongelmat. Kiitos ymmärryksestä."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo iOS:lle"; diff --git a/DuckDuckGo/fr.lproj/Localizable.strings b/DuckDuckGo/fr.lproj/Localizable.strings index 0622971e33..388ca78ccc 100644 --- a/DuckDuckGo/fr.lproj/Localizable.strings +++ b/DuckDuckGo/fr.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player n'est pas disponible"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "En savoir plus"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Les récents changements apportés à YouTube ont affecté la fonctionnalité de Duck Player. Nous nous efforçons de résoudre ces problèmes et vous remercions de votre compréhension."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pour iOS"; diff --git a/DuckDuckGo/hr.lproj/Localizable.strings b/DuckDuckGo/hr.lproj/Localizable.strings index 1085034500..2cc004e806 100644 --- a/DuckDuckGo/hr.lproj/Localizable.strings +++ b/DuckDuckGo/hr.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player je nedostupan"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Saznajte više"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Na funkcionalnost Duck Playera utjecale su nedavne promjene na YouTubeu. Radimo na rješavanju ovih problema i cijenimo tvoje razumijevanje."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo za iOS"; diff --git a/DuckDuckGo/hu.lproj/Localizable.strings b/DuckDuckGo/hu.lproj/Localizable.strings index 529bae8c1f..2a70709d02 100644 --- a/DuckDuckGo/hu.lproj/Localizable.strings +++ b/DuckDuckGo/hu.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck-cím"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "A Duck Player nem érhető el"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "További részletek"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "A YouTube legutóbbi módosításai érintik a Duck Player működését. Dolgozunk a problémák megoldásán, és köszönjük a megértésedet."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo iOS verzió"; diff --git a/DuckDuckGo/it.lproj/Localizable.strings b/DuckDuckGo/it.lproj/Localizable.strings index cdf2d8d4b0..49c733fc9f 100644 --- a/DuckDuckGo/it.lproj/Localizable.strings +++ b/DuckDuckGo/it.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player non disponibile"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Ulteriori informazioni"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "La funzionalità di Duck Player è stata influenzata dalle recenti modifiche a YouTube. Stiamo lavorando per risolvere questi problemi. Ti ringraziamo per la comprensione."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo per iOS"; diff --git a/DuckDuckGo/lt.lproj/Localizable.strings b/DuckDuckGo/lt.lproj/Localizable.strings index 29db393e6b..954e2a8098 100644 --- a/DuckDuckGo/lt.lproj/Localizable.strings +++ b/DuckDuckGo/lt.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "„Duck Address“"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "„Duck Player“ nepasiekiamas"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Sužinoti daugiau"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Neseniai atlikti „YouTube“ pakeitimai turėjo įtakos „Duck Player“ funkcijoms. Stengiamės pašalinti šias triktis ir dėkojame už supratingumą."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "„iOS“ skirta „DuckDuckGo“"; diff --git a/DuckDuckGo/lv.lproj/Localizable.strings b/DuckDuckGo/lv.lproj/Localizable.strings index 27490ffd49..88c6f864a9 100644 --- a/DuckDuckGo/lv.lproj/Localizable.strings +++ b/DuckDuckGo/lv.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck adrese"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player nav pieejams"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Uzzināt vairāk"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Nesen ieviestās YouTube izmaiņas ir ietekmējušas Duck Player funkcionalitāti. Mēs strādājam, lai novērstu šīs problēmas, un novērtējam tavu sapratni."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo operētājsistēmai iOS"; diff --git a/DuckDuckGo/nb.lproj/Localizable.strings b/DuckDuckGo/nb.lproj/Localizable.strings index 2ae3576c79..9ae805f5a2 100644 --- a/DuckDuckGo/nb.lproj/Localizable.strings +++ b/DuckDuckGo/nb.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck-adresse"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player er utilgjengelig"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Finn ut mer"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Duck Players funksjonalitet har blitt påvirket av nylige endringer i YouTube. Vi jobber med å løse disse problemene og setter pris på forståelsen din."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo for iOS"; diff --git a/DuckDuckGo/nl.lproj/Localizable.strings b/DuckDuckGo/nl.lproj/Localizable.strings index c492581662..23785686eb 100644 --- a/DuckDuckGo/nl.lproj/Localizable.strings +++ b/DuckDuckGo/nl.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player is niet beschikbaar"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Meer informatie"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Recente wijzigingen in YouTube hebben invloed op de functionaliteit van Duck Player. We werken aan een oplossing voor deze problemen. Bedankt voor je begrip."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo voor iOS"; diff --git a/DuckDuckGo/pl.lproj/Localizable.strings b/DuckDuckGo/pl.lproj/Localizable.strings index 8b1a801d1f..a12542dcce 100644 --- a/DuckDuckGo/pl.lproj/Localizable.strings +++ b/DuckDuckGo/pl.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player jest niedostępny"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Dowiedz się więcej"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Ostatnie zmiany w serwisie YouTube miały wpływ na działanie Duck Player. Pracujemy nad rozwiązaniem tych problemów i dziękujemy za zrozumienie."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo dla systemu iOS"; diff --git a/DuckDuckGo/pt.lproj/Localizable.strings b/DuckDuckGo/pt.lproj/Localizable.strings index 0d48183589..e729a2650d 100644 --- a/DuckDuckGo/pt.lproj/Localizable.strings +++ b/DuckDuckGo/pt.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player indisponível"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Saiba mais"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "A funcionalidade do Duck Player foi afetada por alterações recentes ao YouTube. Estamos a trabalhar para resolver estes problemas e agradecemos a tua compreensão."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo para iOS"; diff --git a/DuckDuckGo/ro.lproj/Localizable.strings b/DuckDuckGo/ro.lproj/Localizable.strings index 876a047a6d..1f52b3cc4a 100644 --- a/DuckDuckGo/ro.lproj/Localizable.strings +++ b/DuckDuckGo/ro.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player indisponibil"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Află mai multe"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Funcționalitatea Duck Player a fost afectată de modificările recente ale YouTube. Lucrăm pentru a remedia aceste probleme și apreciem înțelegerea ta."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pentru iOS"; diff --git a/DuckDuckGo/ru.lproj/Localizable.strings b/DuckDuckGo/ru.lproj/Localizable.strings index c151958926..5b1bc97ce1 100644 --- a/DuckDuckGo/ru.lproj/Localizable.strings +++ b/DuckDuckGo/ru.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player недоступен"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Узнать больше"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Работа проигрывателя Duck Player пострадала в результате недавних изменений на YouTube. Мы уже ищем решение и благодарим вас за понимание."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo для iOS"; diff --git a/DuckDuckGo/sk.lproj/Localizable.strings b/DuckDuckGo/sk.lproj/Localizable.strings index 1fa269911c..d28c4b5172 100644 --- a/DuckDuckGo/sk.lproj/Localizable.strings +++ b/DuckDuckGo/sk.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player nie je dostupný"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Zistite viac"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Funkčnosť prehrávača Duck Player bola ovplyvnená nedávnymi zmenami v službe YouTube. Na odstránení týchto problémov pracujeme. Ďakujeme za pochopenie."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo pre iOS"; diff --git a/DuckDuckGo/sl.lproj/Localizable.strings b/DuckDuckGo/sl.lproj/Localizable.strings index fded568770..02d2ba59d2 100644 --- a/DuckDuckGo/sl.lproj/Localizable.strings +++ b/DuckDuckGo/sl.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Naslov Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Predvajalnik Duck Player ni na voljo"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Več"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Nedavne spremembe v YouTubu so vplivale na delovanje predvajalnika Duck Player. Prizadevamo si za odpravljanje teh težav in cenimo vaše razumevanje."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo za iOS"; diff --git a/DuckDuckGo/sv.lproj/Localizable.strings b/DuckDuckGo/sv.lproj/Localizable.strings index 3e8686101a..4d85cea805 100644 --- a/DuckDuckGo/sv.lproj/Localizable.strings +++ b/DuckDuckGo/sv.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player är inte tillgänglig"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Läs mer"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "De senaste ändringarna på YouTube har påverkat funktionaliteten hos Duck Player. Vi arbetar för att åtgärda problemen och tackar för din förståelse."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "DuckDuckGo för iOS"; diff --git a/DuckDuckGo/tr.lproj/Localizable.strings b/DuckDuckGo/tr.lproj/Localizable.strings index cbc3576827..caafe9e0e2 100644 --- a/DuckDuckGo/tr.lproj/Localizable.strings +++ b/DuckDuckGo/tr.lproj/Localizable.strings @@ -967,6 +967,15 @@ /* No comment provided by engineer. */ "Duck Address" = "Duck Address"; +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player Kullanılamıyor"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Daha Fazla Bilgi"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Duck Player'ın işlevselliği YouTube'da yapılan son değişikliklerden etkilendi. Bu sorunları çözmeye çalışıyoruz. Anlayışınız için teşekkür ederiz."; + /* No comment provided by engineer. */ "DuckDuckGo for iOS" = "iOS için DuckDuckGo"; From d3bb65168f2beda45124b15601347ad75b4b8fa7 Mon Sep 17 00:00:00 2001 From: Graeme Arthur Date: Fri, 9 Aug 2024 19:25:36 +0200 Subject: [PATCH 16/17] New autofill onboarding for existing DDG users (#3170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task/Issue URL: https://app.asana.com/0/72649045549333/1207502458693789/f CC: ⚠️ There's some Pixels and a feature flag that will be merged from a stacked PR into this one before merging to main ⚠️ **Description**: We're turning on autofill for all existing users who have not already. To do this, we're making some improvements to the first Save Login prompt to better onboard users. Furthermore, we're making some tweaks to the logic to make sure we: - Don't show this prompt to users established to be "existing autofill users" - Show the new Save Login prompt until they either save a login or have seen the prompt on how to disable autofill - Show a new less intrusive prompt after they've declined autofill twice on 2 websites **Steps to test this PR**: 1. Install a clean build to reset all state OR Go to ... → Settings ... → All debug options → Autofill Settings → Reset Autofill Data 2. Go to https://fill.dev/form/login-simple, enter some random details and hit save 3. You will see the onboarding prompt. Dismiss the prompt 4. Go to any other page with a different domain and log in 5. You will see the disable prompt. 6. Reset your state (see step 1) 7. Manually save a log-in using the autofill management screen 8. Repeat steps 2-4 and confirm you don't see the disable prompt. 9. Reset your state (see step 1) 10. Add a password to another device (e.g macOS) 11. Follow the Sync flow to pull that password in to your iOS test device 12. Repeat step 2-4 and confirm you don't see the disable prompt 13. Reset your state (see step 1) 14. Manually turn autofill off and on 15. Repeat step 2-4 and confirm you don't see the disable prompt **Definition of Done (Internal Only)**: * [ ] Does this PR satisfy our [Definition of Done](https://app.asana.com/0/1202500774821704/1207634633537039/f)? **Copy Testing**: * [ ] Use of correct apostrophes in new copy, ie `’` rather than `'` **Orientation Testing**: * [ ] Portrait * [ ] Landscape **Device Testing**: * [ ] iPhone SE (1st Gen) * [ ] iPhone 8 * [ ] iPhone X * [ ] iPhone 14 Pro * [ ] iPad **OS Testing**: * [ ] iOS 15 * [ ] iOS 16 * [ ] iOS 17 **Theme Testing**: * [ ] Light theme * [ ] Dark theme --- ###### Internal references: [Software Engineering Expectations](https://app.asana.com/0/59792373528535/199064865822552) [Technical Design Template](https://app.asana.com/0/59792373528535/184709971311943) --- Core/FeatureFlag.swift | 3 + Core/PixelEvent.swift | 26 ++-- DuckDuckGo.xcodeproj/project.pbxproj | 10 +- .../xcshareddata/swiftpm/Package.resolved | 8 +- DuckDuckGo/ActionMessageView.swift | 7 +- DuckDuckGo/AppDelegate.swift | 1 + DuckDuckGo/AppUserDefaults.swift | 12 +- .../App-DuckDuckGo-32.pdf | Bin 0 -> 4809 bytes .../App-DuckDuckGo-32.imageset/Contents.json | 12 ++ .../Autofill-Color-24.pdf | Bin 0 -> 2110 bytes .../Autofill-Color-24.imageset/Contents.json | 12 ++ .../24px/Lock-Color-24.imageset/Contents.json | 12 ++ .../Lock-Color-24.imageset/Lock-Color-24.pdf | Bin 0 -> 1350 bytes .../24px/Sync-Color-24.imageset/Contents.json | 12 ++ .../Sync-Color-24.imageset/Sync-Color-24.pdf | Bin 0 -> 8685 bytes DuckDuckGo/AutofillDebugViewController.swift | 13 ++ DuckDuckGo/AutofillLoginListViewModel.swift | 9 +- ...ofillLoginSettingsListViewController.swift | 5 +- DuckDuckGo/AutofillUsageMonitor.swift | 34 +++++ DuckDuckGo/AutofillViews.swift | 5 +- DuckDuckGo/SaveLoginView.swift | 136 ++++++++++++------ DuckDuckGo/SaveLoginViewController.swift | 57 +++----- DuckDuckGo/SaveLoginViewModel.swift | 51 +++++-- DuckDuckGo/TabViewController.swift | 18 ++- DuckDuckGo/UserText.swift | 34 +++-- DuckDuckGo/en.lproj/Localizable.strings | 55 +++++-- DuckDuckGoTests/AppUserDefaultsTests.swift | 35 ++++- .../AutofillLoginListViewModelTests.swift | 14 +- DuckDuckGoTests/MockFeatureFlagger.swift | 36 +++++ .../PrivacyProDataReporterTests.swift | 6 - 30 files changed, 454 insertions(+), 169 deletions(-) create mode 100644 DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/App-DuckDuckGo-32.pdf create mode 100644 DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/Contents.json create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Autofill-Color-24.pdf create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Contents.json create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Contents.json create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Lock-Color-24.pdf create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Sync-Color-24.imageset/Contents.json create mode 100644 DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Sync-Color-24.imageset/Sync-Color-24.pdf create mode 100644 DuckDuckGo/AutofillUsageMonitor.swift create mode 100644 DuckDuckGoTests/MockFeatureFlagger.swift diff --git a/Core/FeatureFlag.swift b/Core/FeatureFlag.swift index 6f34929142..bfb533e0a8 100644 --- a/Core/FeatureFlag.swift +++ b/Core/FeatureFlag.swift @@ -30,6 +30,7 @@ public enum FeatureFlag: String { case autofillPasswordGeneration case autofillOnByDefault case autofillFailureReporting + case autofillOnForExistingUsers case incontextSignup case autoconsentOnByDefault case history @@ -58,6 +59,8 @@ extension FeatureFlag: FeatureFlagSourceProviding { return .remoteReleasable(.subfeature(AutofillSubfeature.onByDefault)) case .autofillFailureReporting: return .remoteReleasable(.feature(.autofillBreakageReporter)) + case .autofillOnForExistingUsers: + return .remoteReleasable(.subfeature(AutofillSubfeature.onForExistingUsers)) case .incontextSignup: return .remoteReleasable(.feature(.incontextSignup)) case .autoconsentOnByDefault: diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index 7c1cc45b99..0239f849ef 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -219,7 +219,12 @@ extension Pixel { case autofillLoginsSaveLoginModalConfirmed case autofillLoginsSaveLoginModalDismissed case autofillLoginsSaveLoginModalExcludeSiteConfirmed - + + case autofillLoginsSaveLoginOnboardingModalDisplayed + case autofillLoginsSaveLoginOnboardingModalConfirmed + case autofillLoginsSaveLoginOnboardingModalDismissed + case autofillLoginsSaveLoginOnboardingModalExcludeSiteConfirmed + case autofillLoginsSavePasswordModalDisplayed case autofillLoginsSavePasswordModalConfirmed case autofillLoginsSavePasswordModalDismissed @@ -246,10 +251,9 @@ extension Pixel { case autofillLoginsFillLoginInlineAuthenticationDeviceAuthCancelled case autofillLoginsAutopromptDismissed - case autofillLoginsFillLoginInlineDisablePromptShown - case autofillLoginsFillLoginInlineDisablePromptAutofillKept - case autofillLoginsFillLoginInlineDisablePromptAutofillDisabled - + case autofillLoginsFillLoginInlineDisableSnackbarShown + case autofillLoginsFillLoginInlineDisableSnackbarOpenSettings + case autofillLoginsSettingsEnabled case autofillLoginsSettingsDisabled case autofillLoginsSettingsResetExcludedDisplayed @@ -946,7 +950,12 @@ extension Pixel.Event { case .autofillLoginsSaveLoginModalConfirmed: return "m_autofill_logins_save_login_inline_confirmed" case .autofillLoginsSaveLoginModalDismissed: return "m_autofill_logins_save_login_inline_dismissed" case .autofillLoginsSaveLoginModalExcludeSiteConfirmed: return "m_autofill_logins_save_login_exclude_site_confirmed" - + + case .autofillLoginsSaveLoginOnboardingModalDisplayed: return "autofill_logins_save_login_inline_onboarding_displayed" + case .autofillLoginsSaveLoginOnboardingModalConfirmed: return "autofill_logins_save_login_inline_onboarding_confirmed" + case .autofillLoginsSaveLoginOnboardingModalDismissed: return "autofill_logins_save_login_inline_onboarding_dismissed" + case .autofillLoginsSaveLoginOnboardingModalExcludeSiteConfirmed: return "autofill_logins_save_login_onboarding_exclude_site_confirmed" + case .autofillLoginsSavePasswordModalDisplayed: return "m_autofill_logins_save_password_inline_displayed" case .autofillLoginsSavePasswordModalConfirmed: return "m_autofill_logins_save_password_inline_confirmed" case .autofillLoginsSavePasswordModalDismissed: return "m_autofill_logins_save_password_inline_dismissed" @@ -979,9 +988,8 @@ extension Pixel.Event { case .autofillLoginsAutopromptDismissed: return "m_autofill_logins_autoprompt_dismissed" - case .autofillLoginsFillLoginInlineDisablePromptShown: return "m_autofill_logins_save_disable-prompt_shown" - case .autofillLoginsFillLoginInlineDisablePromptAutofillKept: return "m_autofill_logins_save_disable-prompt_autofill-kept" - case .autofillLoginsFillLoginInlineDisablePromptAutofillDisabled: return "m_autofill_logins_save_disable-prompt_autofill-disabled" + case .autofillLoginsFillLoginInlineDisableSnackbarShown: return "autofill_logins_save_disable_snackbar_shown" + case .autofillLoginsFillLoginInlineDisableSnackbarOpenSettings: return "autofill_logins_save_disable_snackbar_open_settings" case .autofillLoginsSettingsEnabled: return "m_autofill_logins_settings_enabled" case .autofillLoginsSettingsDisabled: return "m_autofill_logins_settings_disabled" diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index a330b2bb17..46ddcde01b 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -950,7 +950,9 @@ EE4FB1882A28D11900E5CBA7 /* NetworkProtectionStatusViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4FB1872A28D11900E5CBA7 /* NetworkProtectionStatusViewModel.swift */; }; EE50052E29C369D300AE0773 /* FeatureFlag.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE50052D29C369D300AE0773 /* FeatureFlag.swift */; }; EE50053029C3BA0800AE0773 /* InternalUserStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE50052F29C3BA0800AE0773 /* InternalUserStore.swift */; }; + EE5929622C5A8AF40029380B /* AutofillUsageMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE5929612C5A8AF40029380B /* AutofillUsageMonitor.swift */; }; EE72CA852A862D000043B5B3 /* NetworkProtectionDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE72CA842A862D000043B5B3 /* NetworkProtectionDebugViewController.swift */; }; + EE7623BE2C5D038200FA061C /* MockFeatureFlagger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE7623BD2C5D038200FA061C /* MockFeatureFlagger.swift */; }; EE7917912A83DE93008DFF28 /* CombineTestUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE7917902A83DE93008DFF28 /* CombineTestUtilities.swift */; }; EE7A92872AC6DE4700832A36 /* NetworkProtectionNotificationIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE7A92862AC6DE4700832A36 /* NetworkProtectionNotificationIdentifier.swift */; }; EE8594992A44791C008A6D06 /* NetworkProtectionTunnelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8594982A44791C008A6D06 /* NetworkProtectionTunnelController.swift */; }; @@ -2694,7 +2696,9 @@ EE4FB1872A28D11900E5CBA7 /* NetworkProtectionStatusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionStatusViewModel.swift; sourceTree = ""; }; EE50052D29C369D300AE0773 /* FeatureFlag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlag.swift; sourceTree = ""; }; EE50052F29C3BA0800AE0773 /* InternalUserStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalUserStore.swift; sourceTree = ""; }; + EE5929612C5A8AF40029380B /* AutofillUsageMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutofillUsageMonitor.swift; sourceTree = ""; }; EE72CA842A862D000043B5B3 /* NetworkProtectionDebugViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionDebugViewController.swift; sourceTree = ""; }; + EE7623BD2C5D038200FA061C /* MockFeatureFlagger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFeatureFlagger.swift; sourceTree = ""; }; EE7917902A83DE93008DFF28 /* CombineTestUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombineTestUtilities.swift; sourceTree = ""; }; EE7A92862AC6DE4700832A36 /* NetworkProtectionNotificationIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionNotificationIdentifier.swift; sourceTree = ""; }; EE8594982A44791C008A6D06 /* NetworkProtectionTunnelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionTunnelController.swift; sourceTree = ""; }; @@ -5613,6 +5617,7 @@ 6F03CB032C32EFA8004179A8 /* MockPixelFiring.swift */, 9F23B8082C2BE9B700950875 /* MockURLOpener.swift */, 9FEA22332C3271DC006B03BF /* MockTimer.swift */, + EE7623BD2C5D038200FA061C /* MockFeatureFlagger.swift */, 9F8007252C5261AF003EDAF4 /* MockPrivacyDataReporter.swift */, 9F69331C2C5A191400CD6A5D /* MockTutorialSettings.swift */, ); @@ -6002,6 +6007,7 @@ C17B59552A03AAC40055F2D1 /* PasswordGeneration */, 31951E9328230D8900CAF535 /* Shared */, F407605428131923006B1E0B /* SaveLogin */, + EE5929612C5A8AF40029380B /* AutofillUsageMonitor.swift */, ); name = Autofill; sourceTree = ""; @@ -7162,6 +7168,7 @@ D66F683D2BB333C100AE93E2 /* SubscriptionContainerView.swift in Sources */, 851B128822200575004781BC /* Onboarding.swift in Sources */, 9FB027192C26BC29009EA190 /* BrowsersComparisonModel.swift in Sources */, + EE5929622C5A8AF40029380B /* AutofillUsageMonitor.swift in Sources */, 3151F0EE2735800800226F58 /* VoiceSearchFeedbackView.swift in Sources */, 37CF91642BB4A82A00BADCAE /* CrashCollectionOnboardingViewModel.swift in Sources */, 6F64AA5D2C4920D200CF4489 /* ShortcutAccessoryView.swift in Sources */, @@ -7513,6 +7520,7 @@ F1BDDBFE2C340D9C00459306 /* SubscriptionFlowViewModelTests.swift in Sources */, F1BDDC022C340DDF00459306 /* SyncManagementViewModelTests.swift in Sources */, D625AAEC2BBEF27600BC189A /* TabURLInterceptorTests.swift in Sources */, + EE7623BE2C5D038200FA061C /* MockFeatureFlagger.swift in Sources */, 5694372B2BE3F2D900C0881B /* SyncErrorHandlerTests.swift in Sources */, 987130C7294AAB9F00AB05E0 /* MenuBookmarksViewModelTests.swift in Sources */, 858650D32469BFAD00C36F8A /* DaxDialogTests.swift in Sources */, @@ -10473,7 +10481,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 181.1.0; + version = 182.0.0; }; }; 9F8FE9472BAE50E50071E372 /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index fd7fcfd5de..0e95a916c7 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { - "revision" : "ff87c19636bce8baa34b7984defa779c083f9ce9", - "version" : "181.1.0" + "revision" : "d67979814bdd3c4c43a38e6694c56f1fdb5969ac", + "version" : "182.0.0" } }, { @@ -41,8 +41,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/content-scope-scripts", "state" : { - "revision" : "097e545c737db78cb1d253a87a9acd6dd8ad8497", - "version" : "6.4.0" + "revision" : "f97053d24c21ea301d4067adbbe0899ff940526a", + "version" : "6.7.0" } }, { diff --git a/DuckDuckGo/ActionMessageView.swift b/DuckDuckGo/ActionMessageView.swift index f0a3ef3f63..ca419635ae 100644 --- a/DuckDuckGo/ActionMessageView.swift +++ b/DuckDuckGo/ActionMessageView.swift @@ -90,6 +90,7 @@ class ActionMessageView: UIView { numberOfLines: Int = 0, actionTitle: String? = nil, presentationLocation: PresentationLocation = .withBottomBar(andAddressBarBottom: false), + duration: TimeInterval = Constants.duration, onAction: @escaping () -> Void = {}, onDidDismiss: @escaping () -> Void = {}) { let messageView = loadFromXib() @@ -99,6 +100,7 @@ class ActionMessageView: UIView { message: message.string, actionTitle: actionTitle, presentationLocation: presentationLocation, + duration: duration, onAction: onAction, onDidDismiss: onDidDismiss) } @@ -106,6 +108,7 @@ class ActionMessageView: UIView { static func present(message: String, actionTitle: String? = nil, presentationLocation: PresentationLocation = .withBottomBar(andAddressBarBottom: false), + duration: TimeInterval = Constants.duration, onAction: @escaping () -> Void = {}, onDidDismiss: @escaping () -> Void = {}) { let messageView = loadFromXib() @@ -114,6 +117,7 @@ class ActionMessageView: UIView { message: message, actionTitle: actionTitle, presentationLocation: presentationLocation, + duration: duration, onAction: onAction, onDidDismiss: onDidDismiss) } @@ -122,6 +126,7 @@ class ActionMessageView: UIView { message: String, actionTitle: String? = nil, presentationLocation: PresentationLocation = .withBottomBar(andAddressBarBottom: false), + duration: TimeInterval = Constants.duration, onAction: @escaping () -> Void = {}, onDidDismiss: @escaping () -> Void = {}) { guard let window = UIApplication.shared.firstKeyWindow else { return } @@ -159,7 +164,7 @@ class ActionMessageView: UIView { messageView?.dismissAndFadeOut() } messageView.dismissWorkItem = workItem - DispatchQueue.main.asyncAfter(deadline: .now() + Constants.duration, execute: workItem) + DispatchQueue.main.asyncAfter(deadline: .now() + duration, execute: workItem) presentedMessages.append(messageView) } diff --git a/DuckDuckGo/AppDelegate.swift b/DuckDuckGo/AppDelegate.swift index 944c12d26c..ac22078290 100644 --- a/DuckDuckGo/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate.swift @@ -83,6 +83,7 @@ import WebKit private var crashReportUploaderOnboarding: CrashCollectionOnboarding? private var autofillPixelReporter: AutofillPixelReporter? + private var autofillUsageMonitor = AutofillUsageMonitor() var privacyProDataReporter: PrivacyProDataReporting! diff --git a/DuckDuckGo/AppUserDefaults.swift b/DuckDuckGo/AppUserDefaults.swift index 58197aa18e..c2261b6d07 100644 --- a/DuckDuckGo/AppUserDefaults.swift +++ b/DuckDuckGo/AppUserDefaults.swift @@ -257,12 +257,18 @@ public class AppUserDefaults: AppSettings { if let isNewInstall = autofillIsNewInstallForOnByDefault, isNewInstall, featureFlagger.isFeatureOn(.autofillOnByDefault) { - autofillCredentialsHasBeenEnabledAutomaticallyIfNecessary = true - autofillCredentialsEnabled = true + enableAutofillCredentials() + } else if featureFlagger.isFeatureOn(.autofillOnForExistingUsers) { + enableAutofillCredentials() } } } - + + private func enableAutofillCredentials() { + autofillCredentialsHasBeenEnabledAutomaticallyIfNecessary = true + autofillCredentialsEnabled = true + } + var autofillCredentialsEnabled: Bool { get { // setAutofillCredentialsEnabledAutomaticallyIfNecessary() used here to automatically turn on autofill for people if: diff --git a/DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/App-DuckDuckGo-32.pdf b/DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/App-DuckDuckGo-32.pdf new file mode 100644 index 0000000000000000000000000000000000000000..99256881e08c426f62c2d1297b04809af56a8642 GIT binary patch literal 4809 zcmb7IXIN8Nx28xj1}UP_2~B!Q2)#)ONH5YsloEkZ0wMIOAcWpg6i_HExChb` zWefK>bMengB_*T}$O0rHByv7}O++C-pSsH?E>&2%uiL1W0C^GzWGL3 zO3V_FMdrl~+TVIHr%f+%a1z3br4Mc3Z7xq;$#2mOGKkusoU%Lh?|Qw5D({;y{FBz? znQn3!C+zF~flme4sTO5i(!(A7IvgQ)8XV}~B3>DAm3F?MpVD;6wECXBR!i1v!QOnr zbZMI*(VA?Q+}nQ1BOEnc-B=;xXP2LiEn0qftY{fN8q(4AVEPN;cG2iqRfoKNDqrT+ z{7A$V%Gf@uo-oKkM*3-whQL(5_shQLi<2nvL8Iz7*S6RnA7?m(qXmYUribSlqIbdw zI1=iHBQox(j&Li1GYiK!`5Nbo%(RDO$5RW!=J%)VGaZPk184 zy!=i6Ez4cjQ@KXDlfZz}P(nS6InLu{0ug?GIc90N_8nk|YgXz<*uWzm7$^5TnT8^2 z^w4HN%=pEumkA;1SG%-#W7EXJUCLbs&PRv~8_=zfSxCk{%HBmCeJu_7v^yTm-v>Ghga=(0J5UTIm*s zQtK*O!x%V9VoV(a(>mCk6hJ`M4^ht<9(rii(cZD&s(%?gsC~x*Viz;9IMq`Y!1-+< z+O^xxW`WEtVY!OYE`^?QoZKca6S#rtjp0(in}9B@)mW9u(RZZ~qFK_D)1QF^AnJup zV_KOkFAT_xKXNVh-s@YB@+z6b8|!(GlkaUYA?CP}7?*QN>U%X&6$e!`HN>;IuCW2ie+Z2V|f!e^L3 zI){0wpzFo)c6)N0Ei^s9pS$->s5l+*I-kx{+ihl{&(aj@^%k|Eeyuuc^kl^@Qu!GKvdVj*gau@xpWNdUxaIv!YUis7V>pNT z5#dkf`2ij`k;7ga55wua3v;)Y|GL@(%3qbnd#GMXoVvInmN6)VF3w8E5qsS$Wdy)o z?S7;bes)$+0B2?4du5S?ik#WcQPF?UvwHKRo}3p9Q!wbP7#aM^YnTsO?KT=;iO%gX z@cF~m8lT^i-xFP4{`+ElKL6y0{>J}**RvnBOYF?!zbnFMeVjn2JL$dPtQ;4@(%!?? zRGyBs`3{8_w}@mpF(i9ON9^?lh2A5e>(2Iw90=s|*LK##T`V&ATa7}{;neBTNRz_J z=U|1Py@QR3c-G+K4io7nwS$1Y-Y?6$>yIgC8iVtkdWS}G%q(Iwyv=~j$yl8jUqV9Kr$3HJ zEI*f*@9jsv7e1V^t06w-#s&B#%m7aVD!&GGH(9j5@qbQ!VL5KbPi9No%fhQlT?x0W zd>V->Y!W^4Ro`e{mDrUDzy*zYMC?27!E0~lg|4hAhCfb*Zn%;i*rU9Q8dsZ$+Y%q| z3lA3VBH115V&ji7N_&Oz6S#e@dhOuk$ux;1VHu|8&3*X#F$mLda_Aw|EGt1ivZ4K9 z5v)&mvU>>p{AE_y2L@;gt3hV&2Jh{i#w!FLeN(VVKJ2nFpb70VuP1aG8es@>U+rhj zxiOZ2uqJWWk%`T@k*;T=!g&`yMDl^3&)*(~9)_5YaR!u2{q?v@$kvTLNg!x@usoJb z#m+K!eH@1^=_^}ci_F^FDA|#+m-nmly-fMW#43*e)t_sI@5R12dtw}F>_eik{_=@4 zVe(RPVIOP8NB_|1?0kbVgVLl}`KL|Grj%$oIv92jlSr3v%2yAosi6AxpG{#lafRU-$4nD6c%KUWpepqhz;Av4 zagi$^I2q?ec;7GqW3qYaO}6v$?OfN?EgBfdWs;77&MeA4|HjG@O_Z0UeIxbXfl1eP z3@b)lD34fTJ^p^I_4GMk%wf{BZb0qK_@<^8u1@!aI4I>qnI}(6#+)HgZ)Cb*jNFC~1Q0tNAo~eLvfMjsw zk(K4z6n6AazR~nyH1H1>%Om1aV6(vGX%}!{sM0SNXv)ET9bQ$5xn65qe_*wpSs3}6 z-j`4GE5*yPj8M}pKC@lr^eQsGa{cnW15U$s4V9-*TS#!fJcELUJ+fo7s`kC>h)75m zfY)-RaZZA1p$)*yx(LYiR0nAe@IcnW_j5Dsuu4iUJhGsb@ESVFp0xBxHVtii@O5{)Qv7hdXCCwAWe*FB6pdIY|RzP$`I7q0N~Da*AsOIR#LTDNi}| zMXpaR(f6kF4jH0uQ>}BaeGa-ruSPcVw!4vyASQ7i$7Lv(L@fSI==F>y?XyX;rZ9xz zvg2Z#yNiWLRNdr#YVhj|ax#;X*JJj+NXOT@a&d5J2@nxZfL}f(3J>{2yZqY%i*4;1CDvHRIB;t{p7(N84w^2($x-pT7loyT6U`B&FTXsf(oG?>DpyC(u@hqVb z9?Iukc72neZqtWiFPx!j0+k?^fiAQgjEw&9W)M@+QaCkjA9W>DE5VShP8jS(D*)WV zQ?PWK(}0@++(F(RC2hbW5XYaRY_k`BMW8Pw&OGt;PQ*JS90xV=mM|>OJDwaEN&LKI z^7?$NU9BzYr?en1BEbC0R^8#XChofjJ5+u?s!T%yR*h@Uy)KWkq)9zR8D-q1L%A=A zC%S7X2|Voah5OS{=*#~g3BpatzX#m?JncML_(s<&tQy7aqQzQ0ZNz7~nYU7{7*&HIVn3?M?@9rZbe%hj-Y< zN!{sF>Svxx(fHUJ33kv4$X4idM(hkx3osnaQ4EK+y^H-c2r@0y|$3NDm|`O15XH*24`#v%dZfcwZJw+t0!nnOy+LN z4PeMpo#?1SwM8xHx0zOh+-?-N@=eKfkX5Ue+!g0JU^uP(Sei9UOPY1JwN5-+!UYsz+n|6g3 z2@{8<3W%K@I50v3C}qHxEe`$2hw^G0wa-a7`6Hl!eSR~xKubOG^m(_WZ3G)?%s?JmkUwj1Y6UNB_RwzCb%+w`lQi4?Sjaj9m!@38|ctl6|_1@~cfo63qU zt#e~rExEtQn+?MkM5m>E>z>?BG zZcUhDq2YLC{XSDeQ`C#o!!|(m*%lYaj-_N3A66k-!F{_zfRP*$S&tD&3Q45A6$4PV z9dZMmM3?6d1+q1RSF|H$ArJL@;!pPOd*qS2@ z^dkHa)6}-ic=;)C$Z<%&cNELES{3ysX%}Dyy2f~q&0o37*zZkhwl7A%l*stWJ#L71 zHT&S#Ez;8+CyA>x70zS}@?FyDMx(3?pKhF3v(|^2p=<6@7Jj0j5xCX{`}7AjmIR;^ z@b!WH+HeYgesNbGZ?gCRjmt~DOf?iDRJ8Homa1RA6hWgJ?L)cPXn`AZPgLGg`DuLi za66h)*#7)YA?Ro`czf6)bJpWNSd0Yp*?`p<{E_&@NOFi>=LMWQ`G z7H4W5KYp|y^sMcF_9L|6c8=EnU)_Jk^s9w%CPjYsEtHY2Xt*ohK#zYM{t8^# z8g1>2wEump4+?%CAOeyCd~bW4{er~B#6-nFc=*Qvi-68&AlDxd7!1LOcsBkEg5r<< zI|PB^<=bx%6ax7-7Zd`;-{J48px}RVL7`H=Hlk71j?Qot;OyGeRq&U_~ literal 0 HcmV?d00001 diff --git a/DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/Contents.json new file mode 100644 index 0000000000..1ae202a815 --- /dev/null +++ b/DuckDuckGo/Assets.xcassets/App-DuckDuckGo-32.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "App-DuckDuckGo-32.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Autofill-Color-24.pdf b/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Autofill-Color-24.pdf new file mode 100644 index 0000000000000000000000000000000000000000..92cb0505048b9bda32d352b2a53eb08de8c62d42 GIT binary patch literal 2110 zcmZXVc{r4N8^=j8h9pE%R6SNppTVu}7Vhys9Ee*z6Mfjr2b5Ich%pcO>&ruhJ9_I6vg z#6E#aqdFji2!182KRWXFy22M=%ZD5K{b>#1d zf2|m8YdTfDuli=m75x3UK}2V@8D@qT##o^|YF(>$6@n=UdVtNsWfGM0rmvXsC;dwA z)eJdWnq#0Vd6Vi&IFON1+fcpI9?f4CJQ~DPI1q33fXN)VeU65tD)@~@6=bz@g{lUl zS6=J*mbBS0xVfzv3`_I7y8XqBslwkSiKlhP^sHq3i^|Evh8B`M$E%ro7ECE*UuTwd zVO9eES|zrC-_*Wa>li#GxXQXag+UOsza?)hPjDru*J^2sTnUP$pitqCc7Lw^OE##e zrQl3aCo=oh!vd{nSFffQktLa_-2E2aU7w>XL>%X`iVW9o$A^9$HaRY*H?_XdUAE_} zWv01MfAPyOLe!B!`=I$M9Skdi^ddQvl_Xi(-N>E7()Fb``xIyf+p7ui@^{>rPOF0D z27j@7C`AmSSu-Y2+ho8BlqZkd!AS^zNO~ z@zxdVpld2iXhRL%H)Uls4bzRwe(*}v@_M4#jGOHSl!H5JEQcY5Q{ zsc|rWN(`i5Ofod;hNb8fzj4Oqe>oVlF(la#_3(8F-h``stWs29Z1L%=?5Ym2dA2zQ z>=zPDw=!~&T0~vV?!oR)^*#OmCf5j8!(!iF8{uaKAQ{Lls6@>`rV~%vDXYH^qoqsu+k3C+U35 zo!DgEHsUHge@b0o$wC4le4tK!z!z_8c75zMZ|JE&d*Af9j!b!ZzF2GRi8vNtdf$+w zi-OVbs!h~P^r*%AQ3O!$9k!HlEbvXWSXa%VMU!RC7pT>Y=$kz{1g{v$o2E#W2)v-m zK#8c|lLM@jw?s9CIwJ_HkFIX6lw>3z-n)``K&lk$7qi1t*!kz-bPs~Fj2SKX6Cd)c z+EGj8%h$*L1M5ApsQI+>v0y!pzrhk&_TMn$L;me2MZ3B#KM52^<>-w-ACJ=Mt7ikU zd$p0ivN-APi!w>{Vkap#Tw__K#Q1n=hJv?RlvS-}!XV<`6041vvV?`Nih{L>rs8ST z`pPYlA)ZXe;vm8iR+`(=ygcK5RH`94G)tOUd43ITp0hlM|Kj)jPWe3Defi{6OgO?e zPcL&J!WWp!jl6)D7+bSD9EhPi;e(zxVji@v7(C*c8R8Kb`)qeud*lDo9XT7naz_34 zS-ms#Ia7Qa1}JrP)GiCucV#vsKtmFVOrruWuHOl8HarjlKpeq)2MK2&Pa?sH90s@m zsw%2m@nfN;z9aou?VMx_QOUs+4~PnIsKmhuhcL!u5)C4;Z{#3pN5l~*Yz@%(F8vK$ z9BCJ5pe50hT`ItFU<>TrV@wWa=c4{mKXn^mJKfOy=_HOp>h6V{!nTbY6KDi~viHxa zVHC&|eD_W>x?I literal 0 HcmV?d00001 diff --git a/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Contents.json new file mode 100644 index 0000000000..b4e82ba339 --- /dev/null +++ b/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Autofill-Color-24.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Autofill-Color-24.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Contents.json new file mode 100644 index 0000000000..9f9ee57181 --- /dev/null +++ b/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Lock-Color-24.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Lock-Color-24.pdf b/DuckDuckGo/Assets.xcassets/DesignSystemIcons/24px/Lock-Color-24.imageset/Lock-Color-24.pdf new file mode 100644 index 0000000000000000000000000000000000000000..aaa082213871b8aa4d991156fa5c036f20a56f20 GIT binary patch literal 1350 zcmY!laBvK;I`dFTEr~!5FAK2q*+Jp}3?dH8Gc~f^q2--#!sTp4RV{u4^ZrIP$Z2 z6RXO#1A<=0Oe?EZOoX04zZsjloLy|e$y0wrKmB>L$H03xd%Nj5OZSIwH#uw#SeY~J@inGb zNB3IXYL*i?&u4nT>gX!r(>tsGro9u|$9~$;(l4mSm9Hdy+8&3lor%)l6t(V1$or=> zt@xHQP2%W0o}|ix`P&`7Ca>FdI(LrCu6Z+pBL-mv*MS>#775CB){l=z;%V8&hm)tlp8BPuHkEJTl11LtmH?4twQ6hwbyDc zGw*Voacbqshsv#1%S~7nB`;Y{vTWg+wwYVPWr6JA9d2pQme)@;X_s=L?N9 z@2+GNW2%`f;}+ty=8o^Zhmq@i%su$*?(@%F8sz=#6_3BbI*0RpF-3xj%I&j$*v{zU za%P_67$UW>amC}yZzo=P`{*FYmNm+3ifZ){({3nC`1bw6)dWWYF?pb+#%rqB&hOG` z6|aww>|3CI>Cw#@C7&zG>zU_Go^=?M=Anremij@-8Imi^ER5iJ!UQe~%q#kid3pII z#R}1}(3}ubS&*urACQ<1%No9^DVd2*`4tM$3I=)xV1Qs4!G#bkm`OpY#rdU0$*IK( zpxg<{R-l~boS#>cng_HIlr>?30f|LGF$Gho5K;yP3BfbAzISE{(5VU_9|S4D>~YR7 z1?n}#aDOo*Bf|p248Ql_d%qBnW?F< zsRB?K3JeVtz$}G4xR5c>ogjb^vH)_>g^Yj!fvU>V66k9bAwvT*OSn);QDSCJY7rMG z_B>sH!J$!{pPQwLl6ohux>^g1jC`BuryYsO);jz7$7D968K3IIBkjwo(v-rMEJp| zc;gIZibYD4PQ$6S?TQguVoX|vQLWP^&dN~11Q-_<1{sWc6{mr6V4xnua1vu-RhA+Z zJP{~LQ>6IB;xtBDo|L8xo3SZIILFMCq04CJ#(~*jnqeEMF{Rs-a!RFna7X+Wvz+F) z7;fdyh1JP0uf*!*j%MJzV+7f}8*(9)R%vl9xZ{@};+NbU2RKgg?*%GurP@UY@q3I8 zhDJz+5#s?TNQAXMVdlUUBFA9?JMygqb34&tQEFYij`%HRIn8e|+{*tX(c!FP9vdC} zlDCZx(n__94$7(M5I6mQAur(0t!|sO2?jgIJk-3^EpnW8HX=doG(XmTyid&TLkZTp zxo9hucV9$=F3UbYTC*!ghzZwrC%P{|Wzd=Q3Y9^~-tnB#sM2fA_o(pqGH2AQdAVRL z&N4I!OcBLdZcvy6>6D=v0*8Ys@RA`33JykT363Ht!oU_~0vtT6HdyLZsPEh{Sp$5D;LAmD2jgS)KOwNF#OWI=wuDQ>b8RlqyrLP|5V%EHeVxGj@0{ z6|o5BL)?Od9gebRkair{_Us+ri@p`W5r2{?MQ0g7RtF1W)SFc1%g=T)K;#ZB6&R$J zP!!C?oE;=^i$k3m6cz>!3H&+1tW<8AVdM`F(iojyW1(42G>mN>r82z^04%@f%nF6) z*6O5k@LJDl4H=wXrB$?vB55RG_=zC18f2C~F>XehN?`;VY$qDKp>U)evVT+u5<6tKXL>xm{5(lgV$}lJc zqnLz32?7if1fwhpGa#R_1i{)U3W$&p7{TDcd%Sv{3zc9rfm0Za0j)F-vR2DT35hZ+ z&cX@^*oLtf&|{^gLnM$-(KG>!U@;P-5nv)hft-W_Su6t75HJg*qd3A#w@?%iFqK3R zjAm^_l$2mNj$;^*kD@q(urQc7f>H>J3G<){@D2=Z>y30M6%s=X2CkOIqp(4tg_4Is zTBx0K5g$0_)J-6^a}jWog=&X;q`UI!6#Xi)r z?)a6#FBoGb2tlDFIOU4_$hM<`DIUtffe~yaOu~m1O~M2S9T15K`F{<6e4PIYebT;0Dq``MgKp8e>?<$EzM&YLJ#pjsWfzC_KdD z@NZXYv{PIp$Rb*w8r#hXRv3qQ&~q-G{_^@kbdivQoU0h5PgWy5CM`Od2rUP3OBl89 z)b_OShd2HJX0396C7>65`3DO(ev|$gZf*DE6NQ@?fBYtq$&H**B}7BCIo-)$<_t3h zg1P47AKQ=PR^~`$Fy9Aqa+yHQ8Eew0wK{{^*rp_HB^f-5Hn)8PC>AeRr}I{jv13P5c0VgnhL z4t$o&JBtr%uTUO&EwiC5?uoqu^Ly|7p!A&jL8tv6-Eke_^0~+Thd(rCT|S|t4AiT$ zN5B7Q_z$=C)&K2LP42@h>u)yS{M)|=ZhoYdp1W{vUt#s5+tnj0>UCRI`R^yQ_Y1AKc2e=ughPxmzSl*%)?-WB`6PH3rEG5@Ju8pcqfNtzgZI;Ut%|1keO z;Rl!adR6I_88>s$fjfuqyzt@Kl{;4zdNxilPLDCwrbVwGJ@ckdsmyKjNm_rPre6#n6>)fcLh6U%*=le!|Rq>bg zo;mK9;}SYIZa=VFb>mJAyx9{%uGMz#4V7%l-2Gwbs5?#lDbK!tJ@)h=*I8Mey>k4S zX-%b)!_n0bn6AdWYWO-D%th?)+fAvf3hoxSWoqFj|AXO^#$|^GoGpYdG%h{sQMPvc zvr*;WAL&d`<@p6M%U+zap;K*fb7@J$y*a&1wO=&2#TuiAjB1MCu7eLJ?0yZoztYgX zp_p3E6>Ljdx8mE+KF+wkY&ln3S?gY#K%dtas%1XMhaG^*kgeWt?Dgw1tXE{^+L-4W z*5=_4`=x%jZo%>+lir`)(>pXH`rdag`pB@UJ(itxsjJD!e~yBC_J$Te9Hm0DFITMF zS|z(bR}*p~;dQTPi&{3kwV^0l=6Y+%wbc4KBRY**`cy%657+3S>B;{{XbAcIfcK%P zjn6EYpPx|FciZ%`GHGIC54Ensds?7(pTZq!{XC-lE}w+PQB#wXT}N!|d3=%Y{PCr( zRXLi1S#ysW`@LH{>%;1=C$4(!a@P^7XUa>S*;k$XO(8f_8hP) zGC;R-O#=?WvAtny?5mAsk|^q=23FAR{y%^ z^BR|1ZZDJ#uS!XI)1z?ynP;+I8lvfbNI7g*P+UQIMxOlervvo&59j#D$QP{&gkE_N z`2671qeoUZRT*X5S1d~(6&A#d*;g>P?zZx}VfOK%Jrv(|f2H_FAN;g5w9`naye6C& z5K=w(U;%cc(?=O_w?w4us^9Uayk>foccYT^U90q5`J!)Yzw6V59=E`2M|j|LuS*BZ zW0Wp>;FSkwu&4d~~MJ%`?Yg`6UH65d&9lAFR1E3gy>j7%QLb;@=DNBM?JRrglR2xmRL7m@a^jOyu?5~& z>&7N^8hqmFCa;Y}-m6mNo-ala@ngcCRu}m6E`G4GuBShIZS{yN0oQ#tPVIf$msJj* z&`z&TNUoM%6OP+eE4J@1{AqE7R;x3DPZMGz&WzacT#A^hUsfsA+%NkaBNRv$Xal8# z7WCeMN&ziIYCPXqHo~X~|MsZj_-SagTKJNJ^3zBV`%yrui63sk7uzHZfMPGp*1_Z_ z&rcH=A}Y0=10p#im##~39GsTDIiM#7nb(;J0V1KkM>^7D(1i}?=`^P6G- literal 0 HcmV?d00001 diff --git a/DuckDuckGo/AutofillDebugViewController.swift b/DuckDuckGo/AutofillDebugViewController.swift index 41345d0e5e..f194928580 100644 --- a/DuckDuckGo/AutofillDebugViewController.swift +++ b/DuckDuckGo/AutofillDebugViewController.swift @@ -42,6 +42,15 @@ class AutofillDebugViewController: UITableViewController { } } + @UserDefaultsWrapper(key: .autofillSaveModalRejectionCount, defaultValue: 0) + private var autofillSaveModalRejectionCount: Int + + @UserDefaultsWrapper(key: .autofillSaveModalDisablePromptShown, defaultValue: false) + private var autofillSaveModalDisablePromptShown: Bool + + @UserDefaultsWrapper(key: .autofillFirstTimeUser, defaultValue: true) + private var autofillFirstTimeUser: Bool + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) @@ -59,6 +68,10 @@ class AutofillDebugViewController: UITableViewController { eventMapping: EventMapping { _, _, _, _ in }) autofillPixelReporter.resetStoreDefaults() ActionMessageView.present(message: "Autofill Data reset") + autofillSaveModalRejectionCount = 0 + autofillSaveModalDisablePromptShown = false + autofillFirstTimeUser = true + _ = AppDependencyProvider.shared.autofillNeverPromptWebsitesManager.deleteAllNeverPromptWebsites() } else if cell.tag == Row.addAutofillData.rawValue { promptForNumberOfLoginsToAdd() } else if cell.tag == Row.resetEmailProtectionInContextSignUp.rawValue { diff --git a/DuckDuckGo/AutofillLoginListViewModel.swift b/DuckDuckGo/AutofillLoginListViewModel.swift index 45c9097b10..31557e9284 100644 --- a/DuckDuckGo/AutofillLoginListViewModel.swift +++ b/DuckDuckGo/AutofillLoginListViewModel.swift @@ -88,7 +88,7 @@ final class AutofillLoginListViewModel: ObservableObject { private let secureVault: (any AutofillSecureVault)? private let autofillNeverPromptWebsitesManager: AutofillNeverPromptWebsitesManager private let privacyConfig: PrivacyConfiguration - private let breakageReporterKeyValueStoring: KeyValueStoringDictionaryRepresentable + private let keyValueStore: KeyValueStoringDictionaryRepresentable private var cachedDeletedCredentials: SecureVaultModels.WebsiteCredentials? private let autofillDomainNameUrlMatcher = AutofillDomainNameUrlMatcher() private let autofillDomainNameUrlSort = AutofillDomainNameUrlSort() @@ -111,7 +111,7 @@ final class AutofillLoginListViewModel: ObservableObject { } self?.updateData() self?.showBreakageReporter = false - }, keyValueStoring: breakageReporterKeyValueStoring, storageConfiguration: .autofillConfig) + }, keyValueStoring: keyValueStore, storageConfiguration: .autofillConfig) @Published private (set) var viewState: AutofillLoginListViewModel.ViewState = .authLocked @Published private(set) var sections = [AutofillLoginListSectionType]() { @@ -138,6 +138,7 @@ final class AutofillLoginListViewModel: ObservableObject { get { appSettings.autofillCredentialsEnabled } set { appSettings.autofillCredentialsEnabled = newValue + keyValueStore.set(false, forKey: UserDefaultsWrapper.Key.autofillFirstTimeUser.rawValue) NotificationCenter.default.post(name: AppUserDefaults.Notifications.autofillEnabledChange, object: self) } } @@ -149,7 +150,7 @@ final class AutofillLoginListViewModel: ObservableObject { currentTabUid: String? = nil, autofillNeverPromptWebsitesManager: AutofillNeverPromptWebsitesManager = AppDependencyProvider.shared.autofillNeverPromptWebsitesManager, privacyConfig: PrivacyConfiguration = ContentBlocking.shared.privacyConfigurationManager.privacyConfig, - breakageReporterKeyValueStoring: KeyValueStoringDictionaryRepresentable = UserDefaults.standard) { + keyValueStore: KeyValueStoringDictionaryRepresentable = UserDefaults.standard) { self.appSettings = appSettings self.tld = tld self.secureVault = secureVault @@ -157,7 +158,7 @@ final class AutofillLoginListViewModel: ObservableObject { self.currentTabUid = currentTabUid self.autofillNeverPromptWebsitesManager = autofillNeverPromptWebsitesManager self.privacyConfig = privacyConfig - self.breakageReporterKeyValueStoring = breakageReporterKeyValueStoring + self.keyValueStore = keyValueStore if let count = getAccountsCount() { authenticationNotRequired = count == 0 || AppDependencyProvider.shared.autofillLoginSession.isSessionValid diff --git a/DuckDuckGo/AutofillLoginSettingsListViewController.swift b/DuckDuckGo/AutofillLoginSettingsListViewController.swift index 7fc7f8caa4..92f1aa5264 100644 --- a/DuckDuckGo/AutofillLoginSettingsListViewController.swift +++ b/DuckDuckGo/AutofillLoginSettingsListViewController.swift @@ -34,6 +34,7 @@ enum AutofillSettingsSource: String { case homeScreenWidget = "home_screen_widget" case lockScreenWidget = "lock_screen_widget" case newTabPageShortcut = "new_tab_page_shortcut" + case saveLoginDisablePrompt = "save_login_disable_prompt" } protocol AutofillLoginSettingsListViewControllerDelegate: AnyObject { @@ -169,6 +170,7 @@ final class AutofillLoginSettingsListViewController: UIViewController { var selectedAccount: SecureVaultModels.WebsiteAccount? var openSearch: Bool + let source: AutofillSettingsSource init(appSettings: AppSettings, currentTabUrl: URL? = nil, @@ -186,6 +188,7 @@ final class AutofillLoginSettingsListViewController: UIViewController { self.syncService = syncService self.selectedAccount = selectedAccount self.openSearch = openSearch + self.source = source super.init(nibName: nil, bundle: nil) authenticate() @@ -967,7 +970,7 @@ extension AutofillLoginSettingsListViewController: EnableAutofillSettingsTableVi if value { Pixel.fire(pixel: .autofillLoginsSettingsEnabled) } else { - Pixel.fire(pixel: .autofillLoginsSettingsDisabled) + Pixel.fire(pixel: .autofillLoginsSettingsDisabled, withAdditionalParameters: ["source": source.rawValue]) } viewModel.isAutofillEnabledInSettings = value diff --git a/DuckDuckGo/AutofillUsageMonitor.swift b/DuckDuckGo/AutofillUsageMonitor.swift new file mode 100644 index 0000000000..4302aec266 --- /dev/null +++ b/DuckDuckGo/AutofillUsageMonitor.swift @@ -0,0 +1,34 @@ +// +// AutofillUsageMonitor.swift +// DuckDuckGo +// +// Copyright © 2024 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 Core + +final class AutofillUsageMonitor { + + init() { + NotificationCenter.default.addObserver(self, selector: #selector(didReceiveSaveEvent), name: .autofillSaveEvent, object: nil) + } + + @UserDefaultsWrapper(key: .autofillFirstTimeUser, defaultValue: true) + private var autofillFirstTimeUser: Bool + + @objc private func didReceiveSaveEvent() { + autofillFirstTimeUser = false + } +} diff --git a/DuckDuckGo/AutofillViews.swift b/DuckDuckGo/AutofillViews.swift index 633d2fe261..ffb219210c 100644 --- a/DuckDuckGo/AutofillViews.swift +++ b/DuckDuckGo/AutofillViews.swift @@ -58,8 +58,9 @@ struct AutofillViews { struct AppIconHeader: View { var body: some View { - Image.appIcon - .scaledToFit() + Image(.appDuckDuckGo32) + .resizable() + .frame(width: 48, height: 48) } } diff --git a/DuckDuckGo/SaveLoginView.swift b/DuckDuckGo/SaveLoginView.swift index f2dc2cb311..601441e663 100644 --- a/DuckDuckGo/SaveLoginView.swift +++ b/DuckDuckGo/SaveLoginView.swift @@ -84,23 +84,20 @@ struct SaveLoginView: View { .zIndex(1) VStack { - Spacer() - .frame(height: Const.Size.topPadding) + Spacer(minLength: Const.Size.topPadding) AutofillViews.AppIconHeader() - Spacer() - .frame(height: Const.Size.headlineTopPadding) + Spacer(minLength: Const.Size.contentSpacing) AutofillViews.Headline(title: title) - if #available(iOS 16.0, *) { - contentView - .padding([.top, .bottom], contentPadding) - } else { - Spacer() - contentView - Spacer() + Spacer(minLength: Const.Size.headlineToContentSpacing) + contentView + Spacer(minLength: Const.Size.contentSpacing) + if case .newUser = layoutType { + featuresView.padding([.bottom], Const.Size.featuresListPadding) } ctaView - bottomSpacer } + .padding([.bottom], Const.Size.bodyBottomPadding) + .fixedSize(horizontal: false, vertical: shouldFixSize) .background(GeometryReader { proxy -> Color in DispatchQueue.main.async { viewModel.contentHeight = proxy.size.height } return Color.clear @@ -110,29 +107,90 @@ struct SaveLoginView: View { .padding(.horizontal, horizontalPadding) } + var shouldFixSize: Bool { + AutofillViews.isIPhonePortrait(verticalSizeClass, horizontalSizeClass) || AutofillViews.isIPad(verticalSizeClass, horizontalSizeClass) + } + private func shouldUseScrollView() -> Bool { var useScrollView: Bool = false if #available(iOS 16.0, *) { useScrollView = AutofillViews.contentHeightExceedsScreenHeight(viewModel.contentHeight) } else { - useScrollView = viewModel.contentHeight > frame.height + Const.Size.ios15scrollOffset + useScrollView = viewModel.contentHeight > frame.height } return useScrollView } - private var contentPadding: CGFloat { - if AutofillViews.isIPhonePortrait(verticalSizeClass, horizontalSizeClass) { - return Const.Size.contentSpacerHeight - } else if AutofillViews.isIPad(verticalSizeClass, horizontalSizeClass) { - return Const.Size.contentSpacerHeightIPad - } else { - return Const.Size.contentSpacerHeightLandscape + @ViewBuilder private func featuresListItem(imageResource: ImageResource, title: String, subtitle: String) -> some View { + HStack(alignment: .top, spacing: Const.Size.featuresListItemHorizontalSpacing) { + Image(imageResource).frame(width: Const.Size.featuresListItemImageWidthHeight, height: Const.Size.featuresListItemImageWidthHeight) + VStack(alignment: .leading, spacing: Const.Size.featuresListItemVerticalSpacing) { + Text(title) + .daxSubheadSemibold() + .foregroundColor(Color(designSystemColor: .textPrimary)) + .frame(maxWidth: .infinity, alignment: .topLeading) + Text(subtitle) + .daxSubheadRegular() + .foregroundColor(Color(designSystemColor: .textSecondary)) + .lineLimit(nil) + .fixedSize(horizontal: false, vertical: true) + } + .padding(0) + .frame(maxWidth: .infinity, alignment: .topLeading) } + .padding(0) + .frame(maxWidth: .infinity, alignment: .topLeading) } - private var ctaView: some View { + @ViewBuilder private var featuresView: some View { + VStack(alignment: .leading, spacing: 0) { + HStack(alignment: .center) { + Text(UserText.autofillOnboardingKeyFeaturesTitle) + .font(Font.system(size: 12, weight: .semibold)) + .multilineTextAlignment(.center) + .foregroundColor(Color(designSystemColor: .textSecondary)) + .frame(width: 255, alignment: .top) + } + .padding(.vertical, Const.Size.featuresListVerticalSpacing) + .frame(maxWidth: .infinity, alignment: .center) + Rectangle() + .fill(Color(designSystemColor: .container)) + .frame(height: 1) + VStack(alignment: .leading, spacing: Const.Size.featuresListVerticalSpacing) { + featuresListItem( + imageResource: .autofillColor24, + title: UserText.autofillOnboardingKeyFeaturesSignInsTitle, + subtitle: UserText.autofillOnboardingKeyFeaturesSignInsDescription + ) + featuresListItem( + imageResource: .lockColor24, + title: UserText.autofillOnboardingKeyFeaturesSecureStorageTitle, + subtitle: viewModel.secureStorageDescription + ) + featuresListItem( + imageResource: .syncColor24, + title: UserText.autofillOnboardingKeyFeaturesSyncTitle, + subtitle: UserText.autofillOnboardingKeyFeaturesSyncDescription + ) + } + .padding(.horizontal, Const.Size.featuresListPadding) + .padding(.top, Const.Size.featuresListTopPadding) + .padding(.bottom, Const.Size.featuresListPadding) + } + .padding(0) + .frame(maxWidth: .infinity, alignment: .topLeading) + .cornerRadius(Const.Size.featuresListBorderCornerRadius) + .overlay( + RoundedRectangle(cornerRadius: Const.Size.featuresListBorderCornerRadius) + .inset(by: 0.5) + .stroke(Color(designSystemColor: .container), lineWidth: 1) + ) + .fixedSize(horizontal: false, vertical: true) + } + + @ViewBuilder private var ctaView: some View { VStack(spacing: Const.Size.ctaVerticalSpacing) { AutofillViews.PrimaryButton(title: confirmButton, action: viewModel.save) @@ -154,21 +212,6 @@ struct SaveLoginView: View { } } - private var bottomSpacer: some View { - VStack { - if AutofillViews.isIPhonePortrait(verticalSizeClass, horizontalSizeClass) { - AutofillViews.LegacySpacerView(height: Const.Size.bottomSpacerHeight, legacyHeight: Const.Size.bottomSpacerLegacyHeight) - } else if AutofillViews.isIPad(verticalSizeClass, horizontalSizeClass) { - AutofillViews.LegacySpacerView(height: Const.Size.bottomSpacerHeightIPad, - legacyHeight: orientation == .portrait ? Const.Size.bottomSpacerHeightIPad - : Const.Size.bottomSpacerLegacyHeightIPad) - } else { - AutofillViews.LegacySpacerView(height: Const.Size.bottomSpacerHeight, - legacyHeight: Const.Size.bottomSpacerLegacyHeightLandscape) - } - } - } - @ViewBuilder private var contentView: some View { switch layoutType { @@ -198,17 +241,18 @@ private enum Const { static let closeButtonOffsetPortrait: CGFloat = 44.0 static let closeButtonOffsetPortraitSmallFrame: CGFloat = 16.0 static let topPadding: CGFloat = 56.0 - static let headlineTopPadding: CGFloat = 24.0 - static let ios15scrollOffset: CGFloat = 80.0 - static let contentSpacerHeight: CGFloat = 24.0 - static let contentSpacerHeightIPad: CGFloat = 34.0 - static let contentSpacerHeightLandscape: CGFloat = 44.0 + static let contentSpacing: CGFloat = 24.0 + static let headlineToContentSpacing: CGFloat = 8.0 static let ctaVerticalSpacing: CGFloat = 8.0 - static let bottomSpacerHeight: CGFloat = 12.0 - static let bottomSpacerHeightIPad: CGFloat = 24.0 - static let bottomSpacerLegacyHeight: CGFloat = 16.0 - static let bottomSpacerLegacyHeightIPad: CGFloat = 64.0 - static let bottomSpacerLegacyHeightLandscape: CGFloat = 44.0 + static let bodyBottomPadding: CGFloat = 24.0 + static let featureListItemIconGap: CGFloat = 8.0 + static let featuresListItemImageWidthHeight: CGFloat = 24.0 + static let featuresListItemHorizontalSpacing: CGFloat = 12.0 + static let featuresListItemVerticalSpacing: CGFloat = 2.0 + static let featuresListVerticalSpacing: CGFloat = 12.0 + static let featuresListPadding: CGFloat = 16.0 + static let featuresListTopPadding: CGFloat = 12.0 + static let featuresListBorderCornerRadius: CGFloat = 8.0 } } diff --git a/DuckDuckGo/SaveLoginViewController.swift b/DuckDuckGo/SaveLoginViewController.swift index aee5e5339f..610e8bb0fb 100644 --- a/DuckDuckGo/SaveLoginViewController.swift +++ b/DuckDuckGo/SaveLoginViewController.swift @@ -27,8 +27,7 @@ protocol SaveLoginViewControllerDelegate: AnyObject { func saveLoginViewController(_ viewController: SaveLoginViewController, didUpdateCredentials credentials: SecureVaultModels.WebsiteCredentials) func saveLoginViewControllerDidCancel(_ viewController: SaveLoginViewController) func saveLoginViewController(_ viewController: SaveLoginViewController, didRequestNeverPromptForWebsite domain: String) - func saveLoginViewController(_ viewController: SaveLoginViewController, - didRequestPresentConfirmKeepUsingAlertController alertController: UIAlertController) + func saveLoginViewControllerConfirmKeepUsing(_ viewController: SaveLoginViewController) } class SaveLoginViewController: UIViewController { @@ -71,7 +70,9 @@ class SaveLoginViewController: UIViewController { return } switch viewModel.layoutType { - case .newUser, .saveLogin: + case .newUser: + Pixel.fire(pixel: .autofillLoginsSaveLoginOnboardingModalDismissed) + case .saveLogin: Pixel.fire(pixel: .autofillLoginsSaveLoginModalDismissed) case .savePassword: Pixel.fire(pixel: .autofillLoginsSavePasswordModalDismissed) @@ -95,7 +96,9 @@ class SaveLoginViewController: UIViewController { installChildViewController(controller) switch saveViewModel.layoutType { - case .newUser, .saveLogin: + case .newUser: + Pixel.fire(pixel: .autofillLoginsSaveLoginOnboardingModalDisplayed) + case .saveLogin: Pixel.fire(pixel: .autofillLoginsSaveLoginModalDisplayed) case .savePassword: Pixel.fire(pixel: .autofillLoginsSavePasswordModalDisplayed) @@ -111,7 +114,9 @@ extension SaveLoginViewController: SaveLoginViewModelDelegate { func saveLoginViewModelDidSave(_ viewModel: SaveLoginViewModel) { switch viewModel.layoutType { case .saveLogin, .savePassword, .newUser: - if viewModel.layoutType == .savePassword { + if case .newUser = viewModel.layoutType { + Pixel.fire(pixel: .autofillLoginsSaveLoginOnboardingModalConfirmed) + } else if case .savePassword = viewModel.layoutType { Pixel.fire(pixel: .autofillLoginsSavePasswordModalConfirmed) } else { Pixel.fire(pixel: .autofillLoginsSaveLoginModalConfirmed) @@ -132,44 +137,16 @@ extension SaveLoginViewController: SaveLoginViewModelDelegate { } func saveLoginViewModelNeverPrompt(_ viewModel: SaveLoginViewModel) { - Pixel.fire(pixel: .autofillLoginsSaveLoginModalExcludeSiteConfirmed) + if case .newUser = viewModel.layoutType { + Pixel.fire(pixel: .autofillLoginsSaveLoginOnboardingModalExcludeSiteConfirmed) + } else { + Pixel.fire(pixel: .autofillLoginsSaveLoginModalExcludeSiteConfirmed) + } delegate?.saveLoginViewController(self, didRequestNeverPromptForWebsite: viewModel.accountDomain) } - func saveLoginViewModelConfirmKeepUsing(_ viewModel: SaveLoginViewModel, isAlreadyDismissed: Bool) { - - let isSelfPresentingAlert = !isAlreadyDismissed - - let alertController = UIAlertController(title: UserText.autofillKeepEnabledAlertTitle, - message: UserText.autofillKeepEnabledAlertMessage, - preferredStyle: .alert) - - let disableAction = UIAlertAction(title: UserText.autofillKeepEnabledAlertDisableAction, style: .cancel) { _ in - Pixel.fire(pixel: .autofillLoginsFillLoginInlineDisablePromptAutofillDisabled) - if isSelfPresentingAlert { - self.delegate?.saveLoginViewControllerDidCancel(self) - } - AppDependencyProvider.shared.appSettings.autofillCredentialsEnabled = false - } - - let keepUsingAction = UIAlertAction(title: UserText.autofillKeepEnabledAlertKeepUsingAction, style: .default) { _ in - Pixel.fire(pixel: .autofillLoginsFillLoginInlineDisablePromptAutofillKept) - if isSelfPresentingAlert { - self.delegate?.saveLoginViewControllerDidCancel(self) - } - } - - alertController.addAction(disableAction) - alertController.addAction(keepUsingAction) - - alertController.preferredAction = keepUsingAction - - if isAlreadyDismissed { - delegate?.saveLoginViewController(self, didRequestPresentConfirmKeepUsingAlertController: alertController) - } else { - Pixel.fire(pixel: .autofillLoginsFillLoginInlineDisablePromptShown) - present(alertController, animated: true) - } + func saveLoginViewModelConfirmKeepUsing(_ viewModel: SaveLoginViewModel) { + delegate?.saveLoginViewControllerConfirmKeepUsing(self) } func saveLoginViewModelDidResizeContent(_ viewModel: SaveLoginViewModel, contentHeight: CGFloat) { diff --git a/DuckDuckGo/SaveLoginViewModel.swift b/DuckDuckGo/SaveLoginViewModel.swift index 1586627994..d8adba63dc 100644 --- a/DuckDuckGo/SaveLoginViewModel.swift +++ b/DuckDuckGo/SaveLoginViewModel.swift @@ -20,12 +20,13 @@ import UIKit import BrowserServicesKit import Core +import LocalAuthentication protocol SaveLoginViewModelDelegate: AnyObject { func saveLoginViewModelDidSave(_ viewModel: SaveLoginViewModel) func saveLoginViewModelDidCancel(_ viewModel: SaveLoginViewModel) func saveLoginViewModelNeverPrompt(_ viewModel: SaveLoginViewModel) - func saveLoginViewModelConfirmKeepUsing(_ viewModel: SaveLoginViewModel, isAlreadyDismissed: Bool) + func saveLoginViewModelConfirmKeepUsing(_ viewModel: SaveLoginViewModel) func saveLoginViewModelDidResizeContent(_ viewModel: SaveLoginViewModel, contentHeight: CGFloat) } @@ -54,7 +55,8 @@ final class SaveLoginViewModel: ObservableObject { private let maximumPasswordDisplayCount = 40 private let credentialManager: SaveAutofillLoginManagerProtocol private let appSettings: AppSettings - + private let biometryType: LABiometryType + private var dismissButtonWasPressed = false var didSave = false @@ -98,6 +100,21 @@ final class SaveLoginViewModel: ObservableObject { credentialManager.username } + var secureStorageDescription: String { + let biometryString: String + + switch biometryType { + case .touchID: + biometryString = UserText.autofillOnboardingKeyFeaturesSecureStorageDescriptionParameterTouchID + case .faceID: + biometryString = UserText.autofillOnboardingKeyFeaturesSecureStorageDescriptionParameterFaceID + default: + biometryString = UserText.autofillOnboardingKeyFeaturesSecureStorageDescriptionParameterPasscode + } + + return UserText.autofillOnboardingKeyFeaturesSecureStorageDescription(biometryString: biometryString) + } + var usernameTruncated: String { AutofillInterfaceEmailTruncator.truncateEmail(credentialManager.username, maxLength: 36) } @@ -128,11 +145,16 @@ final class SaveLoginViewModel: ObservableObject { private var attributedLayoutType: SaveLoginView.LayoutType? - internal init(credentialManager: SaveAutofillLoginManagerProtocol, appSettings: AppSettings, layoutType: SaveLoginView.LayoutType? = nil, domainLastShownOn: String? = nil) { + internal init(credentialManager: SaveAutofillLoginManagerProtocol, + appSettings: AppSettings, + layoutType: SaveLoginView.LayoutType? = nil, + domainLastShownOn: String? = nil, + biometryType: LABiometryType = LAContext().biometryType) { self.credentialManager = credentialManager self.appSettings = appSettings self.attributedLayoutType = layoutType self.domainLastShownOn = domainLastShownOn + self.biometryType = biometryType } private func updateRejectionCountIfNeeded() { @@ -143,7 +165,7 @@ final class SaveLoginViewModel: ObservableObject { autofillSaveModalRejectionCount += 1 } - private func shouldShowAutofillKeepUsingConfirmation() -> Bool { + private func shouldShowDisableAutofillPrompt() -> Bool { if autofillSaveModalDisablePromptShown || !autofillFirstTimeUser { return false } @@ -152,14 +174,10 @@ final class SaveLoginViewModel: ObservableObject { private func cancel() { updateRejectionCountIfNeeded() - if shouldShowAutofillKeepUsingConfirmation() { - delegate?.saveLoginViewModelConfirmKeepUsing(self, isAlreadyDismissed: !dismissButtonWasPressed) - autofillSaveModalDisablePromptShown = true - } else { - delegate?.saveLoginViewModelDidCancel(self) - } + delegate?.saveLoginViewModelDidCancel(self) + showDisableAutofillPromptIfNeeded() } - + func cancelButtonPressed() { dismissButtonWasPressed = true cancel() @@ -184,7 +202,16 @@ final class SaveLoginViewModel: ObservableObject { func neverPrompt() { didSave = true - autofillFirstTimeUser = false + updateRejectionCountIfNeeded() delegate?.saveLoginViewModelNeverPrompt(self) + showDisableAutofillPromptIfNeeded() + } + + private func showDisableAutofillPromptIfNeeded() { + if shouldShowDisableAutofillPrompt() { + delegate?.saveLoginViewModelConfirmKeepUsing(self) + autofillSaveModalDisablePromptShown = true + autofillFirstTimeUser = false + } } } diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 92327ec970..8275e7d1e2 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -2841,10 +2841,20 @@ extension TabViewController: SaveLoginViewControllerDelegate { } } - func saveLoginViewController(_ viewController: SaveLoginViewController, - didRequestPresentConfirmKeepUsingAlertController alertController: UIAlertController) { - Pixel.fire(pixel: .autofillLoginsFillLoginInlineDisablePromptShown) - present(alertController, animated: true) + func saveLoginViewControllerConfirmKeepUsing(_ viewController: SaveLoginViewController) { + Pixel.fire(pixel: .autofillLoginsFillLoginInlineDisableSnackbarShown) + DispatchQueue.main.async { + let addressBarBottom = self.appSettings.currentAddressBarPosition.isBottom + ActionMessageView.present(message: UserText.autofillDisablePromptMessage, + actionTitle: UserText.autofillDisablePromptAction, + presentationLocation: .withBottomBar(andAddressBarBottom: addressBarBottom), + duration: 4.0, + onAction: { [weak self] in + Pixel.fire(pixel: .autofillLoginsFillLoginInlineDisableSnackbarOpenSettings) + guard let mainVC = self?.view.window?.rootViewController as? MainViewController else { return } + mainVC.launchAutofillLogins(source: .saveLoginDisablePrompt) + }) + } } } diff --git a/DuckDuckGo/UserText.swift b/DuckDuckGo/UserText.swift index 21d50699ba..1bb196c82b 100644 --- a/DuckDuckGo/UserText.swift +++ b/DuckDuckGo/UserText.swift @@ -391,20 +391,34 @@ public struct UserText { public static let emptyDownloads = NSLocalizedString("downloads.downloads-list.empty", value: "No files downloaded yet", comment: "Empty downloads list placholder") - public static let autofillSaveLoginTitleNewUser = NSLocalizedString("autofill.save-login.new-user.title", value: "Do you want DuckDuckGo to save your password?", comment: "Title displayed on modal asking for the user to save the login for the first time") - public static let autofillSaveLoginTitle = NSLocalizedString("autofill.save-login.title", value: "Save Password?", comment: "Title displayed on modal asking for the user to save the login") + public static let autofillSaveLoginTitleNewUser = NSLocalizedString("autofill.save-login.new-user.title", value: "Save this password?", comment: "Title displayed on modal asking for the user to save the login for the first time") + public static let autofillSaveLoginTitle = NSLocalizedString("autofill.save-login.title", value: "Save password?", comment: "Title displayed on modal asking for the user to save the login") public static let autofillUpdateUsernameTitle = NSLocalizedString("autofill.update-usernamr.title", value: "Update username?", comment: "Title displayed on modal asking for the user to update the username") - public static let autofillSaveLoginMessageNewUser = NSLocalizedString("autofill.save-login.new-user.message", value: "Passwords are stored securely on your device.", comment: "Message displayed on modal asking for the user to save the login for the first time") - public static let autofillSaveLoginNotNowCTA = NSLocalizedString("autofill.save-login.not-now.CTA", value: "Don’t Save", comment: "Cancel CTA displayed on modal asking for the user to save the login") - public static let autofillSaveLoginNeverPromptCTA = NSLocalizedString("autofill.save-login.never-prompt.CTA", value:"Never Ask for This Site", comment: "CTA displayed on modal asking if the user never wants to be prompted to save a login for this website agin") - + public static let autofillSaveLoginMessageNewUser = NSLocalizedString("autofill.save-login.new-user.message", value: "DuckDuckGo Passwords & Autofill stores passwords securely on your device.", comment: "Message displayed on modal asking for the user to save the login for the first time") + public static let autofillSaveLoginNeverPromptCTA = NSLocalizedString("autofill.save-login.never-prompt.CTA", value: "Never Ask for This Site", comment: "CTA displayed on modal asking if the user never wants to be prompted to save a login for this website agin") + public static func autofillUpdatePassword(for title: String) -> String { let message = NSLocalizedString("autofill.update-password.title", value: "Update password for\n%@?", comment: "Title displayed on modal asking for the user to update the password") return message.format(arguments: title) } public static let autoUpdatePasswordMessage = NSLocalizedString("autofill.update-password.message", value: "DuckDuckGo will update this stored password on your device.", comment: "Message displayed on modal asking for the user to update the password") - + + public static let autofillOnboardingKeyFeaturesTitle = NSLocalizedString("autofill.onboarding.key-features.title", value: "Key Features", comment: "Title of autofill onboarding prompt's features list") + public static let autofillOnboardingKeyFeaturesSignInsTitle = NSLocalizedString("autofill.onboarding.key-features.sign-ins.title", value: "Seamless sign-ins", comment: "Title of autofill onboarding prompt's sign-in feature") + public static let autofillOnboardingKeyFeaturesSignInsDescription = NSLocalizedString("autofill.onboarding.key-features.sign-ins.description", value: "No need to remember login info.", comment: "Description of autofill onboarding prompt's sign-in feature") + public static let autofillOnboardingKeyFeaturesSecureStorageTitle = NSLocalizedString("autofill.onboarding.key-features.secure-storage.title", value: "Secure storage", comment: "Title of autofill onboarding prompt's secure storage feature") + static func autofillOnboardingKeyFeaturesSecureStorageDescription(biometryString: String) -> String { + let localized = NSLocalizedString("autofill.onboarding.key-features.secure-storage.description", value: "Passwords are encrypted, stored on device, and locked with %@.", comment: "Description of autofill onboarding prompt's secure storage feature with a string describing the available biometry + passcode as a parameter") + return String(format: localized, biometryString) + } + public static let autofillOnboardingKeyFeaturesSecureStorageDescriptionParameterFaceID = NSLocalizedString("autofill.onboarding.key-features.secure-storage.description.parameter.face-id", value: "Face ID or passcode", comment: "Parameter for the description of autofill onboarding prompt's secure storage feature describing Face ID biometry + passcode") + public static let autofillOnboardingKeyFeaturesSecureStorageDescriptionParameterTouchID = NSLocalizedString("autofill.onboarding.key-features.secure-storage.description.parameter.touch-id", value: "Touch ID or passcode", comment: "Parameter for the description of autofill onboarding prompt's secure storage feature describing Touch ID biometry + passcode") + public static let autofillOnboardingKeyFeaturesSecureStorageDescriptionParameterPasscode = NSLocalizedString("autofill.onboarding.key-features.secure-storage.description.parameter.passcode", value: "passcode", comment: "Parameter for the description of autofill onboarding prompt's secure storage feature describing passcode only if no biometry are available") + public static let autofillOnboardingKeyFeaturesSecureStorageDescription = NSLocalizedString("autofill.onboarding.key-features.secure-storage.description", value: "Passwords are encrypted, stored on device, and locked with Face ID or passcode.", comment: "Description of autofill onboarding prompt's secure storage feature") + public static let autofillOnboardingKeyFeaturesSyncTitle = NSLocalizedString("autofill.onboarding.key-features.sync.title", value: "Sync between devices", comment: "Title of autofill onboarding prompt's sync feature") + public static let autofillOnboardingKeyFeaturesSyncDescription = NSLocalizedString("autofill.onboarding.key-features.sync.description", value: "End-to-end encrypted and easy to set up when you’re ready.", comment: "Description of autofill onboarding prompt's sync feature") + public static let autofillSavePasswordSaveCTA = NSLocalizedString("autofill.save-password.save.CTA", value: "Save Password", comment: "Confirm CTA displayed on modal asking for the user to save the password") public static let autofillUpdatePasswordSaveCTA = NSLocalizedString("autofill.update-password.save.CTA", value: "Update Password", comment: "Confirm CTA displayed on modal asking for the user to update the password") public static let autofillShowPassword = NSLocalizedString("autofill.show-password", value: "Show Password", comment: "Accessibility title for a Show Password button displaying actial password instead of *****") @@ -414,11 +428,11 @@ public struct UserText { public static let autofillLoginUpdatedToastMessage = NSLocalizedString("autofill.login-updated.toast", value: "Password updated", comment: "Message displayed after updating an autofill login") public static let autofillLoginSaveToastActionButton = NSLocalizedString("autofill.login-save-action-button.toast", value: "View", comment: "Button displayed after saving/updating an autofill login that takes the user to the saved login") - public static let autofillKeepEnabledAlertTitle = NSLocalizedString("autofill.keep-enabled.alert.title", value: "Do you want to keep saving passwords?", comment: "Title for alert when asking the user if they want to keep using autofill") - public static let autofillKeepEnabledAlertMessage = NSLocalizedString("autofill.keep-enabled.alert.message", value: "You can disable this at any time in Settings.", comment: "Message for alert when asking the user if they want to keep using autofill") - public static let autofillKeepEnabledAlertKeepUsingAction = NSLocalizedString("autofill.keep-enabled.alert.keep-using", value: "Keep Saving", comment: "Confirm action for alert when asking the user if they want to keep using autofill") public static let autofillKeepEnabledAlertDisableAction = NSLocalizedString("autofill.keep-enabled.alert.disable", value: "Disable", comment: "Disable action for alert when asking the user if they want to keep using autofill") + public static let autofillDisablePromptMessage = NSLocalizedString("autofill.disable.prompt.message", value: "You can turn off password saving anytime.", comment: "Message for informing user that they can disable autofill in Settings") + public static let autofillDisablePromptAction = NSLocalizedString("autofill.disable.prompt.action.open-settings", value: "Open Settings", comment: "Open Settings action for disabling autofill in Settings") + public static let actionAutofillLogins = NSLocalizedString("action.title.autofill.logins", value: "Passwords", comment: "Autofill Logins menu item opening the login list") // MARK: - Waitlist diff --git a/DuckDuckGo/en.lproj/Localizable.strings b/DuckDuckGo/en.lproj/Localizable.strings index b2fb25888e..d3a756fef8 100644 --- a/DuckDuckGo/en.lproj/Localizable.strings +++ b/DuckDuckGo/en.lproj/Localizable.strings @@ -271,6 +271,12 @@ /* Do not translate - stringsdict entry */ "autofill.delete.all.passwords.sync.confirmation.body" = "autofill.delete.all.passwords.sync.confirmation.body"; +/* Open Settings action for disabling autofill in Settings */ +"autofill.disable.prompt.action.open-settings" = "Open Settings"; + +/* Message for informing user that they can disable autofill in Settings */ +"autofill.disable.prompt.message" = "You can turn off password saving anytime."; + /* Text link to email protection website */ "autofill.enable.email.protection" = "Enable Email Protection"; @@ -316,15 +322,6 @@ /* Disable action for alert when asking the user if they want to keep using autofill */ "autofill.keep-enabled.alert.disable" = "Disable"; -/* Confirm action for alert when asking the user if they want to keep using autofill */ -"autofill.keep-enabled.alert.keep-using" = "Keep Saving"; - -/* Message for alert when asking the user if they want to keep using autofill */ -"autofill.keep-enabled.alert.message" = "You can disable this at any time in Settings."; - -/* Title for alert when asking the user if they want to keep using autofill */ -"autofill.keep-enabled.alert.title" = "Do you want to keep saving passwords?"; - /* Button displayed after saving/updating an autofill login that takes the user to the saved login */ "autofill.login-save-action-button.toast" = "View"; @@ -505,6 +502,37 @@ /* Do not translate - stringsdict entry */ "autofill.number.of.passwords" = "autofill.number.of.passwords"; +/* Description of autofill onboarding prompt's secure storage feature + Description of autofill onboarding prompt's secure storage feature with a string describing the available biometry + passcode as a parameter */ +"autofill.onboarding.key-features.secure-storage.description" = "Passwords are encrypted, stored on device, and locked with %@."; + +/* Parameter for the description of autofill onboarding prompt's secure storage feature describing Face ID biometry + passcode */ +"autofill.onboarding.key-features.secure-storage.description.parameter.face-id" = "Face ID or passcode"; + +/* Parameter for the description of autofill onboarding prompt's secure storage feature describing passcode only if no biometry are available */ +"autofill.onboarding.key-features.secure-storage.description.parameter.passcode" = "passcode"; + +/* Parameter for the description of autofill onboarding prompt's secure storage feature describing Touch ID biometry + passcode */ +"autofill.onboarding.key-features.secure-storage.description.parameter.touch-id" = "Touch ID or passcode"; + +/* Title of autofill onboarding prompt's secure storage feature */ +"autofill.onboarding.key-features.secure-storage.title" = "Secure storage"; + +/* Description of autofill onboarding prompt's sign-in feature */ +"autofill.onboarding.key-features.sign-ins.description" = "No need to remember login info."; + +/* Title of autofill onboarding prompt's sign-in feature */ +"autofill.onboarding.key-features.sign-ins.title" = "Seamless sign-ins"; + +/* Description of autofill onboarding prompt's sync feature */ +"autofill.onboarding.key-features.sync.description" = "End-to-end encrypted and easy to set up when you’re ready."; + +/* Title of autofill onboarding prompt's sync feature */ +"autofill.onboarding.key-features.sync.title" = "Sync between devices"; + +/* Title of autofill onboarding prompt's features list */ +"autofill.onboarding.key-features.title" = "Key Features"; + /* Subtitle for prompt to use suggested strong password for creating a login */ "autofill.password-generation-prompt.subtitle" = "Passwords are stored securely on your device."; @@ -551,16 +579,13 @@ "autofill.save-login.never-prompt.CTA" = "Never Ask for This Site"; /* Message displayed on modal asking for the user to save the login for the first time */ -"autofill.save-login.new-user.message" = "Passwords are stored securely on your device."; +"autofill.save-login.new-user.message" = "DuckDuckGo Passwords & Autofill stores passwords securely on your device."; /* Title displayed on modal asking for the user to save the login for the first time */ -"autofill.save-login.new-user.title" = "Do you want DuckDuckGo to save your password?"; - -/* Cancel CTA displayed on modal asking for the user to save the login */ -"autofill.save-login.not-now.CTA" = "Don’t Save"; +"autofill.save-login.new-user.title" = "Save this password?"; /* Title displayed on modal asking for the user to save the login */ -"autofill.save-login.title" = "Save Password?"; +"autofill.save-login.title" = "Save password?"; /* Confirm CTA displayed on modal asking for the user to save the password */ "autofill.save-password.save.CTA" = "Save Password"; diff --git a/DuckDuckGoTests/AppUserDefaultsTests.swift b/DuckDuckGoTests/AppUserDefaultsTests.swift index a523960d40..1fdc34fa43 100644 --- a/DuckDuckGoTests/AppUserDefaultsTests.swift +++ b/DuckDuckGoTests/AppUserDefaultsTests.swift @@ -144,7 +144,7 @@ class AppUserDefaultsTests: XCTestCase { appUserDefaults.autofillCredentialsHasBeenEnabledAutomaticallyIfNecessary = false appUserDefaults.autofillCredentialsSavePromptShowAtLeastOnce = false appUserDefaults.autofillIsNewInstallForOnByDefault = true - let featureFlagger = createFeatureFlagger(withSubfeatureEnabled: true) + let featureFlagger = createFeatureFlagger(withFeatureFlagEnabled: .autofillOnByDefault) appUserDefaults.featureFlagger = featureFlagger XCTAssertTrue(appUserDefaults.autofillCredentialsEnabled) @@ -166,6 +166,28 @@ class AppUserDefaultsTests: XCTestCase { XCTAssertEqual(appUserDefaults.autofillCredentialsEnabled, false) } + func testWhenAutofillCredentialsIsDisabledAndHasNotBeenTurnedOnAutomaticallyBeforeAndPromptHasNotBeenSeenAndAllUsersFeatureFlagEnabledThenDefaultAutofillStateIsTrue() { + let appUserDefaults = AppUserDefaults(groupName: testGroupName) + appUserDefaults.autofillCredentialsHasBeenEnabledAutomaticallyIfNecessary = false + appUserDefaults.autofillCredentialsSavePromptShowAtLeastOnce = false + appUserDefaults.autofillIsNewInstallForOnByDefault = false + let featureFlagger = createFeatureFlagger(withFeatureFlagEnabled: .autofillOnForExistingUsers) + appUserDefaults.featureFlagger = featureFlagger + + XCTAssertTrue(appUserDefaults.autofillCredentialsEnabled) + } + + func testWhenAutofillCredentialsIsDisabledAndHasNotBeenTurnedOnAutomaticallyBeforeAndPromptHasBeenSeenAndAllUsersFeatureFlagEnabledThenDefaultAutofillStateIsFalse() { + let appUserDefaults = AppUserDefaults(groupName: testGroupName) + appUserDefaults.autofillCredentialsHasBeenEnabledAutomaticallyIfNecessary = false + appUserDefaults.autofillCredentialsSavePromptShowAtLeastOnce = true + appUserDefaults.autofillIsNewInstallForOnByDefault = false + let featureFlagger = createFeatureFlagger(withFeatureFlagEnabled: .autofillOnForExistingUsers) + appUserDefaults.featureFlagger = featureFlagger + + XCTAssertFalse(appUserDefaults.autofillCredentialsEnabled) + } + func testDefaultAutoconsentStateIsFalse_WhenNotInRollout() { let appUserDefaults = AppUserDefaults(groupName: testGroupName) appUserDefaults.featureFlagger = createFeatureFlagger(withSubfeatureEnabled: false) @@ -174,7 +196,7 @@ class AppUserDefaultsTests: XCTestCase { func testDefaultAutoconsentStateIsTrue_WhenInRollout() { let appUserDefaults = AppUserDefaults(groupName: testGroupName) - appUserDefaults.featureFlagger = createFeatureFlagger(withSubfeatureEnabled: true) + appUserDefaults.featureFlagger = createFeatureFlagger(withFeatureFlagEnabled: .autoconsentOnByDefault) XCTAssertTrue(appUserDefaults.autoconsentEnabled) } @@ -183,7 +205,7 @@ class AppUserDefaultsTests: XCTestCase { // When setting disabled by user and rollout enabled appUserDefaults.autoconsentEnabled = false - appUserDefaults.featureFlagger = createFeatureFlagger(withSubfeatureEnabled: true) + appUserDefaults.featureFlagger = createFeatureFlagger(withFeatureFlagEnabled: .autoconsentOnByDefault) XCTAssertFalse(appUserDefaults.autoconsentEnabled) @@ -212,5 +234,10 @@ class AppUserDefaultsTests: XCTestCase { return mockPrivacyConfiguration } - + + private func createFeatureFlagger(withFeatureFlagEnabled featureFlag: FeatureFlag) -> FeatureFlagger { + let mockFeatureFlagger = MockFeatureFlagger() + mockFeatureFlagger.enabledFeatureFlags.append(featureFlag) + return mockFeatureFlagger + } } diff --git a/DuckDuckGoTests/AutofillLoginListViewModelTests.swift b/DuckDuckGoTests/AutofillLoginListViewModelTests.swift index 2c164b931b..b32d8bcbe9 100644 --- a/DuckDuckGoTests/AutofillLoginListViewModelTests.swift +++ b/DuckDuckGoTests/AutofillLoginListViewModelTests.swift @@ -386,7 +386,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configDisabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) XCTAssertFalse(model.shouldShowBreakageReporter()) } @@ -405,7 +405,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configEnabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) XCTAssertFalse(model.shouldShowBreakageReporter()) } @@ -424,7 +424,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configEnabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) XCTAssertFalse(model.shouldShowBreakageReporter()) } @@ -443,7 +443,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configEnabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) XCTAssertFalse(model.shouldShowBreakageReporter()) } @@ -463,7 +463,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configEnabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) let identifier = currentTabUrl!.privacySafeDomainIdentifier model.breakageReporter.persistencyManager.set(value: "2024-07-16", forKey: identifier!, expiryDate: Date()) @@ -486,7 +486,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configEnabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) XCTAssertTrue(model.shouldShowBreakageReporter()) } @@ -506,7 +506,7 @@ class AutofillLoginListViewModelTests: XCTestCase { currentTabUid: "1", autofillNeverPromptWebsitesManager: manager, privacyConfig: makePrivacyConfig(from: configEnabled), - breakageReporterKeyValueStoring: MockKeyValueStore()) + keyValueStore: MockKeyValueStore()) let identifier = currentTabUrl!.privacySafeDomainIdentifier model.breakageReporter.persistencyManager.set(value: "2024-01-01", forKey: identifier!, expiryDate: Date()) diff --git a/DuckDuckGoTests/MockFeatureFlagger.swift b/DuckDuckGoTests/MockFeatureFlagger.swift new file mode 100644 index 0000000000..1d2c8d642b --- /dev/null +++ b/DuckDuckGoTests/MockFeatureFlagger.swift @@ -0,0 +1,36 @@ +// +// MockFeatureFlagger.swift +// DuckDuckGo +// +// Copyright © 2024 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 BrowserServicesKit +import Core + +final class MockFeatureFlagger: FeatureFlagger { + var enabledFeatureFlags: [FeatureFlag] = [] + var enabledFeatureFlag: FeatureFlag? + + func isFeatureOn(forProvider provider: F) -> Bool where F: BrowserServicesKit.FeatureFlagSourceProviding { + guard let flag = provider as? FeatureFlag else { + return false + } + guard enabledFeatureFlags.contains(flag) else { + return false + } + return true + } +} diff --git a/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift b/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift index e9458fe215..65597fd1a0 100644 --- a/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift +++ b/DuckDuckGoTests/Subscription/PrivacyProDataReporterTests.swift @@ -225,9 +225,3 @@ class MockCalendar { date } } - -struct MockFeatureFlagger: FeatureFlagger { - func isFeatureOn(forProvider: F) -> Bool where F: FeatureFlagSourceProviding { - false - } -} From 7cc31e928bbbcc3779bafbe4626566076f1bede8 Mon Sep 17 00:00:00 2001 From: Fernando Bunn Date: Fri, 9 Aug 2024 22:42:08 +0100 Subject: [PATCH 17/17] DuckPlayer contingency messages pixels (#3220) Task/Issue URL: https://app.asana.com/0/1204167627774280/1208023423226059/f **Description**: Add pixels for contingency message on duck player --- Core/PixelEvent.swift | 4 ++++ DuckDuckGo/SettingsDuckPlayerView.swift | 9 +++++++++ DuckDuckGo/SettingsViewModel.swift | 1 + 3 files changed, 14 insertions(+) diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index 0239f849ef..4b87409714 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -748,6 +748,8 @@ extension Pixel { case duckPlayerSettingNeverSettings case duckPlayerSettingBackToDefault case duckPlayerWatchOnYoutube + case duckPlayerContingencySettingsDisplayed + case duckPlayerContingencyLearnMoreClicked } } @@ -1484,6 +1486,8 @@ extension Pixel.Event { case .duckPlayerSettingNeverSettings: return "m_duck-player_setting_never_settings" case .duckPlayerSettingBackToDefault: return "m_duck-player_setting_back-to-default" case .duckPlayerWatchOnYoutube: return "m_duck-player_watch_on_youtube" + case .duckPlayerContingencySettingsDisplayed: return "duckplayer_ios_contingency_settings-displayed" + case .duckPlayerContingencyLearnMoreClicked: return "duckplayer_ios_contingency_learn-more-clicked" } } } diff --git a/DuckDuckGo/SettingsDuckPlayerView.swift b/DuckDuckGo/SettingsDuckPlayerView.swift index 7a19c3fd5e..d9ef668ad1 100644 --- a/DuckDuckGo/SettingsDuckPlayerView.swift +++ b/DuckDuckGo/SettingsDuckPlayerView.swift @@ -25,6 +25,10 @@ import DuckUI struct SettingsDuckPlayerView: View { private static let learnMoreURL = URL(string: "https://duckduckgo.com/duckduckgo-help-pages/duck-player/")! + /// The ContingencyMessageView may be redrawn multiple times in the onAppear method if the user scrolls it outside the list bounds. + /// This property ensures that the associated action is only triggered once per viewing session, preventing redundant executions. + @State private var hasFiredSettingsDisplayedPixel = false + @EnvironmentObject var viewModel: SettingsViewModel var body: some View { List { @@ -32,6 +36,11 @@ struct SettingsDuckPlayerView: View { Section { ContingencyMessageView { viewModel.openDuckPlayerContingencyMessageSite() + }.onAppear { + if !hasFiredSettingsDisplayedPixel { + Pixel.fire(pixel: .duckPlayerContingencySettingsDisplayed) + hasFiredSettingsDisplayedPixel = true + } } } } diff --git a/DuckDuckGo/SettingsViewModel.swift b/DuckDuckGo/SettingsViewModel.swift index 4c9d00e35c..93b4ecdb33 100644 --- a/DuckDuckGo/SettingsViewModel.swift +++ b/DuckDuckGo/SettingsViewModel.swift @@ -548,6 +548,7 @@ extension SettingsViewModel { func openDuckPlayerContingencyMessageSite() { guard let url = duckPlayerContingencyHandler.learnMoreURL else { return } + Pixel.fire(pixel: .duckPlayerContingencyLearnMoreClicked) UIApplication.shared.open(url, options: [:], completionHandler: nil)