Как передать файлы локализованного интерфейса (XIB, Storyboard) в структуру проекта xcode и заставить работать интернационализацию?
В качестве изменений cocoapods 1.0.0.beta.1 говорят "Локализованные интерфейсные файлы (XIB, раскадровка) с использованием базовой интернационализации - Base.lproj/Main.xib и en.lproj/Main.strings представлены в виде группы вариантов с именем Main.xib"и насколько cocoapods 1.0.0.beta.1 " Файлы интерфейса специального случая для использования имени XIB или раскадровки для группы вариантов при использовании базовой интернационализации."
Я ссылаюсь на демо-версию и использую resource_bundles для организации своих ресурсов по моим подспецификациям.
s.resource_bundles = {
'Resources' => ['LocalizationDemo/LocalizationDemo/Resources/**/*.{lproj,storyboard}']
}
и моя версия cocoapods 1.0.1, но результат каталогов
-Resources
--en.lproj
---LocalizationDemo.strings
--LocalizationDemo.storyboard
--de.lproj
---LocalizationDemo.strings
Это не те каталоги результатов, которые я ожидал, и интернационализация интерфейса не работает. Облако кто-нибудь покажет мне правильное использование или демо?
ДОБАВИТЬ: я использую локализацию импорта / экспорта с помощью xcode, прежде чем податься в другие проекты. и я хочу, чтобы он мог работать с импортированными файлами xliff напрямую, вместо добавления IBOutlet или подкласса для элементов управления пользовательского интерфейса.
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
}
}