Faberbabel 1.0.0

Faberbabel 1.0.0

CI FabernovelClaire Peyron维护。



  • Fabernovel

Faberbabel

Version License Platform

这个库是一个iOS SDK,用于动态更新应用文本。新文本从远程源下载并与旧文本合并。主要优点是不需要重新部署应用就可以更新文本。

特性

  • 从远程源动态更新应用文本
  • 避免重新部署应用
  • 将键与更新的文本本地化
  • 当发生错误时记录事件(键缺失/合并错误)

示例

要运行示例项目,首先克隆仓库,然后从Example目录运行pod install

如何使用

默认配置

例如,在AppDelegate.swift中使用您的凭据设置库。

Faberbabel.configure(
    projectId: "xxx-xxx-xxx",
    baseURL: URL(string: "https://xxx.com")!
)

如果您正在使用扩展,您可能希望为所有目标共享一个单词。为此,在目标的功能中添加App Group Identifier,然后在configure方法中传递标识符。

Faberbabel.configure(
    projectId: "xxx-xxx-xxx",
    baseURL: URL(string: "https://xxx.com")!,
    appGroupIdentifier: "group.xxx.com"
)

自定义设置

除了使用默认的configure方法,您还可以控制所有依赖关系

  • 如何获取单词
  • 如何处理错误事件
  • 获取的单词在哪里
Faberbabel.configure(
    fetcher: MyCustomFetcher(),
    logger: MyCustomLogger(),
    localizableDirectoryUrl: myCustomLocation
)

从自定义源获取单词

您可以从自定义源获取单词。为此,创建一个符合LocalizableFetcher协议的对象。

class MyCustomFetcher: LocalizableFetcher {

    // MARK: - LocalizableFetcher

    func fetch(for lang: String,
               completion: @escaping (Result<Localizations, Error>) -> Void) {
        let result: Localizations = ["key": "value"]
        completion(result)
    }
}

记录事件

当发生错误时,将创建事件并发送到EventLogger。

默认情况下,已经存在一些日志记录器

  • ConsoleEventLogger,它将事件打印到控制台
  • EmptyLogger,什么都不做
  • CompoundEventLogger,它聚合多个日志记录器

您可以通过符合EventLogger协议来创建自己的日志记录器。例如

class RemoteEventLogger: EventLogger {

    // MARK: - EventLogger

    func log(_ events: [Event]) {
        // send events to remote server
    }
}

本地化目录URL

默认情况下,从远程源下载数字化字符串的新Localizable.strings存储在用户库目录中,如果没有传递appGroupIdentifier,或者存储在应用程序组共享目录的文件系统中的位置。

您可以创建自定义URL,并完全控制本地化目录的位置。

更新文字

要从远程源获取新的文字,简单调用updateWording方法,如下所示:

let wordingRequest = UpdateWordingRequest(
    language: .languageCode("fr") , // Optional: Default is '.current'
    mergingOptions: [] // Optional: Default is []
    // If you want the merge to allow big changes in your wording such as a number of attributes mismatch,
    // you can for example use the following :
    // mergingOptions: [.allowRemoteEmptyString, .allowAttributeNumberMismatch]
)

Faberbabel.updateWording(
    request: wordingRequest,
    bundle: .main
) { result in
    switch result {
    case .success:
        // Update UI
    case let .failure(error):
        // Handle error
    }
}

使用更新后的文字本地化键

要获取键的本地化版本,不要使用NSLocalizedString,因为它只会在主打包文件中搜索翻译,而应使用String上的fb_translation方法。

"key".fb_translation // returns the localized string in the current language

您还可以为特定语言获取翻译。

"key".fb_translate(to: "fr")

如果指定语言中没有找到值,系统将回退到英文。

要求

  • iOS 10.0+ / tvOS 10.0+
  • Swift 5.0

安装

Faberbabel可以通过CocoaPods获取。要安装它,请简单地将以下行添加到您的Podfile中。

pod 'Faberbabel'

通讯

  • 如果您需要帮助,请使用Twitter
  • 如果您想提出一般性问题,请使用Twitter
  • 如果您想申请工作,请访问https://careers.fabernovel.com/
  • 如果发现bug,请提交问题。
  • 如果您有功能请求,请提交问题。
  • 如果您想贡献,请提交pull request。

致谢

Faberbabel 由 Fabernovel 拥有和维护。您可以在 Twitter 上关注我们:@Fabernovel

许可协议

Faberbabel 可在 MIT 许可下使用。更多信息请参阅 LICENSE 文件。