SwiftGen+Strings.swift 20.2 KB
Newer Older
1
// swiftlint:disable all
Davide De Rosa's avatar
Davide De Rosa committed
2 3 4 5 6 7 8
// Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen

import Foundation

// swiftlint:disable superfluous_disable_command
// swiftlint:disable file_length

9 10 11 12
// MARK: - Strings

// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length
// swiftlint:disable nesting type_body_length type_name
ueshiba's avatar
ueshiba committed
13
internal enum L10n {
14 15 16 17 18 19 20 21 22 23
  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")
24 25 26 27 28 29
      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")
        }
      }
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
      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
55
    internal enum Purchase {
Jose Blaya's avatar
Jose Blaya committed
56 57 58 59
      internal enum Subscribe {
        /// Subscribe now
        internal static let now = L10n.tr("Signup", "purchase.subscribe.now")
      }
Jose Blaya's avatar
Jose Blaya committed
60 61 62 63 64
      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
65
        /// Start your 7-day free trial
Jose Blaya's avatar
Jose Blaya committed
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
        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 {
          /// 7 day money back guarantee
          internal static let back = L10n.tr("Signup", "purchase.trials.money.back")
        }
        internal enum Price {
Jose Blaya's avatar
Jose Blaya committed
90
          /// Then %@
Jose Blaya's avatar
Jose Blaya committed
91 92 93 94 95
          internal static func after(_ p1: String) -> String {
            return L10n.tr("Signup", "purchase.trials.price.after", p1)
          }
        }
      }
Jose Blaya's avatar
Jose Blaya committed
96 97 98 99 100 101 102 103 104 105 106 107 108
      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")
          }
        }
      }
    }
109 110 111 112 113 114 115 116 117 118 119 120 121 122
    internal enum Success {
      /// Thank you for signing up with us. We have sent your account username and password at your email address at %@
      internal static func messageFormat(_ p1: String) -> String {
        return L10n.tr("Signup", "success.message_format", p1)
      }
      /// 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 {
123
        /// You will receive an email shortly with your username and password.\n\nYour login details
124
        internal static let message = L10n.tr("Signup", "success.redeem.message")
125
        /// Card redeemed successfully
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
        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
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 172
    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")
        }
      }
    }
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
  }
  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 %@ (%@)
        internal static func format(_ p1: String, _ p2: String) -> String {
          return L10n.tr("UI", "global.version.format", p1, p2)
        }
      }
    }
  }
ueshiba's avatar
ueshiba committed
190 191
  internal enum Welcome {
    internal enum Agreement {
Jose Blaya's avatar
Jose Blaya committed
192 193 194 195
      /// 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.
      internal static func message(_ p1: String) -> String {
        return L10n.tr("Welcome", "agreement.message", p1)
      }
ueshiba's avatar
ueshiba committed
196
      internal enum Message {
197
        /// Privacy Policy
ueshiba's avatar
ueshiba committed
198
        internal static let privacy = L10n.tr("Welcome", "agreement.message.privacy")
199
        /// Terms of Service
ueshiba's avatar
ueshiba committed
200
        internal static let tos = L10n.tr("Welcome", "agreement.message.tos")
201
      }
202 203 204 205 206
      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
207 208 209 210 211 212 213 214
        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")
        }
215
      }
216
    }
ueshiba's avatar
ueshiba committed
217 218 219 220 221 222 223 224 225 226 227 228 229 230
    internal enum Camera {
      internal enum Access {
        internal enum Denied {
          /// Enable camera access so you can scan QR codes to redeem a gift card.
          internal static let message = L10n.tr("Welcome", "camera.access.denied.message")
        }
        internal enum Error {
          /// Your device does not support scanning QR codes. Please use a device with a camera.
          internal static let message = L10n.tr("Welcome", "camera.access.error.message")
          /// Camera not available
          internal static let title = L10n.tr("Welcome", "camera.access.error.title")
        }
      }
    }
Jose Blaya's avatar
Jose Blaya committed
231 232 233 234 235 236 237 238 239
    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
