Skip to content

Instantly share code, notes, and snippets.

@TerryCK
Created December 27, 2017 10:06
Show Gist options
  • Save TerryCK/bd92e5d244bb5eb70c9ffd71a474d1c0 to your computer and use it in GitHub Desktop.
Save TerryCK/bd92e5d244bb5eb70c9ffd71a474d1c0 to your computer and use it in GitHub Desktop.
//
// 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