Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

Ship Review: VPN App Exclusions #3850

Merged
merged 13 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 16 additions & 20 deletions DuckDuckGo/Common/Localizables/UserText+NetworkProtection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,23 +55,15 @@ extension UserText {
value: "VPN Settings",
comment: "The VPN status view's 'VPN Settings' menu item for our main app. The number shown is how many Apps are excluded.")

static func vpnStatusViewExcludedAppsMenuItemTitle(_ count: Int) -> String {
let message = NSLocalizedString(
"vpn.status-view.excluded-apps.menu-item.title",
value: "Excluded Apps (%d)",
comment: "The VPN status view's 'Excluded Apps' menu item for our main app. The number shown is how many Apps are excluded.")
static let vpnStatusViewExcludedAppsMenuItemTitle = NSLocalizedString(
"vpn.status-view.excluded-apps.menu-item.title",
value: "Excluded Apps",
comment: "The VPN status view's 'Excluded Apps' menu item for our main app.")

return String(format: message, count)
}

static func vpnStatusViewExcludedDomainsMenuItemTitle(_ count: Int) -> String {
let message = NSLocalizedString(
"vpn.status-view.excluded-domains.menu-item.title",
value: "Excluded Websites (%d)",
comment: "The VPN status view's 'Excluded Websites' menu item for our main app. The number shown is how many websites are excluded.")

return String(format: message, count)
}
static let vpnStatusViewExcludedDomainsMenuItemTitle = NSLocalizedString(
"vpn.status-view.excluded-domains.menu-item.title",
value: "Excluded Websites",
comment: "The VPN status view's 'Excluded Websites' menu item for our main app.")

