Created
December 27, 2017 10:06
-
-
Save TerryCK/bd92e5d244bb5eb70c9ffd71a474d1c0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Language.swift | |
// | |
// Created by Terry Chen on 2017/12/19. | |
// | |
import UIKit | |
//MARK:- protocol LanguageProtocol | |
protocol LanguageProtocol { | |
static var allLanguages: [Language] { get } | |
var title: String { get } | |
var langCode: String { get } | |
var flagImage: UIImage? { get } | |
var preferredLang: String { get } | |
} | |
//MARK:- enum Language | |
enum Language: String { | |
case en, `in`, id, ja, km, ko, pt, th, vi, zh | |
} | |
//MARK:- Implement Language protocol | |
extension Language: LanguageProtocol { | |
static let allLanguages: [Language] = [.en, .id, .ja, .km, .ko, .pt, .th, .vi, .zh] | |
var title: String { | |
switch self { | |
case .en : return "English" | |
case .`in` : return "Indo" | |
case .id : return "Indo" | |
case .ja : return "日本語" | |
case .km : return "ភាសាខ្មែរ" | |
case .ko : return "한국어" | |
case .pt : return "Português" | |
case .th : return "ไทย" | |
case .vi : return "Tiếng Việt" | |
case .zh : return "简体" | |
} | |
} | |
var langCode: String { | |
return rawValue | |
} | |
var preferredLang: String { | |
switch self { | |
case .en : return LOCALE_EN | |
case .`in` : return LOCALE_IN | |
case .id : return LOCALE_ID | |
case .ja : return LOCALE_JA | |
case .km : return LOCALE_KM | |
case .ko : return LOCALE_KO | |
case .pt : return LOCALE_PT | |
case .th : return LOCALE_TH | |
case .vi : return LOCALE_VI | |
case .zh : return LOCALE_ZH | |
} | |
} | |
var flagImage: UIImage? { | |
return UIImage(named: flagImageName) | |
} | |
} | |
//MARK:- Extension private property | |
extension Language { | |
private var flagImageName: String { | |
switch self { | |
case .en : return "csh_ic_uk" | |
case .`in` : return "csh_ic_indonesia" | |
case .id : return "csh_ic_indonesia" | |
case .ja : return "csh_ic_japan" | |
case .km : return "csh_ic_cambodia" | |
case .ko : return "csh_ic_korea" | |
case .pt : return "csh_ic_brazil" | |
case .th : return "csh_ic_thailand" | |
case .vi : return "csh_ic_vietnam" | |
case .zh : return "csh_ic_china" | |
} | |
} | |
} | |
// MARK:- Implement Language property on String | |
extension String { | |
var flagImage: UIImage { | |
return toLanguage?.flagImage ?? String.defaultLanguage.flagImage | |
} | |
var languageTitle: String { | |
return toLanguage?.title ?? String.defaultLanguage.languageTitle | |
} | |
static var defaultLanguage: String { | |
return "en" | |
} | |
private var toLanguage: Language? { | |
return Language(rawValue: self) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment