Как использовать 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
.