static let vpnStatusViewSendFeedbackMenuItemTitle = NSLocalizedString(
"vpn.status-view.send-feedback.menu-item.title",
Expand Down Expand Up @@ -210,12 +202,10 @@ extension UserText {

static let vpnLocationTitle = NSLocalizedString("vpn.location.title", value: "Location", comment: "Location section title in VPN settings")

static let vpnExclusionsTitle = NSLocalizedString("vpn.exclusions.title", value: "Exclusions", comment: "Exclusions section title in VPN settings")
static let vpnExclusionsTitle = NSLocalizedString("vpn.exclusions.title", value: "VPN Exclusions", comment: "Exclusions section title in VPN settings")

static let vpnExcludedSitesTitle = NSLocalizedString("vpn.excluded.sites.title", value: "Excluded Websites", comment: "Excluded Sites title in VPN settings")

static let vpnExcludedAppsTitle = NSLocalizedString("vpn.excluded.apps.title", value: "Excluded Apps", comment: "Excluded Apps title in VPN settings")

static let vpnGeneralTitle = NSLocalizedString("vpn.general.title", value: "General", comment: "General section title in VPN settings")

static let vpnShortcutsSettingsTitle = NSLocalizedString("vpn.shortcuts.settings.title", value: "Shortcuts", comment: "Shortcuts section title in VPN settings")
Expand All @@ -226,6 +216,12 @@ extension UserText {

static let vpnNotificationsConnectionDropsOrStatusChangesTitle = NSLocalizedString("vpn.notifications.connection.drops.or.status.changes.title", value: "VPN connection drops or status changes", comment: "Title of the VPN notification option")

// MARK: - Excluded Apps

static let vpnExcludedAppsTitle = NSLocalizedString("vpn.excluded.apps.title", value: "Excluded Apps", comment: "Excluded Apps title in VPN settings")

static let vpnExcludedAppsDescription = NSLocalizedString("vpn.excluded.apps.description", value: "Add apps that aren’t compatible with VPNs to use them without turning off the VPN.", comment: "Excluded Apps description in VPN settings")

// MARK: - Location

static let vpnLocationChangeButtonTitle = NSLocalizedString("vpn.location.change.button.title", value: "Change...", comment: "Title of the VPN location preference change button")
Expand Down Expand Up @@ -261,7 +257,7 @@ extension UserText {

// MARK: - Excluded Apps

static let vpnExcludedAppsAddApp = NSLocalizedString("vpn.excluded.apps.add.app", value: "Add Application", comment: "Add Application button for the excluded apps view")
static let vpnExcludedAppsAddApp = NSLocalizedString("vpn.excluded.apps.add.app", value: "Browse Applications", comment: "Add Application button for the excluded apps view")

// MARK: - Excluded Domains

Expand Down
136 changes: 98 additions & 38 deletions DuckDuckGo/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -69064,55 +69064,115 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Anwendung hinzufügen"
"value" : "Anwendungen durchsuchen"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Add Application"
"value" : "Browse Applications"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Añadir aplicación"
"value" : "Explorar aplicaciones"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ajouter une application"
"value" : "Parcourir les applications"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aggiungi applicazione"
"value" : "Sfoglia applicazioni"
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Applicatie toevoegen"
"value" : "Applicaties browsen"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dodaj aplikację"
"value" : "Przeglądaj aplikacje"
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"value" : "Adicionar aplicação"
"value" : "Procurar aplicações"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Добавить приложение"
"value" : "Просмотреть приложения"
}
}
}
},
"vpn.excluded.apps.description" : {
"comment" : "Excluded Apps description in VPN settings",
"extractionState" : "extracted_with_value",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Füge Apps hinzu, die nicht mit VPNs kompatibel sind, damit du sie nutzen kannst, ohne das VPN zu deaktivieren."
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Add apps that aren’t compatible with VPNs to use them without turning off the VPN."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Añade aplicaciones que no sean compatibles con las VPN para poder usarlas sin desactivar la VPN."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ajoutez des applications qui ne sont pas compatibles avec les VPN pour les utiliser sans désactiver le VPN."
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aggiungi app che non sono compatibili con le VPN per usarle senza spegnere la VPN."
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Voeg apps toe die niet compatibel zijn met VPN's om ze te gebruiken zonder de VPN uit te schakelen."
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dodaj aplikacje, które nie są zgodne z sieciami VPN, aby móc z nich korzystać bez wyłączania sieci VPN."
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"value" : "Adiciona aplicações que não sejam compatíveis com VPNs para as utilizares sem desativares a VPN."
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Добавьте приложения, несовместимые с VPN, и вы сможете пользоваться ими, не отключая его."
}
}
}
Expand Down Expand Up @@ -69364,55 +69424,55 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ausschlüsse"
"value" : "VPN-Ausschlüsse"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Exclusions"
"value" : "VPN Exclusions"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Exclusiones"
"value" : "Exclusiones de VPN"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Exclusions"
"value" : "Exclusions VPN"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Esclusioni"
"value" : "Esclusioni VPN"
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uitsluitingen"
"value" : "VPN-uitsluitingen"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wykluczenia"
"value" : "Wykluczenia działania VPN"
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"value" : "Exclusões"
"value" : "Exclusões VPN"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Исключения"
"value" : "Исключения из VPN"
}
}
}
Expand Down Expand Up @@ -72418,121 +72478,121 @@
}
},
"vpn.status-view.excluded-apps.menu-item.title" : {
"comment" : "The VPN status view's 'Excluded Apps' menu item for our main app. The number shown is how many Apps are excluded.",
"comment" : "The VPN status view's 'Excluded Apps' menu item for our main app.",
"extractionState" : "extracted_with_value",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ausgeschlossene Apps (%d)"
"value" : "Ausgeschlossene Apps"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Excluded Apps (%d)"
"value" : "Excluded Apps"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aplicaciones excluidas (%d)"
"value" : "Aplicaciones excluidas"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Applications exclues (%d)"
"value" : "Applications exclues"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "App escluse (%d)"
"value" : "App escluse"
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uitgesloten apps (%d)"
"value" : "Uitgesloten apps"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wykluczone aplikacje (%d)"
"value" : "Wykluczone aplikacje"
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aplicações excluídas (%d)"
"value" : "Aplicações excluídas"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Исключенные приложения (%d)"
"value" : "Исключенные приложения"
}
}
}
},
"vpn.status-view.excluded-domains.menu-item.title" : {
"comment" : "The VPN status view's 'Excluded Websites' menu item for our main app. The number shown is how many websites are excluded.",
"comment" : "The VPN status view's 'Excluded Websites' menu item for our main app.",
"extractionState" : "extracted_with_value",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ausgeschlossene Websites (%d)"
"value" : "Ausgeschlossene Websites"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Excluded Websites (%d)"
"value" : "Excluded Websites"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sitios web excluidos (%d)"
"value" : "Sitios web excluidos"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sites Web exclus (%d)"
"value" : "Sites Web exclus"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Siti esclusi (%d)"
"value" : "Siti web esclusi"
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uitgesloten websites (%d)"
"value" : "Uitgesloten websites"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wykluczone witryny internetowe (%d)"
"value" : "Wykluczone witryny internetowe"
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"value" : "Websites excluídos (%d)"
"value" : "Websites excluídos"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Исключенные сайты (%d)"
"value" : "Исключенные сайты"
}
}
}
Expand Down
Loading
Loading