【发布时间】:2017-03-28 15:01:52
【问题描述】:
所以我有一个主要的 iOS 应用程序,其中包含我制作的框架。
在这个框架中,我创建了一个可本地化的助手以及一个日期助手。
日期助手有一个函数timeAgo(),它可以返回“8 小时前”。我想本地化这个字符串。所以我的框架中有这样的东西:
public extension String {
public func localized(in bundle: Bundle) -> String {
if let path = bundle.path(forResource: Localize.currentLanguage(), ofType: "lproj"),
let bundle = Bundle(path: path) {
return bundle.localizedString(forKey: self, value: nil, table: nil)
}
return self
}
}
public extension Date {
public func timeAgo(format: DateUnitFormat = .short) -> String {
let thisFrameworkBundle = Bundle(for: Localize.self) // Class declared in the framework
//Whatever, just display a localized word
return "second".localized(in: thisFrameworkBundle)
}
}
当我运行本地测试(框架本身内部的单元测试)时,本地化的东西起作用了。已找到捆绑包。
但是当我从我的主应用程序调用 timeAgo 时,它不再工作了。
我尝试将这一行 let thisFrameworkBundle = Bundle(for: Localize.self) 更改为 let thisFrameworkBundle = Bundle(identifier: "com.myIdentifier"),同样的事情(所以它在框架内工作,但从主应用程序调用时不起作用)。
编辑:
好的,所以我注意到Bundle(identifier: "com.myIdentifier") 在框架中不起作用,因为我使用的是 Cocoapods,它用一个 cocoapod 覆盖了框架标识符。但是,我仍然不明白为什么使用 Bundle(for: FrameworkClass.self) 在主应用程序中不起作用(但在框架的单元测试中起作用)
【问题讨论】:
-
向我提出的答案添加评论...“com.myIdentifier”完全合格吗?如果是这样,我会尽快删除我的答案(和此评论) - 但请查看我必须使用的 UseYourLoaf 的链接。这可能是您需要的。
标签: ios swift internationalization bundle