如何使用存储在CocoaTouch Framework中的Localizable.strings?

时间:2015-02-25 16:46:09

标签: ios swift localization multilingual nslocalizedstring

我想为CocoaTouch框架添加多语言支持。

问题:我创建的 Localizable.strings 文件只有当它是主应用程序及其目标的一部分时才会被 NSLocalizedString 使用。我想将它存储在框架中以保持分离。

当放置在CocoaTouch框架内时,如何使用 Localizable.strings

4 个答案:

答案 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

[Access to Framework 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