Commit f06079e0 authored by Davide De Rosa's avatar Davide De Rosa
Browse files

[ci-skip] Merge branch 'develop' into 'master'

QA: 2.6 features
parents 963c36e3 0b580b75
......@@ -11,6 +11,7 @@ before_script:
#- bundle install
- bundle update
#- bundle exec fastlane run ensure_git_status_clean
- echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
stages:
- test
......@@ -47,7 +48,6 @@ qa_archive:
expire_in: 1 week
only:
- develop
- /^test\//
tags:
- ios
......@@ -72,7 +72,6 @@ qa_deploy:
expire_in: 1 week
only:
- develop
- /^test\//
tags:
- ios
......
......@@ -93,6 +93,7 @@
0ECC1E421FDB45100039891D /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECC1E401FDB45100039891D /* AboutViewController.swift */; };
0ECF5C082017EBAD0047596C /* ThemeCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECF5C072017EBAD0047596C /* ThemeCode.swift */; };
0ECF5C092017EBAD0047596C /* ThemeCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECF5C072017EBAD0047596C /* ThemeCode.swift */; };
0ED66BD020A9918000333B35 /* staging.endpoint in Resources */ = {isa = PBXBuildFile; fileRef = 0ED66BCF20A9918000333B35 /* staging.endpoint */; };
0ED9841B1FC48C6000542EE6 /* Roboto-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0ED984171FC48C6000542EE6 /* Roboto-Medium.ttf */; };
0ED9841C1FC48C6000542EE6 /* Roboto-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0ED984181FC48C6000542EE6 /* Roboto-Light.ttf */; };
0ED9841D1FC48C6000542EE6 /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0ED984191FC48C6000542EE6 /* Roboto-Regular.ttf */; };
......@@ -351,6 +352,7 @@
0ECC1E3D1FDB3F2F0039891D /* RegionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegionsViewController.swift; sourceTree = "<group>"; };
0ECC1E401FDB45100039891D /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
0ECF5C072017EBAD0047596C /* ThemeCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeCode.swift; sourceTree = "<group>"; };
0ED66BCF20A9918000333B35 /* staging.endpoint */ = {isa = PBXFileReference; lastKnownFileType = text; path = staging.endpoint; sourceTree = "<group>"; };
0ED984171FC48C6000542EE6 /* Roboto-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Medium.ttf"; sourceTree = "<group>"; };
0ED984181FC48C6000542EE6 /* Roboto-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Light.ttf"; sourceTree = "<group>"; };
0ED984191FC48C6000542EE6 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Regular.ttf"; sourceTree = "<group>"; };
......@@ -636,6 +638,7 @@
children = (
0ED984161FC48C5100542EE6 /* Fonts */,
0E0786DD1EFA7EAE00F77466 /* Components.plist */,
0ED66BCF20A9918000333B35 /* staging.endpoint */,
);
path = Resources;
sourceTree = "<group>";
......@@ -1035,6 +1038,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0ED66BD020A9918000333B35 /* staging.endpoint in Resources */,
0E0715E7201CBB7100D6F666 /* Flags-dev.plist in Resources */,
0E7EC046209326E30029811E /* Localizable.strings in Resources */,
0E7EC0312093265C0029811E /* InfoPlist.strings in Resources */,
......
......@@ -83,6 +83,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = "it"
region = "IT"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
......
......@@ -26,13 +26,14 @@ struct AppConfiguration {
struct Welcome {
static func defaultPreset() -> PIAWelcomeViewController.Preset {
var preset = PIAWelcomeViewController.Preset()
preset.pages = [.login, .purchase]
guard Flags.shared.customizesWelcomePreset else {
return preset
}
preset.loginUsername = "p0000000"
preset.loginPassword = "foobarbogus"
preset.purchaseEmail = "foo@bar.com"
preset.redeemCode = "1234-1234-1234-1234"
preset.redeemEmail = "foo@bar.com"
return preset
}
}
......@@ -123,7 +124,8 @@ struct AppConfiguration {
static let accountProvider: MockAccountProvider = {
let provider = MockAccountProvider()
provider.mockIsUnauthorized = false
provider.mockSignupOutcome = .internetUnreachable
provider.mockSignupOutcome = .success
provider.mockRedeemOutcome = .success
provider.mockPlan = .trial
provider.mockIsExpiring = true
provider.mockIsRenewable = true
......
......@@ -52,6 +52,16 @@ struct AppConstants {
static let privacyURL = URL(string: "https://www.privateinternetaccess.com/pages/privacy-policy/")!
static let csEmail = "helpdesk+vpnpermissions.ios@privateinternetaccess.com"
static var stagingEndpointURL: URL? = {
guard let path = Bundle.main.path(forResource: "staging", ofType: "endpoint") else {
return nil
}
guard let content = try? String(contentsOfFile: path) else {
return nil
}
return URL(string: content.trimmingCharacters(in: .whitespacesAndNewlines))
}()
}
struct Fonts {
......
......@@ -51,6 +51,10 @@ class Bootstrapper {
Client.environment = AppConfiguration.clientEnvironment
Client.configuration.isDevelopment = Flags.shared.usesDevelopmentClient
if let stagingUrl = AppConstants.Web.stagingEndpointURL {
Client.configuration.setBaseURL(stagingUrl.absoluteString, for: .staging)
}
Client.configuration.enablesConnectivityUpdates = true
Client.configuration.enablesServerUpdates = true
Client.configuration.enablesServerPings = true
......
......@@ -312,6 +312,10 @@ class SettingsViewController: AutolayoutViewController {
let savedServer = pendingPreferences.preferredServer
pendingPreferences.reset()
pendingPreferences.preferredServer = savedServer
guard let currentOpenVPNConfiguration = pendingPreferences.vpnCustomConfiguration(for: PIATunnelProfile.vpnType) as? PIATunnelProvider.Configuration else {
fatalError("No default VPN custom configuration provided for PIA protocol")
}
pendingOpenVPNConfiguration = currentOpenVPNConfiguration.builder()
transitionTheme(to: .light)
......@@ -458,14 +462,14 @@ class SettingsViewController: AutolayoutViewController {
}
if Flags.shared.enablesMACESetting {
rowsBySection[.applicationSettings] = [
.automaticReconnection,
.darkTheme,
.automaticReconnection,
.mace
]
} else {
rowsBySection[.applicationSettings] = [
.automaticReconnection,
.darkTheme
.darkTheme,
.automaticReconnection
]
}
if !Flags.shared.enablesContentBlockerSetting {
......@@ -582,10 +586,9 @@ extension SettingsViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
switch visibleSections[section] {
case .applicationSettings:
var footer: [String] = []
if !pendingPreferences.isPersistentConnection {
footer.append(L10n.Settings.ApplicationSettings.Persistent.Footer.disabled)
}
var footer: [String] = [
L10n.Settings.ApplicationSettings.Persistent.Footer.disabled
]
if Flags.shared.enablesMACESetting {
footer.append(L10n.Settings.ApplicationSettings.Mace.footer)
}
......
......@@ -330,11 +330,11 @@ enum L10n {
}
enum Persistent {
/// Automatically reconnect
/// VPN kill switch
static let title = L10n.tr("Localizable", "settings.application_settings.persistent.title")
enum Footer {
/// Disabling automatic reconnection may put your privacy at risk when your device does not have access to a stable network.
/// The VPN kill switch disables your Internet connection when the VPN disconnects.
static let disabled = L10n.tr("Localizable", "settings.application_settings.persistent.footer.disabled")
}
}
......
/* (No Comment) */
"about.accessibility.component.expand" = "اضغط لقراءة الترخيص الكامل";
/* (No Comment) */
"about.app" = "VPN من Private Internet Access";
/* (No Comment) */
"about.intro" = "يستخدم هذا البرنامج المكونات التالية:";
/* (No Comment) */
"account.accessibility.eye" = "أيقونة العين";
/* (No Comment) */
"account.accessibility.eye.hint.conceal" = "اضغط لإخفاء كلمة المرور";
/* (No Comment) */
"account.accessibility.eye.hint.reveal" = "اضغط لإظهار كلمة المرور";
/* (No Comment) */
"account.email.caption" = "البريد الإلكتروني";
/* (No Comment) */
"account.email.placeholder" = "البريد الإلكتروني";
/* (No Comment) */
"account.eye.footer" = "اضغط على رمز العين للكشف عن كلمة المرور أو إخفائها.";
/* (No Comment) */
"account.other.footer" = "احصل على تطبيق Private Internet Access لأجهزتك الأخرى واستخدم اسم المستخدم وكلمة المرور الموجودين أعلاه لتسجيل الدخول وتأمين اتصالك.";
/* (No Comment) */
"account.password.caption" = "كلمة المرور";
/* (No Comment) */
"account.restore.button" = "استرداد الشراء";
/* (No Comment) */
"account.restore.description" = "إذا جدَّدت خطتك ولكن لا يزال حسابك يقول أنها أوشكت على الانتهاء، يمكنك إعادة بدء التجديد من هنا. لن يتم تحصيل رسوم منك أثناء هذه العملية.";
/* (No Comment) */
"account.restore.failure.message" = "لم يتم العثور على عملية شراء قابلة للاسترداد للتجديد.";
/* (No Comment) */
"account.restore.failure.title" = "استرداد الشراء";
/* (No Comment) */
"account.restore.title" = "استرداد الشراء غير المقيد في الحساب";
/* (No Comment) */
"account.reveal.prompt" = "مصادقة للإظهار";
/* (No Comment) */
"account.save.item" = "تحديث";
/* (No Comment) */
"account.save.prompt" = "مصادقة لحفظ التغييرات";
/* (No Comment) */
"account.save.success" = "تم حفظ عنوان بريدك الإلكتروني.";
/* (No Comment) */
"account.username.caption" = "اسم المستخدم";
/* (No Comment) */
"content_blocker.body.footer" = "يرجى الملاحظة: يعمل حظر المحتوى دون الحاجة للاتصال بشبكة VPN، ولكنه لن يعمل إلا على متصفح Safari.";
/* (No Comment) */
"content_blocker.body.subtitle" = "لتفعيل استخدام حظر المحتوى على متصفح Safari، يرجى الذهاب الى الإعدادات > Safari وتفعيل PIA VPN تحت General touch Content Blockers";
/* (No Comment) */
"content_blocker.title" = "حظر المحتوى";
/* (No Comment) */
"dashboard.connection.ip.caption" = "IP عمومي";
/* (No Comment) */
"dashboard.connection.ip.unreachable" = "لا يمكن الوصول إلى الإنترنت";
/* (No Comment) */
"dashboard.connection.region.caption" = "المنطقة الحالية";
/* (No Comment) */
"dashboard.connection.region.change" = "تغيير المنطقة";
/* (No Comment) */
"dashboard.content_blocker.intro.message" = "يستبدل هذا الإصدار MACE مع أداة حظر محتوى Safari.\n\nألقِ عليه نظرة في قسم \"الإعدادات\".";
/* (No Comment) */
"dashboard.status" = "الحالة";
/* (No Comment) */
"dashboard.vpn.changing_region" = "جارٍ تغيير المنطقة...";
/* (No Comment) */
"dashboard.vpn.connected" = "تم الاتصال بـ VPN";
/* (No Comment) */
"dashboard.vpn.connecting" = "جارٍ الاتصال...";
/* (No Comment) */
"dashboard.vpn.disconnected" = "تم قطع الاتصال";
/* (No Comment) */
"dashboard.vpn.disconnecting" = "جارٍ قطع الاتصال...";
/* (No Comment) */
"expiration.message" = "سينتهي اشتراكك قريبًا. قم بتجديده لتبقى محميًا.";
/* (No Comment) */
"expiration.title" = "تجديد";
/* (No Comment) */
"global.automatic" = "تلقائي";
/* (No Comment) */
"global.cancel" = "إلغاء";
/* (No Comment) */
"global.close" = "إغلاق";
/* (No Comment) */
"global.error" = "خطأ";
/* (No Comment) */
"global.ok" = "موافق";
/* (No Comment) */
"menu.accessibility.item" = "القائمة";
/* (No Comment) */
"menu.accessibility.logged_as" = "تم تسجيل الدخول باسم %@";
/* (No Comment) */
"menu.expiration.days" = "%d يوم/أيام";
/* (No Comment) */
"menu.expiration.expires_in" = "ينتهي الاشتراك في";
/* (No Comment) */
"menu.expiration.hours" = "%d ساعة/ساعات";
/* (No Comment) */
"menu.expiration.one_hour" = "ساعة واحدة";
/* (No Comment) */
"menu.expiration.upgrade" = "ترقية الحساب";
/* (No Comment) */
"menu.item.about" = "حول التطبيق";
/* (No Comment) */
"menu.item.account" = "الحساب";
/* (No Comment) */
"menu.item.logout" = "تسجيل الخروج";
/* (No Comment) */
"menu.item.region" = "تحديد المنطقة";
/* (No Comment) */
"menu.item.settings" = "الإعدادات";
/* (No Comment) */
"menu.item.web.home" = "الصفحة الرئيسية";
/* (No Comment) */
"menu.item.web.privacy" = "سياسة الخصوصية";
/* (No Comment) */
"menu.item.web.support" = "الدعم";
/* (No Comment) */
"menu.logout.confirm" = "تسجيل الخروج";
/* (No Comment) */
"menu.logout.message" = "سيؤدي تسجيل الخروج إلى تعطيل الـ VPN وتركك بدون حماية.";
/* (No Comment) */
"menu.logout.title" = "تسجيل الخروج";
/* (No Comment) */
"menu.renewal.message.trial" = "الحسابات التجريبية غير مخولة للتجديد. يرجى إنشاء حساب جديد بعد انتهاء الفترة التجريبية للاستمرار في استخدام الخدمة.";
/* (No Comment) */
"menu.renewal.message.unavailable" = "خوادم أبل غير متاحة حاليًا. يرجى إعادة المحاولة لاحقًا.";
/* (No Comment) */
"menu.renewal.message.website" = "يرجى استخدام موقعنا الإلكتروني لتجديد اشتراكك.";
/* (No Comment) */
"menu.renewal.purchase" = "شراء";
/* (No Comment) */
"menu.renewal.renew" = "تجديد";
/* (No Comment) */
"menu.renewal.title" = "تجديد";
/* (No Comment) */
"notifications.disabled.message" = "قم بتمكين الإعلامات لكي يتم تذكيرك بتجديد اشتراكك قبل انتهائه.";
/* (No Comment) */
"notifications.disabled.settings" = "الإعدادات";
/* (No Comment) */
"notifications.disabled.title" = "تم تعطيل الإشعارات";
/* (No Comment) */
"renewal.failure.message" = "تعذر إرسال إيصال الشراء، يرجى إعادة المحاولة في وقت لاحق.";
/* (No Comment) */
"renewal.success.message" = "تم تجديد حسابك بنجاح.";
/* (No Comment) */
"renewal.success.title" = "شكرًا لك";
/* (No Comment) */
"settings.application_information.debug.empty.message" = "معلومات تتبع الأخطاء فارغة. يرجى محاولة إجراء اتصال قبل محاولة إعادة الإرسال.";
/* (No Comment) */
"settings.application_information.debug.empty.title" = "معلومات تتبع الأخطاء فارغة";
/* (No Comment) */
"settings.application_information.debug.failure.message" = "تعذَّر إرسال معلومات تتبع الأخطاء. يرجى إلغاء الاتصال بشبكة VPN وإعادة المحاولة.";
/* (No Comment) */
"settings.application_information.debug.failure.title" = "حدث خطأ أثناء الإرسال";
/* (No Comment) */
"settings.application_information.debug.success.message" = "تم إرسال معلومات تتبع الأخطاء بنجاح.\nالمعرف: %@\nيرجى تدوين هذا المعرف، حيث أن فريق الدعم سيحتاجه لتحديد ما أرسلته.";
/* (No Comment) */
"settings.application_information.debug.success.title" = "تم إرسال معلومات تتبع الأخطاء";
/* (No Comment) */
"settings.application_information.debug.title" = "إرسال تتبع الأخطاء إلى الدعم";
/* (No Comment) */
"settings.application_information.title" = "معلومات التطبيق";
/* (No Comment) */
"settings.application_settings.dark_theme.title" = "النسق الداكن";
/* (No Comment) */
"settings.application_settings.mace.footer" = "يحجب ™PIA MACE الإعلانات والمتعقبين والبرمجيات الضارة عندما تكون متصلًا بخدمة VPN.";
/* (No Comment) */
"settings.application_settings.mace.title" = "™PIA MACE";
/* (No Comment) */
"settings.application_settings.persistent.footer.disabled" = "قد يُعرض تعطيل ميزة \"إعادة الاتصال التلقائي\" خصوصيتك للخطر عند عدم توافر اتصال مستقر بالإنترنت لجهازك.";
/* (No Comment) */
"settings.application_settings.persistent.title" = "إعادة الاتصال تلقائيًا";
/* (No Comment) */
"settings.application_settings.persistent.footer.disabled" = "يؤدي استخدام مفتاح إيقاف VPN إلى تعطيل اتصالك بالإنترنت عند قطع اتصال شبكة VPN.";
"settings.application_settings.persistent.title" = "مفتاح إيقاف VPN";
"settings.application_settings.title" = "إعدادات التطبيق";
/* (No Comment) */
"settings.commit.buttons.later" = "لاحقًا";
/* (No Comment) */
"settings.commit.buttons.reconnect" = "إعادة اتصال";
/* (No Comment) */
"settings.commit.messages.must_disconnect" = "يجب إعادة اتصال VPN حتى تسري بعض التغييرات.";
/* (No Comment) */
"settings.commit.messages.should_reconnect" = "أعد اتصال VPN لتطبيق التغييرات.";
/* (No Comment) */
"settings.connection.remote_port.title" = "منفذ بعيد";
/* (No Comment) */
"settings.connection.socket_protocol.title" = "مقبس";
/* (No Comment) */
"settings.connection.title" = "الاتصال";
/* (No Comment) */
"settings.connection.vpn_protocol.title" = "البروتوكول";
/* (No Comment) */
"settings.content_blocker.footer" = "لتفعيل أو تعطيل حظر المحتوى على متصفح Safari، اذهب الى الإعدادات > Safari > حظر المحتوى وتفعيل PIA VPN";
/* (No Comment) */
"settings.content_blocker.refresh.title" = "تحديث قائمة الحظر";
/* (No Comment) */
"settings.content_blocker.state.title" = "الحالة الحالية";
/* (No Comment) */
"settings.content_blocker.title" = "حظر المحتوى في Safari";
/* (No Comment) */
"settings.encryption.cipher.title" = "تشفير البيانات";
/* (No Comment) */
"settings.encryption.digest.title" = "مصادقة البيانات";
/* (No Comment) */
"settings.encryption.handshake.title" = "مصافحة";
/* (No Comment) */
"settings.encryption.title" = "التشفير";
/* (No Comment) */
"settings.reset.defaults.confirm.button" = "إعادة تعيين";
"settings.reset.defaults.confirm.message" = "سيؤدي هذا الإجراء إلى عودة التطبيق إلى حالته الافتراضية وستفقد كل التغييرات التي أجريتها.";
"settings.reset.defaults.confirm.title" = "إعادة تعيين الإعدادات";
"settings.reset.defaults.title" = "إعادة تعيين إلى إعدادات افتراضية";
"settings.reset.footer" = "سيؤدي هذا الإجراء إلى إعادة تعيين جميع الإعدادات أعلاه.";
"settings.reset.title" = "إعادة تعيين";
"shortcuts.connect" = "اتصال";
/* (No Comment) */
"shortcuts.disconnect" = "قطع الاتصال";
/* (No Comment) */
"shortcuts.select_region" = "حدّد منطقة";
/* (No Comment) */
"vpn_permission.body.footer" = "نحن لا نقوم بمراقبة أو تصفية أو تسجيل أي نشاط على الشبكة.";
/* (No Comment) */
"vpn_permission.body.subtitle" = "للمتابعة اضغط \"%@\".";
/* (No Comment) */
"vpn_permission.body.title" = "يحتاج PIA إلى الوصول إلى تكوينات VPN لتأمين حركة مرورك.";
/* (No Comment) */
"vpn_permission.disallow.contact" = "اتصال";
/* (No Comment) */
"vpn_permission.disallow.message.basic" = "نحن بحاجة إلى هذا الإذن ليعمل التطبيق.";
/* (No Comment) */
"vpn_permission.disallow.message.support" = "يمكنك أيضًا الاتصال بدعم العملاء إذا كنت بحاجة إلى المساعدة.";
/* (No Comment) */
"vpn_permission.title" = "PIA";
/* (No Comment) */
"walkthrough.action.done" = "تم";
/* (No Comment) */
"walkthrough.action.next" = "التالي";
/* (No Comment) */
"walkthrough.action.skip" = "تخطي";
/* (No Comment) */
"walkthrough.page.1.description" = "احمي نفسك على ما يصل إلى 5 أجهزة في وقت واحد.";
/* (No Comment) */
"walkthrough.page.1.title" = "يدعم 5 أجهزة في المرة الواحدة";
/* (No Comment) */
"walkthrough.page.2.description" = "مع خوادم في جميع أنحاء العالم، أنت دائما تحت الحماية.";
/* (No Comment) */
"walkthrough.page.2.title" = "اتصل بأي منطقة بسهولة";
/* (No Comment) */
"walkthrough.page.3.description" = "تمكين ميزة حظر المحتوى يمنع الإعلانات من الظهور في Safari.";
/* (No Comment) */
"walkthrough.page.3.title" = "احمي نفسك من الإعلانات";
/* (No Comment) */
"about.accessibility.component.expand" = "Tryk for at læse fuld licens";
/* (No Comment) */
"about.app" = "VPN fra Private Internet Access";
/* (No Comment) */
"about.intro" = "Dette program bruger følgende komponenter:";
/* (No Comment) */
"account.accessibility.eye" = "Øje-ikon";
/* (No Comment) */
"account.accessibility.eye.hint.conceal" = "Tryk for at skjule kodeord";
/* (No Comment) */
"account.accessibility.eye.hint.reveal" = "Tryk for at vise kodeord";
/* (No Comment) */
"account.email.caption" = "E-mail";
/* (No Comment) */
"account.email.placeholder" = "E-mailadresse";
/* (No Comment) */
"account.eye.footer" = "Tryk på øjenikonet for at afsløre eller skjule dit kodeord.";
/* (No Comment) */
"account.other.footer" = "Få Private Internet Access app'en til dine andre enheder og brug ovenstående brugernavn og adgangskode til at logge ind og sikre din forbindelse.";
/* (No Comment) */
"account.password.caption" = "Kodeord";
/* (No Comment) */
"account.restore.button" = "Gendan køb";
/* (No Comment) */
"account.restore.description" = "Hvis du har fornyet din plan, men din konto stadig giver besked om at den vil udløbe, kan du genstarte fornyelse herfra. Du vil ikke blive opkrævet i løbet af denne proces.";
/* (No Comment) */
"account.restore.failure.message" = "Der blev ikke fundet noget indløsende køb for fornyelse.";
/* (No Comment) */
"account.restore.failure.title" = "Gendan køb";
/* (No Comment) */
"account.restore.title" = "Gendan ukrediteret køb";
/* (No Comment) */
"account.reveal.prompt" = "Autentificer for at afsløre";
/* (No Comment) */
"account.save.item" = "Opdater";
/* (No Comment) */
"account.save.prompt" = "Autentificer for at gemme ændringer";
/* (No Comment) */
"account.save.success" = "Din e-mailadresse er blevet gemt.";
/* (No Comment) */
"account.username.caption" = "Brugernavn";
/* (No Comment) */
"content_blocker.body.footer" = "Bemærk: Du behøver ikke have forbindelse til VPN for, at denne Indholdsblokering kan fungere, men den virker kun, når du anvender Safari-browseren.";
/* (No Comment) */
"content_blocker.body.subtitle" = "For at aktivere vores Indholdsblokering til brug med Safari skal du gå til Indstillinger > Safari og under Generelt trykke på Indholdsblokering til for PIA VPN.";
/* (No Comment) */
"content_blocker.title" = "Indholdsblokering";
/* (No Comment) */
"dashboard.connection.ip.caption" = "OFFENTLIG IP";