Faberbabel
这个库是一个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 文件。