我想为CocoaTouch框架添加多语言支持。
问题:我创建的 Localizable.strings 文件只有当它是主应用程序及其目标的一部分时才会被 NSLocalizedString 使用。我想将它存储在框架中以保持分离。
当放置在CocoaTouch框架内时,如何使用 Localizable.strings ?
答案 0 :(得分:9)
使用:
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$.getJSON('../file/data.json',function(data){
console.log(data);
}).error(function(){
console.log('error');
});
});
</script>
或者您可以像这样创建公共函数:
NSLocalizedString("Good", tableName: nil, bundle: NSBundle(forClass: self), value: "", comment: "")
使用示例:
class func POLocalized(key: String) -> String{
let s = NSLocalizedString(key, tableName: nil, bundle: NSBundle(forClass: self.classForCoder()), value: "", comment: "")
return s
}
答案 1 :(得分:6)
这可以通过在NSLocalizedString
构造函数中指定框架的包标识符来完成。
if let bundle: NSBundle = NSBundle(identifier: "com.mycompany.TheFramework") {
let string = NSLocalizedString("key", tableName: nil, bundle: bundle, value: "", comment: "")
print(string)
}
答案 2 :(得分:0)
您可以将此结构添加到您的代码库中:
internal struct InternalConstants {
private class EmptyClass {}
static let bundle = Bundle(for: InternalConstants.EmptyClass.self)
}
然后使用可选的bundle参数来指定字符串文件的位置:
let yourString = NSLocalizedString("Hello", bundle: InternalConstants.bundle, comment: "")
如果在Bundle.main
构造函数中不使用bundle
参数,则 NSLocalizedString
是默认值。
答案 3 :(得分:0)
从框架中获取 Localizable.strings
一个要点是使用Framework的bundle——字符串(Localizable.string
)所在的bundle
//e.g.
let someString = NSLocalizedString("some_string_id", tableName: nil, bundle: Bundle(identifier: "com.something")!, value: "", comment: "")
扩展变体
extension String {
public var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle(identifier: "com.something")!, value: "", comment: "")
}
}
//using
let someString = "some_string_id".localized