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";