Storyboard + базовая локализация +.strings файл не локализуется во время выполнения
(Есть похожие вопросы. Некоторые из них привели к ответам, которые я пробовал, и они не работали. У других не было ответов, я полагаю, потому что кверты не предоставили столько деталей, сколько я собираюсь.)
Я начал с раскадровки, которая хорошо работала для моего приложения; строки, которые он содержит, находятся на английском языке. Я хотел добавить французскую локализацию. Я сделал это:
- Добавлена базовая локализация, которая перенесена
MainStoryboard.storyboard
от en.lproj
до Base.lproj
.
- Добавлена французская локализация, которая клонировала
InfoPlist.strings
(английский)
и MainStoryboard.storyboard
(Base) в fr.lproj
.
- Изменено несколько строк (заголовки сегментов в
UISegmentedControl
) во французском MainStoryboard.storyboard
.
- В симуляторе установите язык на французский язык.
- Отредактируйте приложение из Xcode.
Результат: это сработало; мои измененные строки появились в запущенном приложении.
Но я хочу быть всем фантазии. Я хочу сделать французскую локализацию с помощью файла .strings
. (Это не просто вопрос фантазии, французская локализация будет передана нетехническим переводчикам, которых нельзя ожидать, чтобы осваивать интерфейс Builder.) Итак:
- Выбрали базу
MainStoryboard.storyboard
в проекте Xcode
навигатор.
- В инспекторе файлов в разделе "Локализация" изменился французский
локализации из "Interface Builder Cocoa Touch Storyboard" на
"Локализованные строки".
- Принято Xcode предупреждение о том, что французская раскадровка будет отброшена
в пользу файла
.strings
, который появляется в редакторе помощника.
- Сделал те же два изменения; там не вопрос о том, что они ошибаются
строки, потому что все они прокомментированы как
IBUISegmentedControl...segmentTitles
; и текст ярлыка не
появляются в другом месте в файле .strings
.
- Удалена существующая (рабочая) копия приложения из симулятора.
- Отмените приложение.
Результат. В представлении используется базовая (первоначально английская) локализация вместо загрузки французских строк.
Это неудовлетворительно. Я попытался удалить приложение из симулятора и даже удалить папку с производными данными. Ошибка сохраняется.
Как я уже сказал, я не могу превратить файл .storyboard
в нетехнический переводчик. Как я могу заставить iOS принять локализацию раскадровки из файла .strings
?
Ответы
Ответ 1
У меня была такая же проблема с моим UISegmentedControl
s. Оказывается, есть ошибка в iOS 6:.strings раскадровка не будет работать с текстом UISegmentedControl
и на UISearchBar
заполнителями.
См. Этот openradar: http://openradar.appspot.com/radar?id=2159402
Вы пытались локализовать другие элементы, такие как UILabel
s? Это должно работать.
Ответ 2
Вот как я это решил:
in viewDidLoad:
[self.segmentedControl setTitle:NSLocalizedString(@"Title", @"Your localize comment") forSegmentAtIndex:0];
Вы можете сделать то же самое для заполнителя поиска:
[self.searchBar setPlaceholder:NSLocalizedString(@"Your string placeholder", @"Your comment for localizers")];
Затем просто создайте файл Localizable.strings, и он будет работать.
Ответ 3
Для людей, разрабатывающих для iOS 7 или выше и поиск формата .strings
для строки поиска, вот как вы должны перевести поле placeholder
, например:
/* Class = "UISearchBar"; normalTitle = "Search for Places"; ObjectID = "F3d-Ir-fni"; */
"F3d-Ir-fni.placeholder" = "Nach Orten suchen";