Как использовать файлы локализованного интерфейса (XIB, Storyboard) в качестве структуры проекта xcode и заставить работать интернационализацию?

Как говорится в изменениях Cocopods 1.0.0.beta.1 "Локализованные файлы интерфейса (XIB , Раскадровка) с использованием базовой интернационализации — Base.lproj/Main.xib и en.lproj/Main.strings представлены в виде группы вариантов с именем Main.xib, а до Cocopods 1.0.0.beta.1 — «Файлы интерфейса для особых случаев». использовать имя XIB или Storyboard для группы вариантов при использовании базовой интернационализации».

Я ссылаюсь на демонстрацию и использую resource_bundles для организации ресурсов в своих подспецификациях.

s.resource_bundles = {
     'Resources' => ['LocalizationDemo/LocalizationDemo/Resources/**/*.{lproj,storyboard}']
}

и моя версия Cocopods 1.0.1, но результат каталогов

-Resources
--en.lproj
---LocalizationDemo.strings
--LocalizationDemo.storyboard
--de.lproj
---LocalizationDemo.strings

Это не тот результат, которого я ожидал, и интернационализация интерфейса не работает. Облако, кто-нибудь покажет мне правильное использование или демонстрацию?

ДОБАВИТЬ: я использую локализацию импорта/экспорта с помощью xcode, прежде чем подключаться к другим проектам. и я хочу, чтобы он мог работать с импортированными файлами xliff напрямую вместо добавления IBOutlet или подкласса для элементов управления пользовательского интерфейса.


person Peter Lin    schedule 04.08.2016    source источник
comment
stackoverflow.com/questions/38716367/   -  person Pooja M. Bohora    schedule 04.08.2016
comment
@PoojaM.Bohora. Спасибо за ответ, но мне это не поможет.   -  person Peter Lin    schedule 04.08.2016


Ответы (1)


Вы должны написать классы для вашего controls, используемого в XIB OR Storyboard Views, и назначить классы соответствующим типам управления, например:

class LocalizedTextField: UITextField {

    override func drawPlaceholderInRect(rect: CGRect) {

        let localizedPlaceHolder = self.placeholder!.localized
        self.placeholder = localizedPlaceHolder
        super.drawPlaceholderInRect(rect)
    }
}
class LocalizedLabel : UILabel {
    override func awakeFromNib() {
        if let text = text {
            self.text = text.localized
            self.bounds.size.width = CGFloat.max
            self.sizeToFit()
        }
    }
}

class LocalizedButton : UIButton {
    override func awakeFromNib() {
        for state in [UIControlState.Normal, UIControlState.Highlighted, UIControlState.Selected, UIControlState.Disabled, UIControlState.Focused] {
            if let title = titleForState(state) {
                setTitle(title.localized, forState: state)
            }
        }
    }
}

extension String {

    var localized: String {
        let localizedValue =  NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
        if localizedValue == "" {

            return self
        }
        else
        {
            return localizedValue
        }
        return self

    }
}

введите здесь описание изображения

person Anupam Mishra    schedule 04.08.2016
comment
Я использую локализацию импорта/экспорта с помощью xcode, прежде чем подключаться к другим проектам. и я хочу, чтобы он мог работать с импортированным файлом xliff напрямую вместо добавления IBOutlet или подкласса для элементов управления пользовательского интерфейса. - person Peter Lin; 09.08.2016