Advertisement
Guest User

EnlishLocalizationFallback

a guest
Jul 20th, 2019
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.20 KB | None | 0 0
  1. private let bundle = Bundle.main
  2. private let tableName = "Localizable"
  3.  
  4. private let cachedEnglishLocalizations: [String: String] = {
  5.     let bundleURL = bundle.bundleURL as CFURL
  6.     let bundle = CFBundleCreate(nil, bundleURL)
  7.    
  8.     let cfTableName = "Localizable" as CFString
  9.     let fileExtension = "strings" as CFString
  10.     let englishBundleDirName = "En" as CFString
  11.    
  12.     guard let url = CFBundleCopyResourceURLForLocalization(
  13.         bundle, cfTableName, fileExtension, nil, englishBundleDirName
  14.     ) else {
  15.         fatalError()
  16.     }
  17.    
  18.     let plistData = try! Data(contentsOf: url as URL)
  19.     let englishLocalizations = try! PropertyListDecoder().decode(
  20.         [String: String].self, from: plistData)
  21.    
  22.     return englishLocalizations
  23. }()
  24.  
  25. extension String {
  26.     func localize() -> String {
  27.         let localizedString = NSLocalizedString(
  28.             self, tableName: tableName, bundle: bundle, value: "", comment: ""
  29.         )
  30.         if localizedString == self, let englishVersion = cachedEnglishLocalizations[self] {
  31.             // fall back to English version
  32.             return englishVersion
  33.         } else {
  34.             return localizedString
  35.         }
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement