If you have an app that doesn’t use the internet or can’t use the internet but still want basic multi-language capability the below will help.
First add some labels and buttons. In adding the buttons add it twice (once as IBOutlet and then IBAction)
Create a JSON file, in my example I named mine data.json
{ "english":[ { "Sunrise":"Sun Rise", "Sunset":"Sunset", "ShareBrief":"Share Brief", "ShareDetailed":"Share Detailed" } ], "spanish":[ { "Sunrise":"Salida del Sol", "Sunset":"Puesta de Sol", "ShareBrief":"Compartir Breve", "ShareDetailed":"Compartir Detallado" } ], "french":[ { "Sunrise":"Lever du Soleil", "Sunset":"Le Coucher du Soleil", "ShareBrief":"Partager Bref", "ShareDetailed":"Partager Détaillé" } ] }
@IBAction func btnButtonTest(_ sender: Any) { GetLanguage(language: "english"); } @IBOutlet weak var btnButtonTestLabel: UIButton! @IBAction func btnButtonTest1(_ sender: Any) { GetLanguage(language: "spanish"); } @IBOutlet weak var btnButtonTestLabel1: UIButton! @IBOutlet weak var lblLabelTest: UILabel! @IBOutlet weak var lblLabelTest1: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // Get device language let dLanguageLocale = NSLocale.preferredLanguages[0] print(dLanguageLocale); let dLanguage = dLanguageLocale.components(separatedBy: "-") switch (dLanguage[0]) { case "en": GetLanguage(language: "english"); case "es": GetLanguage(language: "spanish"); case "fr": GetLanguage(language: "french"); default: GetLanguage(language: "english"); } } func GetLanguage(language: String) { if let path = Bundle.main.url(forResource: "data", withExtension: "json") { do { let jsonData = try Data(contentsOf: path, options: .mappedIfSafe) do { if let jsonResult = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions(rawValue: 0)) as? NSDictionary { if let personArray = jsonResult.value(forKey: language) as? NSArray { for (_, element) in personArray.enumerated() { if let element = element as? NSDictionary { let sSunrise = element.value(forKey: "Sunrise") as! String print(sSunrise) lblLabelTest4.text = sSunrise let sSunset = element.value(forKey: "Sunset") as! String print(sSunset) lblLabelTest5.text = sSunset let sBrief = element.value(forKey: "ShareBrief") as! String print(sBrief) btnButtonTestLabel.setTitle(sBrief, for: .normal) let sDetailed = element.value(forKey: "ShareDetailed") as! String print(sDetailed) btnButtonTestLabel1.setTitle(sDetailed, for: .normal) } } } } } catch let error as NSError { print("Error: \(error)") } } catch let error as NSError { print("Error: \(error)") } } }