240
          /// E-mail Address for the purposes of account management and protection from abuse.
Jose Blaya's avatar
Jose Blaya committed
241 242 243 244 245 246 247
          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
248
          /// 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
249 250 251 252 253 254
          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
255 256 257 258 259 260
    internal enum Getstarted {
      internal enum Buttons {
        /// Buy account
        internal static let buyaccount = L10n.tr("Welcome", "getstarted.buttons.buyaccount")
      }
    }
ueshiba's avatar
ueshiba committed
261 262
    internal enum Iap {
      internal enum Error {
Davide De Rosa's avatar
Davide De Rosa committed
263
        /// Error
ueshiba's avatar
ueshiba committed
264 265
        internal static let title = L10n.tr("Welcome", "iap.error.title")
        internal enum Message {
Davide De Rosa's avatar
Davide De Rosa committed
266
          /// Apple servers currently unavailable. Please try again later.
ueshiba's avatar
ueshiba committed
267
          internal static let unavailable = L10n.tr("Welcome", "iap.error.message.unavailable")
Davide De Rosa's avatar
Davide De Rosa committed
268 269 270
        }
      }
    }
ueshiba's avatar
ueshiba committed
271
    internal enum Login {
Davide De Rosa's avatar
Davide De Rosa committed
272
      /// LOGIN
ueshiba's avatar
ueshiba committed
273
      internal static let submit = L10n.tr("Welcome", "login.submit")
Davide De Rosa's avatar
Davide De Rosa committed
274
      /// Sign in to your account
ueshiba's avatar
ueshiba committed
275 276
      internal static let title = L10n.tr("Welcome", "login.title")
      internal enum Error {
Davide De Rosa's avatar
Davide De Rosa committed
277
        /// Too many failed login attempts with this username. Please try again later.
ueshiba's avatar
ueshiba committed
278
        internal static let throttled = L10n.tr("Welcome", "login.error.throttled")
Davide De Rosa's avatar
Davide De Rosa committed
279
        /// Log in
ueshiba's avatar
ueshiba committed
280
        internal static let title = L10n.tr("Welcome", "login.error.title")
Davide De Rosa's avatar
Davide De Rosa committed
281
        /// Your username or password is incorrect.
ueshiba's avatar
ueshiba committed
282
        internal static let unauthorized = L10n.tr("Welcome", "login.error.unauthorized")
ueshiba's avatar
ueshiba committed
283
        /// You must enter a username and password.
ueshiba's avatar
ueshiba committed
284
        internal static let validation = L10n.tr("Welcome", "login.error.validation")
Davide De Rosa's avatar
Davide De Rosa committed
285
      }
ueshiba's avatar
ueshiba committed
286
      internal enum Password {
Davide De Rosa's avatar
Davide De Rosa committed
287
        /// Password
ueshiba's avatar
ueshiba committed
288
        internal static let placeholder = L10n.tr("Welcome", "login.password.placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
289
      }
Jose Blaya's avatar
wip  
Jose Blaya committed
290 291 292 293
      internal enum Receipt {
        /// Login using purchase receipt
        internal static let button = L10n.tr("Welcome", "login.receipt.button")
      }
ueshiba's avatar
ueshiba committed
294
      internal enum Restore {
295
        /// Didn't receive account details?
ueshiba's avatar
ueshiba committed
296
        internal static let button = L10n.tr("Welcome", "login.restore.button")
Davide De Rosa's avatar
Davide De Rosa committed
297
      }
ueshiba's avatar
ueshiba committed
298
      internal enum Username {
Davide De Rosa's avatar
Davide De Rosa committed
299
        /// Username (p1234567)
ueshiba's avatar
ueshiba committed
300
        internal static let placeholder = L10n.tr("Welcome", "login.username.placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
301 302
      }
    }
ueshiba's avatar
ueshiba committed
303
    internal enum Plan {
Davide De Rosa's avatar
Davide De Rosa committed
304
      /// Best value
ueshiba's avatar
ueshiba committed
305
      internal static let bestValue = L10n.tr("Welcome", "plan.best_value")
Davide De Rosa's avatar
Davide De Rosa committed
306
      /// %@/mo
ueshiba's avatar
ueshiba committed
307
      internal static func priceFormat(_ p1: String) -> String {
Davide De Rosa's avatar
Davide De Rosa committed
308 309
        return L10n.tr("Welcome", "plan.price_format", p1)
      }
ueshiba's avatar
ueshiba committed
310
      internal enum Accessibility {
Davide De Rosa's avatar
Davide De Rosa committed
311
        /// per month
ueshiba's avatar
ueshiba committed
312
        internal static let perMonth = L10n.tr("Welcome", "plan.accessibility.per_month")
Davide De Rosa's avatar
Davide De Rosa committed
313
      }
ueshiba's avatar
ueshiba committed
314
      internal enum Monthly {
Davide De Rosa's avatar
Davide De Rosa committed
315
        /// Monthly
ueshiba's avatar
ueshiba committed
316
        internal static let title = L10n.tr("Welcome", "plan.monthly.title")
Davide De Rosa's avatar
Davide De Rosa committed
317
      }
ueshiba's avatar
ueshiba committed
318
      internal enum Yearly {
Davide De Rosa's avatar
Davide De Rosa committed
319
        /// %@%@ per year
ueshiba's avatar
ueshiba committed
320
        internal static func detailFormat(_ p1: String, _ p2: String) -> String {
Davide De Rosa's avatar
Davide De Rosa committed
321 322 323
          return L10n.tr("Welcome", "plan.yearly.detail_format", p1, p2)
        }
        /// Yearly
ueshiba's avatar
ueshiba committed
324
        internal static let title = L10n.tr("Welcome", "plan.yearly.title")
Davide De Rosa's avatar
Davide De Rosa committed
325 326
      }
    }
ueshiba's avatar
ueshiba committed
327
    internal enum Purchase {
Jose Blaya's avatar
Jose Blaya committed
328
      /// Continue
Jose Blaya's avatar
Jose Blaya committed
329 330
      internal static let `continue` = L10n.tr("Welcome", "purchase.continue")
      /// Submit
ueshiba's avatar
ueshiba committed
331
      internal static let submit = L10n.tr("Welcome", "purchase.submit")
Davide De Rosa's avatar
Davide De Rosa committed
332
      /// 7-day money back guarantee
ueshiba's avatar
ueshiba committed
333
      internal static let subtitle = L10n.tr("Welcome", "purchase.subtitle")
Davide De Rosa's avatar
Davide De Rosa committed
334
      /// Select a VPN plan
ueshiba's avatar
ueshiba committed
335
      internal static let title = L10n.tr("Welcome", "purchase.title")
Jose Blaya's avatar
Jose Blaya committed
336
      internal enum Confirm {
337
        /// You are purchasing the %@ plan
Jose Blaya's avatar
Jose Blaya committed
338 339 340 341 342 343 344 345
        internal static func plan(_ p1: String) -> String {
          return L10n.tr("Welcome", "purchase.confirm.plan", p1)
        }
        internal enum Form {
          /// Enter your email address
          internal static let email = L10n.tr("Welcome", "purchase.confirm.form.email")
        }
      }
ueshiba's avatar
ueshiba committed
346
      internal enum Email {
Davide De Rosa's avatar
Davide De Rosa committed
347
        /// Email address
ueshiba's avatar
ueshiba committed
348
        internal static let placeholder = L10n.tr("Welcome", "purchase.email.placeholder")
Jose Blaya's avatar
Jose Blaya committed
349 350
        /// 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
351
      }
ueshiba's avatar
ueshiba committed
352
      internal enum Error {
Davide De Rosa's avatar
Davide De Rosa committed
353
        /// Purchase
ueshiba's avatar
ueshiba committed
354
        internal static let title = L10n.tr("Welcome", "purchase.error.title")
Davide De Rosa's avatar
Davide De Rosa committed
355
        /// You must enter an email address.
ueshiba's avatar
ueshiba committed
356 357 358 359 360 361 362
        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
363
      }
ueshiba's avatar
ueshiba committed
364 365 366
      internal enum Login {
        /// Sign in
        internal static let button = L10n.tr("Welcome", "purchase.login.button")
Davide De Rosa's avatar
Davide De Rosa committed
367
        /// Already have an account?
ueshiba's avatar
ueshiba committed
368
        internal static let footer = L10n.tr("Welcome", "purchase.login.footer")
Davide De Rosa's avatar
Davide De Rosa committed
369 370
      }
    }
ueshiba's avatar
ueshiba committed
371
    internal enum Redeem {
372
      /// SUBMIT
ueshiba's avatar
ueshiba committed
373
      internal static let submit = L10n.tr("Welcome", "redeem.submit")
374
      /// Type in your email address and the %lu digit PIN from your gift card or trial card below.
ueshiba's avatar
ueshiba committed
375
      internal static func subtitle(_ p1: Int) -> String {
376 377
        return L10n.tr("Welcome", "redeem.subtitle", p1)
      }
378
      /// Redeem gift card
ueshiba's avatar
ueshiba committed
379
      internal static let title = L10n.tr("Welcome", "redeem.title")
Jose Blaya's avatar
wip  
Jose Blaya committed
380 381 382 383
      internal enum Accessibility {
        /// Back
        internal static let back = L10n.tr("Welcome", "redeem.accessibility.back")
      }
ueshiba's avatar
ueshiba committed
384
      internal enum Email {
385
        /// Email address
ueshiba's avatar
ueshiba committed
386
        internal static let placeholder = L10n.tr("Welcome", "redeem.email.placeholder")
387
      }
ueshiba's avatar
ueshiba committed
388
      internal enum Error {
389 390
        /// Please type in your email and card PIN.
        internal static let allfields = L10n.tr("Welcome", "redeem.error.allfields")
391
        /// Code must be %lu numeric digits.
ueshiba's avatar
ueshiba committed
392
        internal static func code(_ p1: Int) -> String {
393 394
          return L10n.tr("Welcome", "redeem.error.code", p1)
        }
395
        /// Redeem
ueshiba's avatar
ueshiba committed
396
        internal static let title = L10n.tr("Welcome", "redeem.error.title")
397
      }
398 399 400 401
      internal enum Giftcard {
        /// Gift card PIN
        internal static let placeholder = L10n.tr("Welcome", "redeem.giftcard.placeholder")
      }
402
    }
ueshiba's avatar
ueshiba committed
403
    internal enum Restore {
Davide De Rosa's avatar
Davide De Rosa committed
404
      /// CONFIRM
ueshiba's avatar
ueshiba committed
405
      internal static let submit = L10n.tr("Welcome", "restore.submit")
Jose Blaya's avatar
Jose Blaya committed
406
      /// 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
407
      internal static let subtitle = L10n.tr("Welcome", "restore.subtitle")
Davide De Rosa's avatar
Davide De Rosa committed
408
      /// Restore uncredited purchase
ueshiba's avatar
ueshiba committed
409 410
      internal static let title = L10n.tr("Welcome", "restore.title")
      internal enum Email {
Davide De Rosa's avatar
Davide De Rosa committed
411
        /// Email address
ueshiba's avatar
ueshiba committed
412
        internal static let placeholder = L10n.tr("Welcome", "restore.email.placeholder")
Davide De Rosa's avatar
Davide De Rosa committed
413
      }
ueshiba's avatar
WIP  
ueshiba committed
414
    }
Jose Blaya's avatar
Jose Blaya committed
415 416 417 418 419 420 421 422
    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
423 424
  }
}
425 426 427 428
// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length
// swiftlint:enable nesting type_body_length type_name

// MARK: - Implementation Details
Davide De Rosa's avatar
Davide De Rosa committed
429 430 431 432 433 434 435 436 437

extension L10n {
  private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
    let format = NSLocalizedString(key, tableName: table, bundle: Bundle(for: BundleToken.self), comment: "")
    return String(format: format, locale: Locale.current, arguments: args)
  }
}

private final class BundleToken {}