OnlineL10n 0.3.3

OnlineL10n 0.3.3

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最后发布2019年9月
SPM支持 SPM

Sebastian WestemeyerTim Christmann 维护。



  • Sebastian Westemeyer 编写

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.

许可证

代码可在github上的项目中找到,遵循MIT许可