SwiftGen+Strings.swift 21 KB
Newer Older
1
// swiftlint:disable all
Jose Blaya's avatar
Jose Blaya committed
2
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
Davide De Rosa's avatar
Davide De Rosa committed
3 4 5

import Foundation

Jose Blaya's avatar
Jose Blaya committed
6
// swiftlint:disable superfluous_disable_command file_length implicit_return
Davide De Rosa's avatar
Davide De Rosa committed
7

8 9 10
// MARK: - Strings

// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length
Thomas Markiewicz's avatar
Thomas Markiewicz committed
11
// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
ueshiba's avatar
ueshiba committed
12
internal enum L10n {
13 14 15 16 17 18 19 20 21 22
  internal enum Signup {
    internal enum Failure {
      /// We're unable to create an account at this time. Please try again later. Reopening the app will re-attempt to create an account.
      internal static let message = L10n.tr("Signup", "failure.message")
      /// GO BACK
      internal static let submit = L10n.tr("Signup", "failure.submit")
      /// Account creation failed
      internal static let title = L10n.tr("Signup", "failure.title")
      /// Sign-up failed
      internal static let vcTitle = L10n.tr("Signup", "failure.vc_title")
23 24 25 26 27 28
      internal enum Purchase {
        internal enum Sandbox {
          /// The selected sandbox subscription is not available in production.
          internal static let message = L10n.tr("Signup", "failure.purchase.sandbox.message")
        }
      }
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
      internal enum Redeem {
        internal enum Claimed {
          /// Looks like this card has already been claimed by another account. You can try entering a different PIN.
          internal static let message = L10n.tr("Signup", "failure.redeem.claimed.message")
          /// Card claimed already
          internal static let title = L10n.tr("Signup", "failure.redeem.claimed.title")
        }
        internal enum Invalid {
          /// Looks like you entered an invalid card PIN. Please try again.
          internal static let message = L10n.tr("Signup", "failure.redeem.invalid.message")
          /// Invalid card PIN
          internal static let title = L10n.tr("Signup", "failure.redeem.invalid.title")
        }
      }
    }
    internal enum InProgress {
      /// We're confirming your purchase with our system. It could take a moment so hang in there.
      internal static let message = L10n.tr("Signup", "in_progress.message")
      /// Confirm sign-up
      internal static let title = L10n.tr("Signup", "in_progress.title")
      internal enum Redeem {
        /// We're confirming your card PIN with our system. It could take a moment so hang in there.
        internal static let message = L10n.tr("Signup", "in_progress.redeem.message")
      }
    }
Jose Blaya's avatar
Jose Blaya committed
54
    internal enum Purchase {
Jose Blaya's avatar
Jose Blaya committed
55 56 57 58
      internal enum Subscribe {
        /// Subscribe now
        internal static let now = L10n.tr("Signup", "purchase.subscribe.now")
      }
Jose Blaya's avatar
Jose Blaya committed
59 60 61 62 63
      internal enum Trials {
        /// Browse anonymously and hide your ip.
        internal static let anonymous = L10n.tr("Signup", "purchase.trials.anonymous")
        /// Support 10 devices at once
        internal static let devices = L10n.tr("Signup", "purchase.trials.devices")
Jose Blaya's avatar
wip  
Jose Blaya committed
64
        /// Start your 7-day free trial
Jose Blaya's avatar
Jose Blaya committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
        internal static let intro = L10n.tr("Signup", "purchase.trials.intro")
        /// Connect to any region easily
        internal static let region = L10n.tr("Signup", "purchase.trials.region")
        /// More than 3300 servers in 32 countries
        internal static let servers = L10n.tr("Signup", "purchase.trials.servers")
        /// Start subscription
        internal static let start = L10n.tr("Signup", "purchase.trials.start")
        internal enum _1year {
          /// 1 year of privacy and identity protection
          internal static let protection = L10n.tr("Signup", "purchase.trials.1year.protection")
        }
        internal enum All {
          /// See all available plans
          internal static let plans = L10n.tr("Signup", "purchase.trials.all.plans")
        }
        internal enum Devices {
          /// Protect yourself on up to 10 devices at a time.
          internal static let description = L10n.tr("Signup", "purchase.trials.devices.description")
        }
        internal enum Money {
Jose Blaya's avatar
Jose Blaya committed
85
          /// 30 day money back guarantee
Jose Blaya's avatar
Jose Blaya committed
86 87 88
          internal static let back = L10n.tr("Signup", "purchase.trials.money.back")
        }
        internal enum Price {
Jose Blaya's avatar
Jose Blaya committed
89
          /// Then %@
Jose Blaya's avatar
Jose Blaya committed
90 91
          internal static func after(_ p1: Any) -> String {
            return L10n.tr("Signup", "purchase.trials.price.after", String(describing: p1))
Jose Blaya's avatar
Jose Blaya committed
92 93 94
          }
        }
      }
Jose Blaya's avatar
Jose Blaya committed
95 96 97 98 99 100 101 102 103 104 105 106 107
      internal enum Uncredited {
        internal enum Alert {
          /// You have uncredited transactions. Do you want to recover your account details?
          internal static let message = L10n.tr("Signup", "purchase.uncredited.alert.message")
          internal enum Button {
            /// Cancel
            internal static let cancel = L10n.tr("Signup", "purchase.uncredited.alert.button.cancel")
            /// Recover account
            internal static let recover = L10n.tr("Signup", "purchase.uncredited.alert.button.recover")
          }
        }
      }
    }
108 109
    internal enum Success {
      /// Thank you for signing up with us. We have sent your account username and password at your email address at %@
Jose Blaya's avatar
Jose Blaya committed
110 111
      internal static func messageFormat(_ p1: Any) -> String {
        return L10n.tr("Signup", "success.message_format", String(describing: p1))
112 113 114 115 116 117 118 119 120 121
      }
      /// GET STARTED
      internal static let submit = L10n.tr("Signup", "success.submit")
      /// Purchase complete
      internal static let title = L10n.tr("Signup", "success.title")
      internal enum Password {
        /// Password
        internal static let caption = L10n.tr("Signup", "success.password.caption")
      }
      internal enum Redeem {
122
        /// You will receive an email shortly with your username and password.\n\nYour login details
123
        internal static let message = L10n.tr("Signup", "success.redeem.message")
124
        /// Card redeemed successfully
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
        internal static let title = L10n.tr("Signup", "success.redeem.title")
      }
      internal enum Username {
        /// Username
        internal static let caption = L10n.tr("Signup", "success.username.caption")
      }
    }
    internal enum Unreachable {
      /// No internet connection found. Please confirm that you have an internet connection and hit retry below.\n\nYou can come back to the app later to finish the process.
      internal static let message = L10n.tr("Signup", "unreachable.message")
      /// TRY AGAIN
      internal static let submit = L10n.tr("Signup", "unreachable.submit")
      /// Whoops!
      internal static let title = L10n.tr("Signup", "unreachable.title")
      /// Error
      internal static let vcTitle = L10n.tr("Signup", "unreachable.vc_title")
    }
Jose Blaya's avatar
Jose Blaya committed
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
    internal enum Walkthrough {
      internal enum Action {
        /// DONE
        internal static let done = L10n.tr("Signup", "walkthrough.action.done")
        /// NEXT
        internal static let next = L10n.tr("Signup", "walkthrough.action.next")
        /// SKIP
        internal static let skip = L10n.tr("Signup", "walkthrough.action.skip")
      }
      internal enum Page {
        internal enum _1 {
          /// Protect yourself on up to 10 devices at a time.
          internal static let description = L10n.tr("Signup", "walkthrough.page.1.description")
          /// Support 10 devices at once
          internal static let title = L10n.tr("Signup", "walkthrough.page.1.title")
        }
        internal enum _2 {
          /// With servers around the globe, you are always under protection.
          internal static let description = L10n.tr("Signup", "walkthrough.page.2.description")
          /// Connect to any region easily
          internal static let title = L10n.tr("Signup", "walkthrough.page.2.title")
        }
        internal enum _3 {
          /// Enabling our Content Blocker prevents ads from showing in Safari.
          internal static let description = L10n.tr("Signup", "walkthrough.page.3.description")
          /// Protect yourself from ads
          internal static let title = L10n.tr("Signup", "walkthrough.page.3.title")
        }
      }
    }
172 173 174 175 176 177 178 179 180 181 182
  }
  internal enum Ui {
    internal enum Global {
      /// Cancel
      internal static let cancel = L10n.tr("UI", "global.cancel")
      /// Close
      internal static let close = L10n.tr("UI", "global.close")
      /// OK
      internal static let ok = L10n.tr("UI", "global.ok")
      internal enum Version {
        /// Version %@ (%@)
Jose Blaya's avatar
Jose Blaya committed
183 184
        internal static func format(_ p1: Any, _ p2: Any) -> String {
          return L10n.tr("UI", "global.version.format", String(describing: p1), String(describing: p2))
185 186 187 188
        }
      }
    }
  }
ueshiba's avatar
ueshiba committed
189 190
  internal enum Welcome {
    internal enum Agreement {
Jose Blaya's avatar
Jose Blaya committed
191
      /// After the 7 days free trial this subscription automatically renews for %@ unless it is canceled at least 24 hours before the end of the trial period. Your Apple ID account will be charged for renewal within 24 hours before the end of the trial period. You can manage and cancel your subscriptions by going to your App Store account settings after purchase. 7-days trial offer is limited to one 7-days trial offer per user. Any unused portion of a free trial period, if offered, will be forfeited when the user purchases a subscription. All prices include applicable local sales taxes.\n\nSigning up constitutes acceptance of the $1 and the $2.
Jose Blaya's avatar
Jose Blaya committed
192 193
      internal static func message(_ p1: Any) -> String {
        return L10n.tr("Welcome", "agreement.message", String(describing: p1))
Jose Blaya's avatar
Jose Blaya committed
194
      }
ueshiba's avatar
ueshiba committed
195
      internal enum Message {
196
        /// Privacy Policy
ueshiba's avatar
ueshiba committed
197
        internal static let privacy = L10n.tr("Welcome", "agreement.message.privacy")
198
        /// Terms of Service
ueshiba's avatar
ueshiba committed
199
        internal static let tos = L10n.tr("Welcome", "agreement.message.tos")
200
      }
201 202 203 204 205
      internal enum Trials {
        /// Payment will be charged to your Apple ID account at the confirmation of purchase. Subscription automatically renews unless it is canceled at least 24 hours before the end of the current period. Your account will be charged for renewal within 24 hours prior to the end of the current period. You can manage and cancel your subscriptions by going to your account settings on the App Store after purchase.\n\nCertain Paid Subscriptions may offer a free trial prior to charging your payment method. If you decide to unsubscribe from a Paid Subscription before we start charging your payment method, cancel the subscription at least 24 hours before the free trial ends.\n\nFree trials are only available to new users, and are at our sole discretion, and if you attempt to sign up for an additional free trial, you will be immediately charged with the standard Subscription Fee.\n\nWe reserve the right to revoke your free trial at any time.\n\nAny unused portion of your free trial period will be forfeited upon purchase of a subscription.\n\nSigning up constitutes acceptance of this terms and conditions.
        internal static let message = L10n.tr("Welcome", "agreement.trials.message")
        /// Free trials terms and conditions
        internal static let title = L10n.tr("Welcome", "agreement.trials.title")
Jose Blaya's avatar
Jose Blaya committed
206 207 208 209 210 211 212 213
        internal enum Monthly {
          /// month
          internal static let plan = L10n.tr("Welcome", "agreement.trials.monthly.plan")
        }
        internal enum Yearly {
          /// year
          internal static let plan = L10n.tr("Welcome", "agreement.trials.yearly.plan")
        }
214
      }
215
    }
Jose Blaya's avatar
Jose Blaya committed
216 217 218 219 220 221 222 223 224
    internal enum Gdpr {
      internal enum Accept {
        internal enum Button {
          /// Agree and continue
          internal static let title = L10n.tr("Welcome", "gdpr.accept.button.title")
        }
      }
      internal enum Collect {
        internal enum Data {
Jose Blaya's avatar
Jose Blaya committed
225
          /// E-mail Address for the purposes of account management and protection from abuse.
Jose Blaya's avatar
Jose Blaya committed
226 227 228 229 230 231 232
          internal static let description = L10n.tr("Welcome", "gdpr.collect.data.description")
          /// Personal information we collect
          internal static let title = L10n.tr("Welcome", "gdpr.collect.data.title")
        }
      }
      internal enum Usage {
        internal enum Data {
Jose Blaya's avatar
Jose Blaya committed
233
          /// E-mail address is used to send subscription information, payment confirmations, customer correspondence, and Private Internet Access promotional offers only.
Jose Blaya's avatar
Jose Blaya committed
234 235 236 237 238 239
          internal static let description = L10n.tr("Welcome", "gdpr.usage.data.description")
          /// Uses of personal information collected by us
          internal static let title = L10n.tr("Welcome", "gdpr.usage.data.title")
        }
      }
    }
Jose Blaya's avatar
Jose Blaya committed
240 241 242 243 244 245
    internal enum Getstarted {
      internal enum Buttons {
        /// Buy account
        internal static let buyaccount = L10n.tr("Welcome", "getstarted.buttons.buyaccount")
      }
    }
ueshiba's avatar
ueshiba committed
246 247
    internal enum Iap {
      internal enum Error {
Davide De Rosa's avatar
Davide De Rosa committed
248
        /// Error
ueshiba's avatar
ueshiba committed
249 250
        internal static let title = L10n.tr("Welcome", "iap.error.title")
        internal enum Message {
Davide De Rosa's avatar
Davide De Rosa committed
251
          /// Apple servers currently unavailable. Please try again later.
ueshiba's avatar
ueshiba committed
252
          internal static let unavailable = L10n.tr("Welcome", "iap.error.message.unavailable")
Davide De Rosa's avatar
Davide De Rosa committed
253 254 255
        }
      }
    }
ueshiba's avatar
ueshiba committed
256
    internal enum Login {
Davide De Rosa's avatar
Davide De Rosa committed
257
      /// LOGIN
ueshiba's avatar
ueshiba committed
258
      internal static let submit = L10n.tr("Welcome", "login.submit")
Davide De Rosa's avatar
Davide De Rosa committed
259
      /// Sign in to your account
ueshiba's avatar
ueshiba committed
260 261
      internal static let title = L10n.tr("Welcome", "login.title")
      internal enum Error {
Davide De Rosa's avatar
Davide De Rosa committed
262
        /// Too many failed login attempts with this username. Please try again later.
ueshiba's avatar
ueshiba committed
263
        internal static let throttled = L10n.tr("Welcome", "login.error.throttled")
Davide De Rosa's avatar
Davide De Rosa committed
264
        /// Log in
ueshiba's avatar
ueshiba committed
265
        internal static let title = L10n.tr("Welcome", "login.error.title")
Thomas Markiewicz's avatar
Thomas Markiewicz committed
266
        /// Your username or passphrase is incorrect.
ueshiba's avatar
ueshiba committed
267
        internal static let unauthorized = L10n.tr("Welcome", "login.error.unauthorized")
Thomas Markiewicz's avatar
Thomas Markiewicz committed
268
        /// You must enter a username and passphrase.
ueshiba's avatar
ueshiba committed
269
        internal static let validation = L10n.tr("Welcome", "login.error.validation")
Davide De Rosa's avatar
Davide De Rosa committed
270
      }
Jose Blaya's avatar
Jose Blaya committed
271 272 273 274
      internal enum Magic {
        internal enum Link {
          /// Please check your e-mail for a login link.
          internal static let response = L10n.tr("Welcome", "login.magic.link.response")
Jose Blaya's avatar
Jose Blaya committed
275 276
          /// Send Link
          internal static let send = L10n.tr("Welcome", "login.magic.link.send")
Jose Blaya's avatar
Jose Blaya committed
277 278
          /// Login using magic email link
          internal static let title = L10n.tr("Welcome", "login.magic.link.title")
Jose Blaya's avatar
Jose Blaya committed
279 280 281 282
          internal enum Invalid {
            /// Invalid email. Please try again.
            internal static let email = L10n.tr("Welcome", "login.magic.link.invalid.email")
          }
Jose Blaya's avatar
Jose Blaya committed
283 284
        }
      }
ueshiba's avatar
ueshiba committed
285
      internal enum Password {
Thomas Markiewicz's avatar
Thomas Markiewicz committed
286 287
        /// Passphrase
        internal static let l1Placeholder = L10n.tr("Welcome", "login.password.l1Placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
288
        /// Password
ueshiba's avatar
ueshiba committed
289
        internal static let placeholder = L10n.tr("Welcome", "login.password.placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
290
      }
Jose Blaya's avatar
wip  
Jose Blaya committed
291 292 293 294
      internal enum Receipt {
        /// Login using purchase receipt
        internal static let button = L10n.tr("Welcome", "login.receipt.button")
      }
ueshiba's avatar
ueshiba committed
295
      internal enum Restore {
296
        /// Didn't receive account details?
ueshiba's avatar
ueshiba committed
297
        internal static let button = L10n.tr("Welcome", "login.restore.button")
Davide De Rosa's avatar
Davide De Rosa committed
298
      }
ueshiba's avatar
ueshiba committed
299
      internal enum Username {
Thomas Markiewicz's avatar
Thomas Markiewicz committed
300 301
        /// Librem One address
        internal static let l1Placeholder = L10n.tr("Welcome", "login.username.l1Placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
302
        /// Username (p1234567)
ueshiba's avatar
ueshiba committed
303
        internal static let placeholder = L10n.tr("Welcome", "login.username.placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
304 305
      }
    }
ueshiba's avatar
ueshiba committed
306
    internal enum Plan {
Davide De Rosa's avatar
Davide De Rosa committed
307
      /// Best value
ueshiba's avatar
ueshiba committed
308
      internal static let bestValue = L10n.tr("Welcome", "plan.best_value")
Davide De Rosa's avatar
Davide De Rosa committed
309
      /// %@/mo
Jose Blaya's avatar
Jose Blaya committed
310 311
      internal static func priceFormat(_ p1: Any) -> String {
        return L10n.tr("Welcome", "plan.price_format", String(describing: p1))
Davide De Rosa's avatar
Davide De Rosa committed
312
      }
ueshiba's avatar
ueshiba committed
313
      internal enum Accessibility {
Davide De Rosa's avatar
Davide De Rosa committed
314
        /// per month
ueshiba's avatar
ueshiba committed
315
        internal static let perMonth = L10n.tr("Welcome", "plan.accessibility.per_month")
Davide De Rosa's avatar
Davide De Rosa committed
316
      }
ueshiba's avatar
ueshiba committed
317
      internal enum Monthly {
Davide De Rosa's avatar
Davide De Rosa committed
318
        /// Monthly
ueshiba's avatar
ueshiba committed
319
        internal static let title = L10n.tr("Welcome", "plan.monthly.title")
Davide De Rosa's avatar
Davide De Rosa committed
320
      }
ueshiba's avatar
ueshiba committed
321
      internal enum Yearly {
Davide De Rosa's avatar
Davide De Rosa committed
322
        /// %@%@ per year
Jose Blaya's avatar
Jose Blaya committed
323 324
        internal static func detailFormat(_ p1: Any, _ p2: Any) -> String {
          return L10n.tr("Welcome", "plan.yearly.detail_format", String(describing: p1), String(describing: p2))
Davide De Rosa's avatar
Davide De Rosa committed
325 326
        }
        /// Yearly
ueshiba's avatar
ueshiba committed
327
        internal static let title = L10n.tr("Welcome", "plan.yearly.title")
Davide De Rosa's avatar
Davide De Rosa committed
328 329
      }
    }
ueshiba's avatar
ueshiba committed
330
    internal enum Purchase {
Jose Blaya's avatar
Jose Blaya committed
331
      /// Continue
Jose Blaya's avatar
Jose Blaya committed
332
      internal static let `continue` = L10n.tr("Welcome", "purchase.continue")
333 334
      /// or
      internal static let or = L10n.tr("Welcome", "purchase.or")
Jose Blaya's avatar
Jose Blaya committed
335
      /// Submit
ueshiba's avatar
ueshiba committed
336
      internal static let submit = L10n.tr("Welcome", "purchase.submit")
Jose Blaya's avatar
Jose Blaya committed
337
      /// 30-day money back guarantee
ueshiba's avatar
ueshiba committed
338
      internal static let subtitle = L10n.tr("Welcome", "purchase.subtitle")
Davide De Rosa's avatar
Davide De Rosa committed
339
      /// Select a VPN plan
ueshiba's avatar
ueshiba committed
340
      internal static let title = L10n.tr("Welcome", "purchase.title")
Jose Blaya's avatar
Jose Blaya committed
341
      internal enum Confirm {
342
        /// You are purchasing the %@ plan
Jose Blaya's avatar
Jose Blaya committed
343 344
        internal static func plan(_ p1: Any) -> String {
          return L10n.tr("Welcome", "purchase.confirm.plan", String(describing: p1))
Jose Blaya's avatar
Jose Blaya committed
345 346 347 348 349 350
        }
        internal enum Form {
          /// Enter your email address
          internal static let email = L10n.tr("Welcome", "purchase.confirm.form.email")
        }
      }
ueshiba's avatar
ueshiba committed
351
      internal enum Email {
Davide De Rosa's avatar
Davide De Rosa committed
352
        /// Email address
ueshiba's avatar
ueshiba committed
353
        internal static let placeholder = L10n.tr("Welcome", "purchase.email.placeholder")
Jose Blaya's avatar
Jose Blaya committed
354 355
        /// We need your email to send your username and password.
        internal static let why = L10n.tr("Welcome", "purchase.email.why")
Davide De Rosa's avatar
Davide De Rosa committed
356
      }
ueshiba's avatar
ueshiba committed
357
      internal enum Error {
Davide De Rosa's avatar
Davide De Rosa committed
358
        /// Purchase
ueshiba's avatar
ueshiba committed
359
        internal static let title = L10n.tr("Welcome", "purchase.error.title")
Davide De Rosa's avatar
Davide De Rosa committed
360
        /// You must enter an email address.
ueshiba's avatar
ueshiba committed
361 362 363 364 365 366 367
        internal static let validation = L10n.tr("Welcome", "purchase.error.validation")
        internal enum Connectivity {
          /// We are unable to reach Private Internet Access. This may due to poor internet or our service is blocked in your country.
          internal static let description = L10n.tr("Welcome", "purchase.error.connectivity.description")
          /// Connection Failure
          internal static let title = L10n.tr("Welcome", "purchase.error.connectivity.title")
        }
Davide De Rosa's avatar
Davide De Rosa committed
368
      }
ueshiba's avatar
ueshiba committed
369 370 371
      internal enum Login {
        /// Sign in
        internal static let button = L10n.tr("Welcome", "purchase.login.button")
Davide De Rosa's avatar
Davide De Rosa committed
372
        /// Already have an account?
ueshiba's avatar
ueshiba committed
373
        internal static let footer = L10n.tr("Welcome", "purchase.login.footer")
Davide De Rosa's avatar
Davide De Rosa committed
374 375
      }
    }
ueshiba's avatar
ueshiba committed
376
    internal enum Redeem {
377
      /// SUBMIT
ueshiba's avatar
ueshiba committed
378
      internal static let submit = L10n.tr("Welcome", "redeem.submit")
379
      /// Type in your email address and the %lu digit PIN from your gift card or trial card below.
ueshiba's avatar
ueshiba committed
380
      internal static func subtitle(_ p1: Int) -> String {
381 382
        return L10n.tr("Welcome", "redeem.subtitle", p1)
      }
383
      /// Redeem gift card
ueshiba's avatar
ueshiba committed
384
      internal static let title = L10n.tr("Welcome", "redeem.title")
Jose Blaya's avatar
wip  
Jose Blaya committed
385 386 387 388
      internal enum Accessibility {
        /// Back
        internal static let back = L10n.tr("Welcome", "redeem.accessibility.back")
      }
ueshiba's avatar
ueshiba committed
389
      internal enum Email {
390
        /// Email address
ueshiba's avatar
ueshiba committed
391
        internal static let placeholder = L10n.tr("Welcome", "redeem.email.placeholder")
392
      }
ueshiba's avatar
ueshiba committed
393
      internal enum Error {
394 395
        /// Please type in your email and card PIN.
        internal static let allfields = L10n.tr("Welcome", "redeem.error.allfields")
396
        /// Code must be %lu numeric digits.
ueshiba's avatar
ueshiba committed
397
        internal static func code(_ p1: Int) -> String {
398 399
          return L10n.tr("Welcome", "redeem.error.code", p1)
        }
400
        /// Redeem
ueshiba's avatar
ueshiba committed
401
        internal static let title = L10n.tr("Welcome", "redeem.error.title")
402
      }
403 404 405 406
      internal enum Giftcard {
        /// Gift card PIN
        internal static let placeholder = L10n.tr("Welcome", "redeem.giftcard.placeholder")
      }
407
    }
ueshiba's avatar
ueshiba committed
408
    internal enum Restore {
Davide De Rosa's avatar
Davide De Rosa committed
409
      /// CONFIRM
ueshiba's avatar
ueshiba committed
410
      internal static let submit = L10n.tr("Welcome", "restore.submit")
Jose Blaya's avatar
Jose Blaya committed
411
      /// If you purchased a plan through this app and didn't receive your credentials, you can send them again from here. You will not be charged during this process.
ueshiba's avatar
ueshiba committed
412
      internal static let subtitle = L10n.tr("Welcome", "restore.subtitle")
Davide De Rosa's avatar
Davide De Rosa committed
413
      /// Restore uncredited purchase
ueshiba's avatar
ueshiba committed
414 415
      internal static let title = L10n.tr("Welcome", "restore.title")
      internal enum Email {
Davide De Rosa's avatar
Davide De Rosa committed
416
        /// Email address
ueshiba's avatar
ueshiba committed
417
        internal static let placeholder = L10n.tr("Welcome", "restore.email.placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
418
      }
ueshiba's avatar
WIP  
ueshiba committed
419
    }
Jose Blaya's avatar
Jose Blaya committed
420 421 422 423 424 425 426 427
    internal enum Update {
      internal enum Account {
        internal enum Email {
          /// Failed to modify account email
          internal static let error = L10n.tr("Welcome", "update.account.email.error")
        }
      }
    }
Davide De Rosa's avatar
Davide De Rosa committed
428 429
  }
}
430
// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length
Thomas Markiewicz's avatar
Thomas Markiewicz committed
431
// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
432 433

// MARK: - Implementation Details
Davide De Rosa's avatar
Davide De Rosa committed
434 435 436

extension L10n {
  private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
Jose Blaya's avatar
Jose Blaya committed
437
    let format = BundleToken.bundle.localizedString(forKey: key, value: nil, table: table)
Davide De Rosa's avatar
Davide De Rosa committed
438 439 440 441
    return String(format: format, locale: Locale.current, arguments: args)
  }
}

Jose Blaya's avatar
Jose Blaya committed
442 443 444
// swiftlint:disable convenience_type
private final class BundleToken {
  static let bundle: Bundle = {
Thomas Markiewicz's avatar
Thomas Markiewicz committed
445 446 447 448 449
    #if SWIFT_PACKAGE
    return Bundle.module
    #else
    return Bundle(for: BundleToken.self)
    #endif
Jose Blaya's avatar
Jose Blaya committed
450 451 452
  }()
}
// swiftlint:enable convenience_type