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

Ber*_*rnd 15 multilingual localization nslocalizedstring ios swift

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

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

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

pbe*_*beo 9

使用:

NSLocalizedString("Good", tableName: nil, bundle: NSBundle(forClass: self), value: "", comment: "")
Run Code Online (Sandbox Code Playgroud)

或者您可以像这样创建公共函数:

class func POLocalized(key: String) -> String{
        let s =  NSLocalizedString(key, tableName: nil, bundle: NSBundle(forClass: self.classForCoder()), value: "", comment: "")
        return s
    }
Run Code Online (Sandbox Code Playgroud)

使用示例:

let locString = POLocalized("key")
Run Code Online (Sandbox Code Playgroud)

  • 不要将NSBundle(forClass:self)用于公共类,因为一些主bundle类可以继承框架类,而NSBundle(forClass:self)将指向main bundle,而不是框架. (2认同)

Kyl*_*egg 7

这可以通过在NSLocalizedString构造函数中指定框架的包标识符来完成.

if let bundle: NSBundle = NSBundle(identifier: "com.mycompany.TheFramework") {
    let string = NSLocalizedString("key", tableName: nil, bundle: bundle, value: "", comment: "")
    print(string)
}
Run Code Online (Sandbox Code Playgroud)