Parlance是一个用于iOS应用本地化和复数的Swift框架。
shared
实例Locale
选择要使用的语言Int
和Language
选择要使用的复数类别// Supported Languages
enum Language {
case english
case irish
}
final class ParlanceCoordinator: ParlanceCoordinatable {
static let shared = ParlanceCoordinator()
// Language to use for the given Locale
func currentLanguage(for locale: Locale) -> Language {
switch locale.languageCode {
case "ga"?: return .irish
default: return .english
}
}
// Plural Category for the given Int and Language
func category(for int: Int, language: Language) -> PluralCategory {
switch language {
case .english:
switch int {
case 1: return .one
default: return .other
}
case .irish:
switch int {
case 1: return .one
case 2: return .two
case _ where int >= 3 && int <= 6: return .few
case _ where int >= 7 && int <= 10: return .many
default: return .other
}
}
}
}
BaseModule
的类_ParlanceCoordinatable
的类型t()
的调用跳转到相应语言的SpecificParlance
静态函数中的t()
enum LogInParlanceKey {
case signedInWelcomeMessage(name: String)
case guestWelcomeMessage
}
class LogInParlance: BaseParlance {
typealias _ParlanceCoordinator = ParlanceCoordinator
func t(_ key: LogInParlanceKey) -> String {
switch currentLanguage {
case .english: return LogInParlance_en.t(key)
case .irish: return LogInParlance_ga.t(key)
}
}
}
enum ShoppingCartParlanceKey {
case numberOfItems(Int)
}
class ShoppingCartParlance: BaseParlance {
typealias _ParlanceCoordinator = ParlanceCoordinator
func t(_ key: ShoppingCartParlanceKey) -> String {
switch currentLanguage {
case .english: return en.t(key)
case .irish: return ga.t(key)
}
}
}
SpecificModule
的类_ParlanceCoordinatable
的类型_PluralCategory
的类型category(for:)
为任何Int
获取复数类别enum EnglishPluralCategory: String {
case one
case other
}
class LoginParlance_EN: SpecificModule {
typealias _ParlanceCoordinator = ParlanceCoordinator
typealias PluralCategory = EnglishPluralCategory
static func t(_ key: LogInParlanceKey) -> String {
switch key {
case .signedInWelcomeMessage(name: let name): return "Welcome, " + name
case .guestWelcomeMessage: return "Welcome"
}
}
}
class ShoppingCartParlance_EN: SpecificModule {
typealias _ParlanceCoordinator = ParlanceCoordinator
typealias PluralCategory = EnglishPluralCategory
static func t(_ key: ShoppingCartParlanceKey) -> String {
switch key {
case .numberOfItems(let count):
switch category(for: count) {
case .one: return "1 item"
case .other: return "\(count) items"
}
}
}
}
要运行示例项目,请先 克隆仓库,然后从Example目录运行pod install
Parlance通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中
platform :ios, "10.0"
use_frameworks!
target "<YOUR_TARGET>" do
pod "Parlance"
end
布莱恩·雷德博,[email protected]
Parlance可使用MIT许可证。更多信息请参阅LICENSE文件。