OnlineL10n - 一个使用 Swift 编写的在线本地化库
OnlineL10n 库使用数据绑定技术将界面元素绑定到本地化变量。您只需实现一个简单的语言提供程序协议,并通过密钥绑定您的界面元素。当切换语言时,数据绑定机制会自动切换所有文本元素。
如果需要一个例子,只需克隆库并在模拟器中运行应用程序。一个示例语言切换界面是库的一部分,可以通过Storyboard引用包含在内。
使用 ReactiveObjC 库实现数据绑定。所以即使您不需要在线本地化,至少您有一个如何使用 ReactiveObjC 进行数据绑定的小型示例。
信息:v0.3.1 -> v0.3.2 -> 从 SWIFT 3 更新到 5
安装
安装 OnlineL10n 的推荐方法是使用 CocoaPods 包管理器,因为它提供灵活的依赖关系管理,安装非常简单。
如果尚未安装,请安装 CocoaPods
$ [sudo] gem install cocoapods
$ pod setup
切换到 Xcode 项目的目录,创建并编辑 Podfile 并添加 RestKit
$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile
platform :ios, '10.0'
pod 'OnlineL10n'
将安装到您的项目中
$ pod install
从 .xcworkspace 文件打开您的项目(不是常用的项目文件)
$ open MyProject.xcworkspace
示例
您可能想实现一个共享的本地区化管理器,如下所示
import OnlineL10n
class SharedManager {
static let sharedInstance = LocalizationManager(languageProvider: UILanguageProvider(), defaultLanguage: "de", language: "de")
private init() {}
}
并提供您的实现LanguageProvider
协议的类,如下面的示例中的UILanguageProvider
import OnlineL10n
class UILanguageProvider: LanguageProvider {
// get languages
func languages() -> [String] {
return ["de", "en"]
}
// get all language keys for one specified language
func languageKeys(language: String) -> [String : String] {
if language == "de" {
return ["top_label" : "Top Label Text auf Deutsch", "button" : "Ein Knopf"]
} else {
return ["top_label" : "Top label text in English", "button" : "A button"]
}
}
// check for one specified language
func has(language: String) -> Bool {
return language == "de" || language == "en"
}
// do we provide flags for countries?
func hasFlags() -> Bool {
return true
}
// provide a flag for a country/language
func flag(language: String) -> Data? {
if (language == "de") {
return UIImagePNGRepresentation(UIImage(named: "Germany")!)
} else {
return UIImagePNGRepresentation(UIImage(named: "England")!)
}
}
}
这样绑定您的界面元素
// bind to language keys
self.labelTop.subscribeToLanguage(self, manager: SharedManager.sharedInstance, key: "top_label")
鸣谢
示例旗帜图标取自 icondrawer.