Как использовать Localizable.strings, хранящиеся в CocoaTouch Framework?

Я хочу добавить многоязычную поддержку в CocoaTouch Framework.

Проблема: файл Localizable.strings, который я создал, только используется NSLocalizedString, когда он является частью основного приложения и его целевой. Я хотел бы сохранить его внутри Framework, чтобы все было в порядке.

Как я могу использовать Localizable.strings при размещении внутри CocoaTouch Framework?

Ответ 1

Использование:

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
    }

пример использования:

let locString = POLocalized("key")

Ответ 2

Это можно сделать, указав идентификатор пакета в конструкторе NSLocalizedString.

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

Ответ 3

Вы можете добавить эту структуру к своей базе кода:

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.